Subversion Repositories SmartDukaan

Rev

Rev 23568 | Rev 23594 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
21612 ashik.ali 1
package com.spice.profitmandi.web.controller;
2
 
21689 ashik.ali 3
import java.io.ByteArrayInputStream;
23584 ashik.ali 4
 
21689 ashik.ali 5
import java.io.ByteArrayOutputStream;
6
import java.io.InputStream;
23343 ashik.ali 7
import java.util.HashMap;
21612 ashik.ali 8
import java.util.HashSet;
21680 ashik.ali 9
import java.util.List;
10
import java.util.Map;
21612 ashik.ali 11
import java.util.Set;
12
 
13
import javax.servlet.http.HttpServletRequest;
21689 ashik.ali 14
import javax.servlet.http.HttpServletResponse;
21612 ashik.ali 15
 
23568 govind 16
import org.apache.logging.log4j.Logger;
17
import org.apache.logging.log4j.LogManager;
21612 ashik.ali 18
import org.springframework.beans.factory.annotation.Autowired;
21689 ashik.ali 19
import org.springframework.core.io.InputStreamResource;
20
import org.springframework.http.HttpHeaders;
21
import org.springframework.http.HttpStatus;
22
import org.springframework.http.MediaType;
23
import org.springframework.http.ResponseEntity;
21612 ashik.ali 24
import org.springframework.stereotype.Controller;
22064 ashik.ali 25
import org.springframework.transaction.annotation.Transactional;
21985 kshitij.so 26
import org.springframework.ui.Model;
21612 ashik.ali 27
import org.springframework.web.bind.annotation.RequestBody;
28
import org.springframework.web.bind.annotation.RequestMapping;
29
import org.springframework.web.bind.annotation.RequestMethod;
21689 ashik.ali 30
import org.springframework.web.bind.annotation.RequestParam;
21612 ashik.ali 31
 
23203 ashik.ali 32
import com.spice.profitmandi.common.enumuration.SearchType;
21612 ashik.ali 33
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
21985 kshitij.so 34
import com.spice.profitmandi.common.model.CartFofo;
22860 ashik.ali 35
import com.spice.profitmandi.common.model.CreateOrderRequest;
23584 ashik.ali 36
import com.spice.profitmandi.common.model.CustomCustomer;
22660 ashik.ali 37
import com.spice.profitmandi.common.model.PdfModel;
22581 ashik.ali 38
import com.spice.profitmandi.common.model.PriceModel;
21612 ashik.ali 39
import com.spice.profitmandi.common.model.ProfitMandiConstants;
21689 ashik.ali 40
import com.spice.profitmandi.common.util.PdfUtils;
23298 ashik.ali 41
import com.spice.profitmandi.common.util.Utils;
22244 ashik.ali 42
import com.spice.profitmandi.common.web.util.ResponseSender;
22217 ashik.ali 43
import com.spice.profitmandi.dao.entity.dtr.InsurancePolicy;
23343 ashik.ali 44
import com.spice.profitmandi.dao.entity.dtr.InsuranceProvider;
23548 ashik.ali 45
import com.spice.profitmandi.dao.entity.dtr.PaymentOptionTransaction;
21728 ashik.ali 46
import com.spice.profitmandi.dao.entity.fofo.Customer;
47
import com.spice.profitmandi.dao.entity.fofo.CustomerAddress;
22927 ashik.ali 48
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
22860 ashik.ali 49
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
21728 ashik.ali 50
import com.spice.profitmandi.dao.entity.fofo.PaymentOption;
23419 ashik.ali 51
import com.spice.profitmandi.dao.entity.fofo.PrebookingOrderItem;
23298 ashik.ali 52
import com.spice.profitmandi.dao.entity.user.Address;
23548 ashik.ali 53
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
54
import com.spice.profitmandi.dao.repository.dtr.PaymentOptionTransactionRepository;
22217 ashik.ali 55
import com.spice.profitmandi.dao.repository.dtr.InsurancePolicyRepository;
23343 ashik.ali 56
import com.spice.profitmandi.dao.repository.dtr.InsuranceProviderRepository;
23298 ashik.ali 57
import com.spice.profitmandi.dao.repository.dtr.RetailerRegisteredAddressRepository;
21728 ashik.ali 58
import com.spice.profitmandi.dao.repository.fofo.CustomerAddressRepository;
59
import com.spice.profitmandi.dao.repository.fofo.CustomerRepository;
22860 ashik.ali 60
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
21728 ashik.ali 61
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
23366 ashik.ali 62
import com.spice.profitmandi.dao.repository.fofo.FofoPartnerPaymentOptionRepository;
21728 ashik.ali 63
import com.spice.profitmandi.dao.repository.fofo.PaymentOptionRepository;
23419 ashik.ali 64
import com.spice.profitmandi.dao.repository.fofo.PrebookingOrderItemRepository;
23298 ashik.ali 65
import com.spice.profitmandi.dao.repository.user.AddressRepository;
23366 ashik.ali 66
import com.spice.profitmandi.service.order.OrderService;
22069 ashik.ali 67
import com.spice.profitmandi.service.pricing.PricingService;
22139 amit.gupta 68
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 69
import com.spice.profitmandi.web.util.CookiesProcessor;
21612 ashik.ali 70
 
71
@Controller
22037 amit.gupta 72
@Transactional(rollbackFor=Throwable.class)
21612 ashik.ali 73
public class OrderController {
74
 
23568 govind 75
	private static final Logger LOGGER = LogManager.getLogger(OrderController.class);
21985 kshitij.so 76
 
21612 ashik.ali 77
	@Autowired
22860 ashik.ali 78
	private CustomerRepository customerRepository;
21985 kshitij.so 79
 
21612 ashik.ali 80
	@Autowired
22860 ashik.ali 81
	private FofoOrderItemRepository fofoLineItemRepository;
21985 kshitij.so 82
 
21612 ashik.ali 83
	@Autowired
22860 ashik.ali 84
	private PaymentOptionRepository paymentOptionRepository;
21985 kshitij.so 85
 
21680 ashik.ali 86
	@Autowired
22860 ashik.ali 87
	private FofoOrderRepository fofoOrderRepository;
21985 kshitij.so 88
 
21680 ashik.ali 89
	@Autowired
22860 ashik.ali 90
	private CustomerAddressRepository customerAddressRepository;
22217 ashik.ali 91
 
92
	@Autowired
22860 ashik.ali 93
	private InsurancePolicyRepository insurancePolicyRepository;
23343 ashik.ali 94
 
95
	@Autowired
96
	private InsuranceProviderRepository insuranceProviderRepository;
21985 kshitij.so 97
 
21896 ashik.ali 98
	@Autowired
22860 ashik.ali 99
	private CookiesProcessor cookiesProcessor;
22069 ashik.ali 100
 
101
	@Autowired
22860 ashik.ali 102
	private PricingService pricingService;
22244 ashik.ali 103
 
22354 ashik.ali 104
	@Autowired
22860 ashik.ali 105
	private OrderService orderService;
22244 ashik.ali 106
 
23298 ashik.ali 107
	@Autowired
108
	private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
22354 ashik.ali 109
 
110
	@Autowired
23298 ashik.ali 111
	private AddressRepository addressRepository;
112
 
113
	@Autowired
23548 ashik.ali 114
	private PaymentOptionTransactionRepository fofoOrderPaymentOptionRepository;
23366 ashik.ali 115
 
116
	@Autowired
117
	private FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;
118
 
119
	@Autowired
23419 ashik.ali 120
	private PrebookingOrderItemRepository prebookingOrderItemRepository;
121
 
122
	@Autowired
22860 ashik.ali 123
	private ResponseSender<?> responseSender;
22689 amit.gupta 124
 
21985 kshitij.so 125
	@RequestMapping(value = "/order")
22927 ashik.ali 126
	public String orderIndex(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model) throws ProfitMandiBusinessException{
127
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);;
128
 
23298 ashik.ali 129
		int addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(loginDetails.getFofoId());
130
		Address address = addressRepository.selectById(addressId);
131
 
22860 ashik.ali 132
		List<CartFofo> cartItems = orderService.cartCheckout(cartData);
133
		Set<Integer> itemIds = new HashSet<>();
134
		for(CartFofo cartFofo : cartItems){
135
			itemIds.add(cartFofo.getItemId());
21985 kshitij.so 136
		}
22860 ashik.ali 137
		Map<Integer, PriceModel> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds, loginDetails.getFofoId());
23366 ashik.ali 138
		List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository.selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());
139
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new HashSet<>(paymentOptionIds));
22860 ashik.ali 140
		LOGGER.info("mopPriceMap {}", mopPriceMap);
23298 ashik.ali 141
		model.addAttribute("stateNames", Utils.getAllStateNames());
142
		model.addAttribute("retailerStateName", address.getState());
22860 ashik.ali 143
		model.addAttribute("cartObj", cartItems);
144
		model.addAttribute("mopPriceMap", mopPriceMap);
23366 ashik.ali 145
		model.addAttribute("paymentOptions", paymentOptions);
22860 ashik.ali 146
		return "order-index";
21985 kshitij.so 147
	}
22660 ashik.ali 148
 
21612 ashik.ali 149
 
22244 ashik.ali 150
	@RequestMapping(value = "/insurancePrices", method = RequestMethod.GET)
22927 ashik.ali 151
	public ResponseEntity<?> getInsurancePrices(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.PRICE) float price) throws ProfitMandiBusinessException{
22244 ashik.ali 152
		LOGGER.info("Request received at url : {}", request.getRequestURI());
22927 ashik.ali 153
		Set<Float> prices = new HashSet<>();
154
		prices.add(price);
155
		return responseSender.ok(pricingService.getInsurancePrices(prices, ProfitMandiConstants.GADGET_COPS));
22244 ashik.ali 156
	}
157
 
158
 
21985 kshitij.so 159
	@RequestMapping(value = "/get-order", method = RequestMethod.GET)
22927 ashik.ali 160
	public String getOrder(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws ProfitMandiBusinessException{
161
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
162
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
163
		List<FofoOrderItem> fofoLineItems = fofoLineItemRepository.selectByOrderId(fofoOrder.getId());
164
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
165
		Customer customer  = customerRepository.selectById(fofoOrder.getCustomerId());
166
		customerAddress.setPhoneNumber(customer.getMobileNumber());
23548 ashik.ali 167
		List<PaymentOptionTransaction> paymentOptionTransactions = fofoOrderPaymentOptionRepository.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
168
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
22927 ashik.ali 169
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
23343 ashik.ali 170
		this.addInsuranceProvider(insurancePolicies);
23419 ashik.ali 171
		List<PrebookingOrderItem> prebookingOrderItems = prebookingOrderItemRepository.selectByOrderId(orderId);
172
		Map<Integer, PrebookingOrderItem> itemIdPrebookingOrderItemMap = this.prebookingOrderItemToItemIdPrebookingOrderItem(prebookingOrderItems);
22927 ashik.ali 173
		model.addAttribute("fofoOrder", fofoOrder);
174
		model.addAttribute("fofoLineItems", fofoLineItems);
175
		model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
176
		model.addAttribute("customerBillingAddressObj", customerAddress);
23548 ashik.ali 177
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
23366 ashik.ali 178
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
22927 ashik.ali 179
		model.addAttribute("insurancePolicies", insurancePolicies);
23419 ashik.ali 180
		model.addAttribute("itemIdPrebookingOrderItemMap", itemIdPrebookingOrderItemMap);
22927 ashik.ali 181
		return "order-details";
21985 kshitij.so 182
	}
22244 ashik.ali 183
 
23419 ashik.ali 184
	@RequestMapping(value = "/generateOtp", method = RequestMethod.POST)
185
	public ResponseEntity<?> generateOtp(@RequestBody Map<Integer, Float> itemIdAdvanceAmount, @RequestParam(name = ProfitMandiConstants.CUSTOMER_EMAIL_ID) String customerEmailId, @RequestParam(name = ProfitMandiConstants.CUSTOMER_MOBILE_NUMBER) String customerMobileNumber)
186
			throws ProfitMandiBusinessException{
187
 
188
		int response = orderService.generatePrebookingOrdersOtp(customerEmailId, customerMobileNumber, itemIdAdvanceAmount);
189
 
190
		return responseSender.ok(response);
191
	}
192
 
193
	@RequestMapping(value = "/validateOtp", method = RequestMethod.GET)
194
	public ResponseEntity<?> validateOtp(@RequestParam(name = ProfitMandiConstants.CUSTOMER_EMAIL_ID) String customerEmailId,
195
			@RequestParam(name = ProfitMandiConstants.CUSTOMER_MOBILE_NUMBER) String customerMobileNumber,
196
			@RequestParam("otpId") int otpId, @RequestParam("otpValue") String otpValue)
197
			throws ProfitMandiBusinessException{
198
 
199
		String responseString = orderService.validateOtp(customerEmailId, customerMobileNumber, otpId, otpValue);
200
 
201
		return responseSender.ok(responseString);
202
	}
203
 
204
 
23343 ashik.ali 205
	private Map<Integer, InsuranceProvider> toInsuranceProviderIdInsuranceProvider(List<InsuranceProvider> insuranceProviders){
206
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = new HashMap<>();
207
		for(InsuranceProvider insuranceProvider : insuranceProviders){
208
			insuranceProviderIdInsuranceProviderMap.put(insuranceProvider.getId(), insuranceProvider);
209
		}
210
		return insuranceProviderIdInsuranceProviderMap;
211
	}
22244 ashik.ali 212
 
23343 ashik.ali 213
	private void addInsuranceProvider(List<InsurancePolicy> insurancePolicies){
214
		if(insurancePolicies.isEmpty()){
215
			return;
216
		}
217
		Set<Integer> insuranceProviderIds = new HashSet<>();
218
		for(InsurancePolicy insurancePolicy : insurancePolicies){
219
			insuranceProviderIds.add(insurancePolicy.getProviderId());
220
		}
221
		LOGGER.info("insuranceProviderIds {}", insuranceProviderIds);
222
		List<InsuranceProvider> insuranceProviders = insuranceProviderRepository.selectByIds(insuranceProviderIds);
223
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = this.toInsuranceProviderIdInsuranceProvider(insuranceProviders);
224
		for(InsurancePolicy insurancePolicy : insurancePolicies){
225
			insurancePolicy.setInsuranceProvider(insuranceProviderIdInsuranceProviderMap.get(insurancePolicy.getProviderId()));
226
		}
227
	}
228
 
229
 
22244 ashik.ali 230
	@RequestMapping(value = "/saleDetails", method = RequestMethod.GET)
22927 ashik.ali 231
	public String getSaleDetails(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws ProfitMandiBusinessException{
232
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
233
 
234
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
235
		List<FofoOrderItem> fofoLineItems = fofoLineItemRepository.selectByOrderId(fofoOrder.getId());
236
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
23548 ashik.ali 237
		List<PaymentOptionTransaction> paymentOptionTransactions = fofoOrderPaymentOptionRepository.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
238
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
22927 ashik.ali 239
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
23343 ashik.ali 240
		this.addInsuranceProvider(insurancePolicies);
23419 ashik.ali 241
		List<PrebookingOrderItem> prebookingOrderItems = prebookingOrderItemRepository.selectByOrderId(orderId);
242
		Map<Integer, PrebookingOrderItem> itemIdPrebookingOrderItemMap = this.prebookingOrderItemToItemIdPrebookingOrderItem(prebookingOrderItems);
22927 ashik.ali 243
		model.addAttribute("fofoOrder", fofoOrder);
244
		model.addAttribute("fofoLineItems", fofoLineItems);
245
		model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
246
		model.addAttribute("customerBillingAddressObj", customerAddress);
23548 ashik.ali 247
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
23366 ashik.ali 248
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
22927 ashik.ali 249
		model.addAttribute("insurancePolicies", insurancePolicies);
23419 ashik.ali 250
		model.addAttribute("itemIdPrebookingOrderItemMap", itemIdPrebookingOrderItemMap);
22927 ashik.ali 251
		return "sale-details";
22244 ashik.ali 252
	}
253
 
23584 ashik.ali 254
	@RequestMapping(value = "/getSearchOrder")
255
	public String getSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException{
256
		return "search-order";
257
	}
258
 
259
 
260
	@RequestMapping(value = "/customerDetails", method = RequestMethod.PUT)
261
	public String updateCustomerDetails(HttpServletRequest request, @RequestBody CustomCustomer customCustomer, @RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
262
			throws ProfitMandiBusinessException{
263
 
264
		orderService.updateCustomerDetails(customCustomer, invoiceNumber);
265
 
266
		return this.getSearchOrderDetails(request, invoiceNumber, model);
267
	}
268
 
269
 
270
	@RequestMapping(value = "/searchOrderDetails", method = RequestMethod.GET)
271
	public String getSearchOrderDetails(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model) throws ProfitMandiBusinessException{
272
 
273
		FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
274
		List<FofoOrderItem> fofoLineItems = fofoLineItemRepository.selectByOrderId(fofoOrder.getId());
275
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
276
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
277
		List<PaymentOptionTransaction> paymentOptionTransactions = fofoOrderPaymentOptionRepository.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
278
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
279
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
280
		this.addInsuranceProvider(insurancePolicies);
281
		List<PrebookingOrderItem> prebookingOrderItems = prebookingOrderItemRepository.selectByOrderId(fofoOrder.getId());
282
		Map<Integer, PrebookingOrderItem> itemIdPrebookingOrderItemMap = this.prebookingOrderItemToItemIdPrebookingOrderItem(prebookingOrderItems);
283
		model.addAttribute("fofoOrder", fofoOrder);
284
		model.addAttribute("fofoLineItems", fofoLineItems);
285
		model.addAttribute("customer", customer);
286
		model.addAttribute("customerAddress", customerAddress);
287
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
288
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
289
		model.addAttribute("insurancePolicies", insurancePolicies);
290
		model.addAttribute("itemIdPrebookingOrderItemMap", itemIdPrebookingOrderItemMap);
291
		model.addAttribute("stateNames", Utils.getAllStateNames());
292
		return "search-order-details";
293
	}
294
 
23548 ashik.ali 295
	private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap(List<PaymentOptionTransaction> paymentOptionTransactions){
23366 ashik.ali 296
		Set<Integer> paymentOptionIds = new HashSet<>();
23548 ashik.ali 297
		for(PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
298
			paymentOptionIds.add(paymentOptionTransaction.getPaymentOptionId());
23366 ashik.ali 299
		}
300
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(paymentOptionIds);
301
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
302
		for(PaymentOption paymentOption : paymentOptions) {
303
			paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
304
		}
305
		return paymentOptionIdPaymentOptionMap;
306
	}
307
 
23419 ashik.ali 308
	private Map<Integer, PrebookingOrderItem> prebookingOrderItemToItemIdPrebookingOrderItem(List<PrebookingOrderItem> prebookingOrderItems){
309
		Map<Integer, PrebookingOrderItem> itemIdPrebookingOrderItem = new HashMap<>();
310
		for(PrebookingOrderItem prebookingOrderItem : prebookingOrderItems) {
311
			itemIdPrebookingOrderItem.put(prebookingOrderItem.getItemId(), prebookingOrderItem);
312
		}
313
		return itemIdPrebookingOrderItem;
314
	}
315
 
21985 kshitij.so 316
 
317
	@RequestMapping(value = "/create-order", method = RequestMethod.POST)
22927 ashik.ali 318
	public String createOrder(HttpServletRequest request, @RequestBody CreateOrderRequest createOrderRequest, Model model)  throws ProfitMandiBusinessException{
22064 ashik.ali 319
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), createOrderRequest);
22927 ashik.ali 320
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
321
 
22860 ashik.ali 322
		int fofoOrderId = orderService.createOrder(createOrderRequest, fofoDetails.getFofoId());
22280 ashik.ali 323
		LOGGER.info("Order has been created successfully...");
22860 ashik.ali 324
		return "redirect:/get-order/?orderId="+fofoOrderId;
21612 ashik.ali 325
	}
21985 kshitij.so 326
 
327
 
21689 ashik.ali 328
	@RequestMapping(value = "/generateInvoice")
22927 ashik.ali 329
	public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException{
22064 ashik.ali 330
		LOGGER.info("Request received at url {} with params [{}={}] ", request.getRequestURI(), ProfitMandiConstants.ORDER_ID, orderId);
22139 amit.gupta 331
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
22860 ashik.ali 332
 
333
		PdfModel pdfModel = orderService.getInvoicePdfModel(fofoDetails.getFofoId(), orderId);
22026 ashik.ali 334
 
21689 ashik.ali 335
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
336
		PdfUtils.generateAndWrite(pdfModel, byteArrayOutputStream);
337
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
22026 ashik.ali 338
        final HttpHeaders headers=new HttpHeaders();
339
        headers.setContentType(MediaType.APPLICATION_PDF);
22860 ashik.ali 340
        headers.set("Content-disposition", "inline; filename=invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
22026 ashik.ali 341
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
342
        final InputStream inputStream=new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
343
        final InputStreamResource inputStreamResource=new InputStreamResource(inputStream);
344
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
21689 ashik.ali 345
	}
22244 ashik.ali 346
 
347
	@RequestMapping(value = "/saleHistory")
23203 ashik.ali 348
	public String saleHistory(HttpServletRequest request, @RequestParam(name = "searchValue", defaultValue = "") String searchValue, @RequestParam(name = "searchType", defaultValue="") SearchType searchType, @RequestParam(name = ProfitMandiConstants.START_TIME, required = false) String startTimeString, @RequestParam(name = ProfitMandiConstants.END_TIME, required = false) String endTimeString, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{
22927 ashik.ali 349
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
22244 ashik.ali 350
 
23203 ashik.ali 351
		Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue, startTimeString, endTimeString, offset, limit);
352
		model.addAllAttributes(map);
22244 ashik.ali 353
 
354
		return "sale-history";
355
	}
22291 ashik.ali 356
 
357
 
358
	@RequestMapping(value = "/getPaginatedSaleHistory")
23203 ashik.ali 359
	public String getSaleHistoryPaginated(HttpServletRequest request, @RequestParam(name = "searchValue", defaultValue="") String searchValue, @RequestParam(name = "searchType", defaultValue = "") SearchType searchType, @RequestParam(name = ProfitMandiConstants.START_TIME, required = false) String startTimeString, @RequestParam(name = ProfitMandiConstants.END_TIME, required = false) String endTimeString, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue="10") int limit, Model model) throws ProfitMandiBusinessException{
22927 ashik.ali 360
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
361
 
23203 ashik.ali 362
		Map<String, Object> map = orderService.getSaleHistoryPaginated(loginDetails.getFofoId(), searchType, searchValue, startTimeString, endTimeString, offset, limit);
363
		model.addAllAttributes(map);
364
 
22291 ashik.ali 365
		return "sale-history-paginated";
366
	}
367
 
21612 ashik.ali 368
}