Subversion Repositories SmartDukaan

Rev

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