Subversion Repositories SmartDukaan

Rev

Rev 33092 | Rev 33172 | 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
 
26817 amit.gupta 3
import com.google.gson.Gson;
23203 ashik.ali 4
import com.spice.profitmandi.common.enumuration.SearchType;
21612 ashik.ali 5
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
30322 amit.gupta 6
import com.spice.profitmandi.common.model.*;
28339 tejbeer 7
import com.spice.profitmandi.common.solr.SolrService;
21689 ashik.ali 8
import com.spice.profitmandi.common.util.PdfUtils;
23638 amit.gupta 9
import com.spice.profitmandi.common.util.StringUtils;
22244 ashik.ali 10
import com.spice.profitmandi.common.web.util.ResponseSender;
23638 amit.gupta 11
import com.spice.profitmandi.dao.entity.catalog.Item;
27861 tejbeer 12
import com.spice.profitmandi.dao.entity.catalog.TagListing;
22217 ashik.ali 13
import com.spice.profitmandi.dao.entity.dtr.InsurancePolicy;
23343 ashik.ali 14
import com.spice.profitmandi.dao.entity.dtr.InsuranceProvider;
23548 ashik.ali 15
import com.spice.profitmandi.dao.entity.dtr.PaymentOptionTransaction;
30322 amit.gupta 16
import com.spice.profitmandi.dao.entity.fofo.*;
23298 ashik.ali 17
import com.spice.profitmandi.dao.entity.user.Address;
23548 ashik.ali 18
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
27046 tejbeer 19
import com.spice.profitmandi.dao.enumuration.transaction.OrderStatus;
23638 amit.gupta 20
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
27861 tejbeer 21
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
30322 amit.gupta 22
import com.spice.profitmandi.dao.repository.dtr.*;
23
import com.spice.profitmandi.dao.repository.fofo.*;
24440 amit.gupta 24
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
30162 manish 25
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
23298 ashik.ali 26
import com.spice.profitmandi.dao.repository.user.AddressRepository;
28377 tejbeer 27
import com.spice.profitmandi.service.EmailService;
32251 amit.gupta 28
import com.spice.profitmandi.service.NotificationService;
23798 amit.gupta 29
import com.spice.profitmandi.service.authentication.RoleManager;
25726 amit.gupta 30
import com.spice.profitmandi.service.integrations.zest.InsuranceService;
24440 amit.gupta 31
import com.spice.profitmandi.service.integrations.zest.MobileInsurancePlan;
23366 ashik.ali 32
import com.spice.profitmandi.service.order.OrderService;
22069 ashik.ali 33
import com.spice.profitmandi.service.pricing.PricingService;
26647 tejbeer 34
import com.spice.profitmandi.service.user.RetailerService;
32405 jai.hind 35
import com.spice.profitmandi.service.whatsapp.WhatsappMessageService;
32855 amit.gupta 36
import com.spice.profitmandi.service.whatsapp.WhatsappMessageType;
22139 amit.gupta 37
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 38
import com.spice.profitmandi.web.util.CookiesProcessor;
24105 govind 39
import com.spice.profitmandi.web.util.MVCResponseSender;
30148 amit.gupta 40
import org.apache.logging.log4j.LogManager;
41
import org.apache.logging.log4j.Logger;
32405 jai.hind 42
import org.json.JSONArray;
30148 amit.gupta 43
import org.json.JSONObject;
44
import org.springframework.beans.factory.annotation.Autowired;
45
import org.springframework.core.io.InputStreamResource;
46
import org.springframework.http.HttpHeaders;
47
import org.springframework.http.HttpStatus;
48
import org.springframework.http.MediaType;
49
import org.springframework.http.ResponseEntity;
50
import org.springframework.stereotype.Controller;
51
import org.springframework.transaction.annotation.Transactional;
52
import org.springframework.ui.Model;
53
import org.springframework.web.bind.annotation.*;
21612 ashik.ali 54
 
30148 amit.gupta 55
import javax.servlet.http.HttpServletRequest;
56
import javax.servlet.http.HttpServletResponse;
32409 amit.gupta 57
import java.io.ByteArrayInputStream;
58
import java.io.ByteArrayOutputStream;
59
import java.io.InputStream;
32271 amit.gupta 60
import java.nio.charset.StandardCharsets;
30148 amit.gupta 61
import java.time.LocalDateTime;
62
import java.time.format.DateTimeFormatter;
63
import java.time.temporal.ChronoUnit;
64
import java.util.*;
65
import java.util.stream.Collectors;
66
 
21612 ashik.ali 67
@Controller
23973 govind 68
@Transactional(rollbackFor = Throwable.class)
21612 ashik.ali 69
public class OrderController {
70
 
33102 tejus.loha 71
	private static final Logger LOGGER = LogManager.getLogger(OrderController.class);
21985 kshitij.so 72
 
33102 tejus.loha 73
	private static final List<String> offlineOrders = Arrays.asList("EMIOD", "POD");
74
	private static final List<String> allowedDoaImeis = Arrays.asList("863903054378477");
75
	@Autowired
76
	NotificationService notificationService;
77
	@Autowired
78
	private CustomerRepository customerRepository;
79
	private boolean accessoriesDeals = true;
80
	@Autowired
81
	private RoleManager roleManager;
82
	@Autowired
83
	private Gson gson;
84
	@Autowired
85
	private CustomerReturnItemRepository customerReturnItemRepository;
86
	@Autowired
87
	private FofoOrderItemRepository fofoOrderItemRepository;
88
	@Autowired
89
	private PaymentOptionRepository paymentOptionRepository;
90
	@Autowired
91
	private StateRepository stateRepository;
92
	@Autowired
93
	private ItemRepository itemRepository;
94
	@Autowired
95
	private MVCResponseSender mvcResponseSender;
96
	@Autowired
97
	private InsuranceService insuranceService;
98
	@Autowired
99
	private FofoOrderRepository fofoOrderRepository;
100
	@Autowired
101
	private CustomerAddressRepository customerAddressRepository;
102
	@Autowired
103
	private InsurancePolicyRepository insurancePolicyRepository;
104
	@Autowired
105
	private InsuranceProviderRepository insuranceProviderRepository;
106
	@Autowired
107
	private CookiesProcessor cookiesProcessor;
108
	@Autowired
109
	private PricingService pricingService;
110
	@Autowired
111
	private OrderService orderService;
112
	@Autowired
113
	private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
114
	@Autowired
115
	private AddressRepository addressRepository;
116
	@Autowired
117
	private PaymentOptionTransactionRepository paymentOptionTransactionRepository;
118
	@Autowired
119
	private FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;
120
	@Autowired
121
	private ResponseSender<?> responseSender;
122
	@Autowired
123
	private PendingOrderRepository pendingOrderRepository;
124
	@Autowired
125
	private OrderRepository orderRepository;
126
	@Autowired
127
	private PendingOrderItemRepository pendingOrderItemRepository;
128
	@Autowired
129
	private FofoStoreRepository fofoStoreRepository;
130
	@Autowired
131
	private RetailerService retailerService;
132
	@Autowired
133
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
134
	@Autowired
135
	private TagListingRepository tagListingRepository;
136
	@Autowired
137
	private PendingOrderService pendingOrderService;
138
	@Autowired
139
	private EmailService emailService;
140
	@Autowired
141
	private SolrService commonSolrService;
142
	@Autowired
143
	private MouRepository mouRepository;
28339 tejbeer 144
 
33102 tejus.loha 145
	@Autowired
146
	private WhatsappMessageService whatsappMessageService;
32405 jai.hind 147
 
33102 tejus.loha 148
	@RequestMapping(value = "/order")
149
	public String orderIndex(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
150
			throws ProfitMandiBusinessException {
151
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23973 govind 152
 
33102 tejus.loha 153
		int addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(loginDetails.getFofoId());
154
		Address address = addressRepository.selectById(addressId);
21985 kshitij.so 155
 
33102 tejus.loha 156
		List<CartFofo> cartItems = orderService.cartCheckout(cartData);
157
		Set<Integer> itemIds = new HashSet<>();
158
		List<Integer> poIds = new ArrayList<>();
159
		List<Integer> poItemIds = new ArrayList<>();
160
		for (CartFofo cartFofo : cartItems) {
161
			itemIds.add(cartFofo.getItemId());
162
			if (cartFofo.getPoId() != 0) {
163
				poIds.add(cartFofo.getPoId());
164
				poItemIds.add(cartFofo.getPoItemId());
165
			}
166
		}
23973 govind 167
 
33102 tejus.loha 168
		PendingOrder po = null;
169
		Customer customer = null;
170
		PendingOrderItem poi = null;
171
		Map<Integer, PriceModel> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds,
172
				loginDetails.getFofoId());
173
		List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository
174
				.selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());
27046 tejbeer 175
 
33102 tejus.loha 176
		if (!poIds.isEmpty()) {
177
			po = pendingOrderRepository.selectById(poIds.get(0));
178
			customer = customerRepository.selectById(po.getCustomerId());
179
			if (!offlineOrders.contains(po.getPayMethod())) {
180
				paymentOptionIds.add(23);
181
			}
182
		}
23973 govind 183
 
33102 tejus.loha 184
		if (!poItemIds.isEmpty()) {
185
			poi = pendingOrderItemRepository.selectById(poItemIds.get(0));
186
		}
21985 kshitij.so 187
 
33102 tejus.loha 188
		// List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new
189
		// HashSet<>(paymentOptionIds));
29642 amit.gupta 190
 
33102 tejus.loha 191
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectActiveOption();
24844 amit.gupta 192
 
33102 tejus.loha 193
		LOGGER.info("pendingOrder" + po);
194
		LOGGER.info("pendingOrderItem" + poi);
23973 govind 195
 
33102 tejus.loha 196
		LOGGER.info("mopPriceMap {}", mopPriceMap);
197
		model.addAttribute("stateNames",
198
				stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
199
		model.addAttribute("retailerStateName", address.getState());
200
		model.addAttribute("pendingPOCustomer", gson.toJson(customer));
201
		model.addAttribute("pendingPO", gson.toJson(po));
21985 kshitij.so 202
 
33102 tejus.loha 203
		model.addAttribute("cartItems", cartItems);
204
		model.addAttribute("pendingOrder", po);
205
		model.addAttribute("pendingOrderItem", poi);
24844 amit.gupta 206
 
33102 tejus.loha 207
		model.addAttribute("mopPriceMap", mopPriceMap);
208
		model.addAttribute("paymentOptions", paymentOptions);
209
		model.addAttribute("accessoriesDeals", accessoriesDeals);
210
		return "order-index";
211
	}
24105 govind 212
 
33102 tejus.loha 213
	@RequestMapping(value = "/checkplans", method = RequestMethod.GET)
214
	public String getInsurancePrices(HttpServletRequest request, @RequestParam float price, Model model,
215
									 @RequestParam int itemId) throws ProfitMandiBusinessException {
216
		LOGGER.info("Request received at url : {}", request.getRequestURI());
21985 kshitij.so 217
 
33102 tejus.loha 218
		try {
219
			String response = mvcResponseSender.createResponseString(this.getPlans(price, itemId));
220
			model.addAttribute("response1", response);
221
		} catch (Exception e) {
222
			// TODO Auto-generated catch block
223
			LOGGER.info(e.getMessage(), e);
224
			throw new ProfitMandiBusinessException("Plans", "Plans API", "Error formatting insurance plans");
225
		}
23973 govind 226
 
33102 tejus.loha 227
		return "response";
228
	}
23973 govind 229
 
33102 tejus.loha 230
	@RequestMapping(value = "/get-order", method = RequestMethod.GET)
231
	public String getOrder(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId,
232
						   Model model) throws ProfitMandiBusinessException {
233
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
234
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
235
		List<FofoOrderItem> fofoLineItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
236
		CustomerAddress customerAddress = null;
237
		if (fofoOrder.getCustomerAddressId() != 0) {
238
			customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
239
		}
32627 ranu 240
 
33102 tejus.loha 241
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
242
		if (customerAddress != null) {
243
			customerAddress.setPhoneNumber(customer.getMobileNumber());
244
		}
245
		LOGGER.info("Added to get invoice - {}, {}", customer, 123);
246
		List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
247
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
248
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
249
				.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
250
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
251
				.selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
252
		this.addInsuranceProvider(insurancePolicies);
21985 kshitij.so 253
 
33102 tejus.loha 254
		model.addAttribute("fofoOrder", fofoOrder);
255
		model.addAttribute("fofoLineItems", fofoLineItems);
256
		if (customerAddress != null) {
257
			model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
258
		} else {
259
			model.addAttribute("customerBillingAddress", "");
32637 amit.gupta 260
 
33102 tejus.loha 261
		}
262
		model.addAttribute("customerBillingAddressObj", customerAddress);
263
		model.addAttribute("customerDetailsObj", customer);
264
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
265
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
266
		model.addAttribute("insurancePolicies", insurancePolicies);
267
		return "order-details";
268
	}
23973 govind 269
 
33102 tejus.loha 270
	private Map<Integer, InsuranceProvider> toInsuranceProviderIdInsuranceProvider(
271
			List<InsuranceProvider> insuranceProviders) {
272
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = new HashMap<>();
273
		for (InsuranceProvider insuranceProvider : insuranceProviders) {
274
			insuranceProviderIdInsuranceProviderMap.put(insuranceProvider.getId(), insuranceProvider);
275
		}
276
		return insuranceProviderIdInsuranceProviderMap;
277
	}
23973 govind 278
 
33102 tejus.loha 279
	private void addInsuranceProvider(List<InsurancePolicy> insurancePolicies) {
280
		if (insurancePolicies.isEmpty()) {
281
			return;
282
		}
283
		Set<Integer> insuranceProviderIds = new HashSet<>();
284
		for (InsurancePolicy insurancePolicy : insurancePolicies) {
285
			insuranceProviderIds.add(insurancePolicy.getProviderId());
286
		}
287
		LOGGER.info("insuranceProviderIds {}", insuranceProviderIds);
288
		List<InsuranceProvider> insuranceProviders = insuranceProviderRepository.selectByIds(insuranceProviderIds);
289
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = this
290
				.toInsuranceProviderIdInsuranceProvider(insuranceProviders);
291
		for (InsurancePolicy insurancePolicy : insurancePolicies) {
292
			insurancePolicy
293
					.setInsuranceProvider(insuranceProviderIdInsuranceProviderMap.get(insurancePolicy.getProviderId()));
294
		}
295
	}
23973 govind 296
 
33102 tejus.loha 297
	@RequestMapping(value = "/saleDetails", method = RequestMethod.GET)
298
	public String getSaleDetails(HttpServletRequest request,
299
								 @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws Exception {
300
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
301
		boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
302
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
303
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
304
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
305
		List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
306
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
23973 govind 307
 
33102 tejus.loha 308
		// Added Migration info as we lost it.
309
		if (paymentOptionTransactions == null || paymentOptionTransactions.size() == 0) {
310
			PaymentOptionTransaction pot = new PaymentOptionTransaction();
311
			pot.setAmount(fofoOrder.getTotalAmount());
312
			pot.setCreateTimestamp(fofoOrder.getCreateTimestamp());
313
			// Mark it paid through cash
314
			pot.setPaymentOptionId(1);
315
			pot.setReferenceType(PaymentOptionReferenceType.ORDER);
316
			paymentOptionTransactionRepository.persist(pot);
317
			paymentOptionTransactions.add(pot);
318
			LOGGER.info("Added to get invoice");
319
		}
320
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
321
				.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
322
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
323
				.selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
324
		this.addInsuranceProvider(insurancePolicies);
325
		Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
326
			try {
327
				return itemRepository.selectById(x.getItemId());
328
			} catch (ProfitMandiBusinessException e) {
329
				// TODO Auto-generated catch block
330
				return null;
331
			}
332
		}));
333
		Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
334
				.collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
23973 govind 335
 
33102 tejus.loha 336
		Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
337
				.collect(Collectors.toMap(foi -> foi.getId(),
338
						foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
23973 govind 339
 
33102 tejus.loha 340
		Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
23973 govind 341
 
33102 tejus.loha 342
		for (FofoOrderItem foi : fofoOrderItems) {
343
			for (FofoLineItem fli : foi.getFofoLineItems()) {
344
				inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
345
			}
346
			List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
347
					.selectAllByOrderItemId(foi.getId());
348
			this.markDoa(fofoOrder, foi, isAdmin);
349
			for (CustomerReturnItem customerReturnItem : customerReturnItems) {
350
				inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
351
						inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
352
			}
353
		}
23973 govind 354
 
33102 tejus.loha 355
		LOGGER.info("fofoOrderItemIdLineItemMap {}", fofoOrderItemIdLineItemMap);
356
		model.addAttribute("fofoOrder", fofoOrder);
357
		model.addAttribute("itemsMap", itemsMap);
358
		model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
359
		model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
360
				StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
361
		model.addAttribute("fofoOrderItemIdLineItemMap", fofoOrderItemIdLineItemMap);
30426 tejbeer 362
 
33102 tejus.loha 363
		model.addAttribute("fofoOrderItems", fofoOrderItems);
364
		model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
365
		if (customerAddress != null) {
32637 amit.gupta 366
 
33102 tejus.loha 367
			model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
368
		} else {
369
			model.addAttribute("customerBillingAddress", "");
32637 amit.gupta 370
 
33102 tejus.loha 371
		}
372
		model.addAttribute("customerBillingAddressObj", customerAddress);
373
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
374
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
375
		model.addAttribute("insurancePolicies", insurancePolicies);
376
		model.addAttribute("markDefective", this.markDefective(fofoOrder));
377
		return "sale-details";
378
	}
30426 tejbeer 379
 
33102 tejus.loha 380
	private void markDoa(FofoOrder fofoOrder, FofoOrderItem foi, boolean isAdmin) {
381
		if (isAdmin) {
382
			foi.setDoa(true);
383
			return;
384
		}
385
		boolean isImei = foi.getFofoLineItems().stream()
386
				.anyMatch(x -> org.apache.commons.lang3.StringUtils.isNotEmpty(x.getSerialNumber())
387
						&& allowedDoaImeis.contains(x.getSerialNumber()));
388
		LocalDateTime buyDate = fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS);
389
		LocalDateTime curDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
390
		if (buyDate.isAfter(curDate.minusDays(45)) || isImei) {
391
			foi.setDoa(true);
392
		} else
393
			foi.setDoa(
394
					foi.getBrand().equals("Nokia") && foi.getCost() < 4990 && buyDate.isAfter(curDate.minusYears(1)));
395
	}
26647 tejbeer 396
 
33102 tejus.loha 397
	private boolean markDefective(FofoOrder fofoOrder) {
398
		return fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS).plusDays(180)
399
				.isAfter(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
26647 tejbeer 400
 
33102 tejus.loha 401
	}
26647 tejbeer 402
 
33102 tejus.loha 403
	@RequestMapping(value = "/getSearchOrder")
404
	public String getSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
405
		return "search-order";
406
	}
26647 tejbeer 407
 
33102 tejus.loha 408
	@RequestMapping(value = "/getInvoiceSearchOrder")
409
	public String getInvoiceSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
410
		return "invoices-cancel";
411
	}
27861 tejbeer 412
 
33102 tejus.loha 413
	@RequestMapping(value = "/customerDetails", method = RequestMethod.PUT)
414
	public String updateCustomerDetails(HttpServletRequest request, @RequestBody CustomCustomer customCustomer,
415
										@RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
416
			throws Exception {
28339 tejbeer 417
 
33102 tejus.loha 418
		orderService.updateCustomerDetails(customCustomer, invoiceNumber);
419
		return this.getSearchOrderDetails(request, invoiceNumber, model);
420
	}
28339 tejbeer 421
 
33102 tejus.loha 422
	@RequestMapping(value = "/searchOrderDetails", method = RequestMethod.GET)
423
	public String getSearchOrderDetails(HttpServletRequest request,
424
										@RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
425
			throws Exception {
28339 tejbeer 426
 
33102 tejus.loha 427
		FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
428
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
429
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
430
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
431
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = paymentOptionRepository.selectActiveOption().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
432
		List<Integer> fofoPartnerPaymentOptions = new ArrayList<>(paymentOptionIdPaymentOptionMap.keySet());
433
		Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
434
			try {
435
				return itemRepository.selectById(x.getItemId());
436
			} catch (ProfitMandiBusinessException e) {
437
				// TODO Auto-generated catch block
438
				return null;
439
			}
440
		}));
441
		LOGGER.info("fofoPartnerPaymentOptions" + fofoPartnerPaymentOptions);
442
		List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
443
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
444
		LOGGER.info("paymentOptionTransactions" + paymentOptionTransactions);
28420 tejbeer 445
 
33102 tejus.loha 446
		Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
447
				.paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
448
		LOGGER.info("paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
449
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
450
				.selectByRetailerIdInvoiceNumber(fofoOrder.getInvoiceNumber());
451
		this.addInsuranceProvider(insurancePolicies);
452
		model.addAttribute("fofoOrder", fofoOrder);
453
		for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
454
			fofoOrderItem.setDoa(true);
455
		}
23973 govind 456
 
33102 tejus.loha 457
		Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
458
				.collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
23973 govind 459
 
33102 tejus.loha 460
		Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
461
				.collect(Collectors.toMap(foi -> foi.getId(),
462
						foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
28339 tejbeer 463
 
33102 tejus.loha 464
		Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
28339 tejbeer 465
 
33102 tejus.loha 466
		for (FofoOrderItem foi : fofoOrderItems) {
467
			for (FofoLineItem fli : foi.getFofoLineItems()) {
468
				inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
469
			}
470
			List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
471
					.selectAllByOrderItemId(foi.getId());
472
			for (CustomerReturnItem customerReturnItem : customerReturnItems) {
473
				inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
474
						inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
475
			}
476
		}
477
		model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
478
				StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
479
		model.addAttribute("fofoOrderItems", fofoOrderItems);
480
		model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
481
		model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
482
		model.addAttribute("itemsMap", itemsMap);
483
		model.addAttribute("markDefective", true);
484
		model.addAttribute("customer", customer);
485
		model.addAttribute("customerAddress", customerAddress);
486
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
487
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
488
		model.addAttribute("paymentOptionIdPaymentOptionTransactionMap", paymentOptionIdPaymentOptionTransactionMap);
489
		model.addAttribute("insurancePolicies", insurancePolicies);
490
		model.addAttribute("fofoPartnerPaymentOptions", fofoPartnerPaymentOptions);
491
		model.addAttribute("totalNumberOfPaymentOptionId", fofoPartnerPaymentOptions.size());
492
		model.addAttribute("stateNames",
493
				stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
494
		return "search-order-details";
495
	}
28339 tejbeer 496
 
33102 tejus.loha 497
	private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap(
498
			List<PaymentOptionTransaction> paymentOptionTransactions) {
499
		Set<Integer> paymentOptionIds = new HashSet<>();
500
		for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
501
			paymentOptionIds.add(paymentOptionTransaction.getPaymentOptionId());
502
		}
503
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(paymentOptionIds);
504
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
505
		for (PaymentOption paymentOption : paymentOptions) {
506
			paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
507
		}
508
		return paymentOptionIdPaymentOptionMap;
509
	}
28339 tejbeer 510
 
33102 tejus.loha 511
	private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMapUsingPaymentOptions(
512
			List<Integer> fofoPartnerPaymentOptions) {
513
		List<PaymentOption> paymentOptions = paymentOptionRepository
514
				.selectByIds(new HashSet<>(fofoPartnerPaymentOptions));
515
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
516
		for (PaymentOption paymentOption : paymentOptions) {
517
			paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
518
		}
519
		return paymentOptionIdPaymentOptionMap;
520
	}
28339 tejbeer 521
 
33102 tejus.loha 522
	private Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap(
523
			List<PaymentOptionTransaction> paymentOptionTransactions) {
524
		Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = new HashMap<>();
525
		for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
526
			paymentOptionIdPaymentOptionTransactionMap.put(paymentOptionTransaction.getPaymentOptionId(),
527
					paymentOptionTransaction);
528
		}
529
		return paymentOptionIdPaymentOptionTransactionMap;
530
	}
31375 tejbeer 531
 
33102 tejus.loha 532
	@RequestMapping(value = "/create-order", method = RequestMethod.POST)
533
	public String createOrder(HttpServletRequest request, @RequestBody CreateOrderRequest createOrderRequest,
534
							  Model model) throws ProfitMandiBusinessException {
535
		// throw new ProfitMandiBusinessException("Billing is on hold temporarily",
536
		// "Billing is on hold temporarily", "Billing is on hold temporarily");
537
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), createOrderRequest);
538
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
28339 tejbeer 539
 
33102 tejus.loha 540
		int fofoOrderId = orderService.createOrder(createOrderRequest, fofoDetails.getFofoId(), accessoriesDeals);
28339 tejbeer 541
 
33102 tejus.loha 542
		LOGGER.info("Order has been created successfully...");
543
		try {
544
			this.sendWhatsappInvoice(fofoOrderRepository.selectByOrderId(fofoOrderId));
545
		} catch (Exception e) {
546
			LOGGER.info("Could not send whatsapp message");
547
			e.printStackTrace();
548
		}
549
		return "redirect:/get-order/?orderId=" + fofoOrderId;
550
	}
28339 tejbeer 551
 
33102 tejus.loha 552
	private void sendWhatsappInvoice(FofoOrder fofoOrder) throws Exception {
553
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
554
		CustomRetailer retailer = retailerService.getFofoRetailer(fofoOrder.getFofoId());
555
		String message = String.format("Dear %s,\n" +
556
				"Thank you for your purchase from SmartDukaan store - %s, %s.\n" +
557
				"Your purchase invoice is attached for your reference.\n" +
558
				"\n" +
559
				"Download our app for offers and updates on new products.\n" +
560
				"https://www.smartdukaan.com/b2c\n" +
561
				"\n" +
562
				"Best Regards\n" +
563
				"SmartDukaan", customer.getFirstName(), retailer.getBusinessName(), retailer.getAddress().getCity());
564
		boolean sentMessage = notificationService.isWhatMessageSend(customer.getMobileNumber());
565
		if (sentMessage) {
566
			notificationService.sendWhatsappMediaMessage(message, customer.getMobileNumber(), this.getPublicInvoiceUrl(fofoOrder.getInvoiceNumber()),
567
					this.getFileName(fofoOrder.getInvoiceNumber()), WhatsappMessageType.DOCUMENT);
568
		}
569
	}
23973 govind 570
 
33102 tejus.loha 571
	private String getFileName(String invoiceNumber) {
572
		return "INV-" + invoiceNumber.replace("/", "-") + ".pdf";
573
	}
24844 amit.gupta 574
 
33102 tejus.loha 575
	private String getPublicInvoiceUrl(String invoiceNumber) {
576
		String base64Encoded = Base64.getMimeEncoder().encodeToString(invoiceNumber.getBytes(StandardCharsets.UTF_8));
577
		String publicUrl = "https://partners.smartdukaan.com/wa-invoice-send/" + base64Encoded + ".pdf";
578
		LOGGER.info("Public Whatsapp Url for Invoice Message - {}", publicUrl);
579
		return publicUrl;
580
	}
24844 amit.gupta 581
 
33102 tejus.loha 582
	@RequestMapping(value = "/order/bad_return", method = RequestMethod.POST)
583
	public ResponseEntity<?> badReturn(HttpServletRequest request, @RequestBody FoiBadReturnRequest foiBadReturnRequest,
584
									   Model model) throws ProfitMandiBusinessException {
585
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), foiBadReturnRequest);
586
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
587
		CustomerCreditNote custmoerCreditNote;
588
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
589
			FofoOrderItem foi = fofoOrderItemRepository.selectById(foiBadReturnRequest.getFofoOrderItemId());
590
			FofoOrder fo = fofoOrderRepository.selectByOrderId(foi.getOrderId());
591
			custmoerCreditNote = orderService.badReturn(fo.getFofoId(), foiBadReturnRequest);
592
		} else {
593
			custmoerCreditNote = orderService.badReturn(fofoDetails.getFofoId(), foiBadReturnRequest);
594
		}
595
		return responseSender.ok(custmoerCreditNote.getId());
596
	}
23973 govind 597
 
33102 tejus.loha 598
	@GetMapping(value = "/wa-invoice-send/{invoiceHash}")
599
	public ResponseEntity<?> generateInvoice(@PathVariable String invoiceHash) throws ProfitMandiBusinessException {
600
		String decodedInvoiceNumber = new String(Base64.getMimeDecoder().decode(invoiceHash));
601
		LOGGER.info("Invoice Hash {}", invoiceHash);
32711 amit.gupta 602
 
603
 
33102 tejus.loha 604
		FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(decodedInvoiceNumber);
32271 amit.gupta 605
 
33102 tejus.loha 606
		InvoicePdfModel pdfModel = orderService.getInvoicePdfModel(fofoOrder.getId());
24087 amit.gupta 607
 
33102 tejus.loha 608
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
609
		PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
610
		final HttpHeaders headers = new HttpHeaders();
611
		//headers.setContentDispositionFormData("inline", number + ".pdf");
612
		headers.add(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=" + pdfModel.getInvoiceNumber() + ".pdf");
613
		int contentLength = byteArrayOutputStream.toByteArray().length;
614
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
615
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
616
		return ResponseEntity.ok()
617
				.headers(headers)
618
				.contentLength(contentLength)
619
				.contentType(MediaType.parseMediaType("application/pdf"))
620
				.body(inputStreamResource);
621
	}
23973 govind 622
 
33102 tejus.loha 623
	@RequestMapping(value = "/wa-listen", method = RequestMethod.POST)
624
	public ResponseEntity<?> listenWhatsappStatus(@RequestBody String whatsappJsonResponse) {
625
		LOGGER.info("whatsappJsonResponse {}", whatsappJsonResponse);
626
		//jaihind
627
		//  String jsonString = "[{\"srcAddr\":\"TESTSM\",\"channel\":\"WHATSAPP\",\"externalId\":\"4977024756456780043-180044363908187691\",\"cause\":\"SUCCESS\",\"errorCode\":\"000\",\"destAddr\":\"919813272029\",\"eventType\":\"DELIVERED\",\"eventTs\":1692848106000}]";
628
		JSONArray jsonArray = new JSONArray(whatsappJsonResponse);
629
		for (int i = 0; i < jsonArray.length(); i++) {
32405 jai.hind 630
 
33102 tejus.loha 631
			JSONObject jsonObject = jsonArray.getJSONObject(i);
632
			String externalId = jsonObject.getString("externalId");
633
			String destAddr = jsonObject.getString("destAddr");
634
			String eventType = jsonObject.getString("eventType");
635
			whatsappMessageService.setWhatsappResponse(externalId, destAddr, eventType);
636
		}
637
		//jaihind
638
		return responseSender.ok("Success");
32405 jai.hind 639
 
33102 tejus.loha 640
	}
32409 amit.gupta 641
 
33102 tejus.loha 642
	@RequestMapping(value = "/generateInvoice")
643
	public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
644
											 @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
645
		LOGGER.info("Request received at url {} with params [{}={}] ", request.getRequestURI(),
646
				ProfitMandiConstants.ORDER_ID, orderId);
647
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
648
		InvoicePdfModel pdfModel = null;
649
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
650
			pdfModel = orderService.getInvoicePdfModel(orderId);
651
		} else {
652
			pdfModel = orderService.getInvoicePdfModel(fofoDetails.getFofoId(), orderId);
653
		}
654
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
655
		PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
656
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
657
		final HttpHeaders headers = new HttpHeaders();
658
		headers.setContentType(MediaType.APPLICATION_PDF);
659
		headers.setContentDispositionFormData("inline", "invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
660
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
661
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
662
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
663
		return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
664
	}
23973 govind 665
 
33102 tejus.loha 666
	@RequestMapping(value = "/generateInvoices")
667
	public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
668
											 @RequestParam LocalDateTime startDate, @RequestParam LocalDateTime endDate, @RequestParam int partnerId)
669
			throws ProfitMandiBusinessException {
670
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
671
		List<InvoicePdfModel> pdfModels = new ArrayList<>();
672
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
673
			List<Integer> orderIds = fofoOrderRepository.selectByFofoId(partnerId, startDate, endDate, 0, 0).stream()
674
					.map(x -> x.getId()).collect(Collectors.toList());
675
			for (int orderId : orderIds) {
676
				pdfModels.add(orderService.getInvoicePdfModel(orderId));
677
			}
678
			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
679
			PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
680
			LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
681
			final HttpHeaders headers = new HttpHeaders();
682
			headers.setContentType(MediaType.APPLICATION_PDF);
683
			headers.set("Content-disposition", "inline; filename=invoice-" + partnerId + ".pdf");
684
			headers.setContentLength(byteArrayOutputStream.toByteArray().length);
685
			final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
686
			final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
687
			return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
688
		} else {
689
			throw new ProfitMandiBusinessException("Auth", fofoDetails.getEmailId(), "Unauthorised access");
690
		}
691
	}
23654 amit.gupta 692
 
33102 tejus.loha 693
	@RequestMapping(value = "/saleHistory")
694
	public String saleHistory(HttpServletRequest request,
695
							  @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
696
							  @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
697
							  @RequestParam(required = false) LocalDateTime startTime,
698
							  @RequestParam(required = false) LocalDateTime endTime,
699
							  @RequestParam(name = "offset", defaultValue = "0") int offset,
700
							  @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
701
			throws ProfitMandiBusinessException {
702
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23654 amit.gupta 703
 
33102 tejus.loha 704
		Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
705
				startTime, endTime, offset, limit);
706
		model.addAllAttributes(map);
707
		return "sale-history";
708
	}
23973 govind 709
 
33102 tejus.loha 710
	@RequestMapping(value = "/downloadInvoices")
711
	public ResponseEntity<?> downloadInvoices(HttpServletRequest request,
712
											  @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
713
											  @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
714
											  @RequestParam(required = false) LocalDateTime startTime,
715
											  @RequestParam(required = false) LocalDateTime endTime,
716
											  @RequestParam(name = "offset", defaultValue = "0") int offset,
717
											  @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
718
			throws ProfitMandiBusinessException {
719
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23973 govind 720
 
33102 tejus.loha 721
		Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
722
				startTime, endTime, offset, 100);
723
		List<FofoOrder> fofoOrders = (List<FofoOrder>) map.get("saleHistories");
29707 tejbeer 724
 
33102 tejus.loha 725
		if (fofoOrders.size() == 0) {
726
			throw new ProfitMandiBusinessException("Search criteria", "", "No orders found for criteria");
727
		}
23973 govind 728
 
33102 tejus.loha 729
		final HttpHeaders headers = new HttpHeaders();
730
		headers.setContentType(MediaType.APPLICATION_PDF);
731
		headers.set("Content-disposition", "inline; filename=invoices.pdf");
732
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
733
		List<InvoicePdfModel> pdfModels = new ArrayList<>();
734
		for (FofoOrder fofoOrder : fofoOrders) {
735
			try {
736
				pdfModels.add(orderService.getInvoicePdfModel(fofoOrder.getId()));
737
			} catch (Exception e) {
738
				LOGGER.info("could not create invoice for {}, invoice number {}", fofoOrder.getId(),
739
						fofoOrder.getInvoiceNumber());
740
			}
741
		}
742
		PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
743
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
744
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
745
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
746
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
747
	}
23973 govind 748
 
33102 tejus.loha 749
	@RequestMapping(value = "/credit-note/{creditNoteId}")
750
	public ResponseEntity<?> downloadCreditNote(HttpServletRequest request, @PathVariable int creditNoteId)
751
			throws ProfitMandiBusinessException {
752
		CreditNotePdfModel creditNotePdfModel = orderService.getCreditNotePdfModel(creditNoteId);
753
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
754
		PdfUtils.generateAndWriteCustomerCreditNotes(Arrays.asList(creditNotePdfModel), byteArrayOutputStream);
755
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
756
		final HttpHeaders headers = new HttpHeaders();
757
		headers.setContentType(MediaType.APPLICATION_PDF);
758
		headers.set("Content-disposition",
759
				"inline; filename=invoice-" + creditNotePdfModel.getCreditNoteNumber() + ".pdf");
760
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
761
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
762
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
763
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
764
	}
23973 govind 765
 
33102 tejus.loha 766
	@RequestMapping(value = "/getPaginatedSaleHistory")
767
	public String getSaleHistoryPaginated(HttpServletRequest request,
768
										  @RequestParam(name = "searchValue", defaultValue = "") String searchValue,
769
										  @RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
770
										  @RequestParam(required = false) LocalDateTime startTime,
771
										  @RequestParam(required = false) LocalDateTime endTime,
772
										  @RequestParam(name = "offset", defaultValue = "0") int offset,
773
										  @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
774
			throws ProfitMandiBusinessException {
775
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
776
		Map<String, Object> map = orderService.getSaleHistoryPaginated(loginDetails.getFofoId(), searchType,
777
				searchValue, startTime, endTime, offset, limit);
778
		model.addAllAttributes(map);
779
		return "sale-history-paginated";
780
	}
23973 govind 781
 
33102 tejus.loha 782
	@PutMapping(value = "/updatePaymentTransaction")
783
	public String updateTransactionDetails(HttpServletRequest request, @RequestParam String referenceType,
784
										   @RequestParam int fofoId, @RequestParam int referenceId,
785
										   @RequestBody PartnerOptionsAndItemAmountModel partnerOptionsAndItemAmountModel,
786
										   @RequestParam float totalAmount, Model model) throws Exception {
23973 govind 787
 
33102 tejus.loha 788
		List<PaymentOptionTransactionModel> paymentOptionTransactionModels = partnerOptionsAndItemAmountModel
789
				.getPaymentOptionTransactionModel();
790
		LOGGER.info(paymentOptionTransactionModels);
791
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoId, referenceId);
792
		LOGGER.info("sdssd" + fofoOrder);
793
		fofoOrder.setTotalAmount(totalAmount);
794
		List<FofoItemIdAmountModel> fofoItemIdAmountModel = partnerOptionsAndItemAmountModel.getItemAmountModel();
795
		for (FofoItemIdAmountModel fim : fofoItemIdAmountModel) {
796
			LOGGER.info("fim" + fim.getFofoItemId());
27819 tejbeer 797
 
33102 tejus.loha 798
			LOGGER.info("fimAmount" + fim.getAmount());
799
			Item item = itemRepository.selectById(fim.getItemId());
800
			TagListing tagListing = tagListingRepository.selectByItemId(item.getId());
801
			FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectById(fim.getFofoItemId());
802
			LOGGER.info("category" + item.getCategoryId());
803
			if (item.getCategoryId() == ProfitMandiConstants.MOBILE_CATEGORY_ID) {
804
				if (fofoOrderItem.getMop() <= fim.getAmount()) {
23973 govind 805
 
33102 tejus.loha 806
					if (fim.getAmount() <= tagListing.getMrp()) {
807
						fofoOrderItem.setSellingPrice(fim.getAmount());
808
					} else {
809
						throw new ProfitMandiBusinessException("Amount", fim.getAmount(),
810
								"Sum of amount is not less than  to MRP");
811
					}
23973 govind 812
 
33102 tejus.loha 813
					LOGGER.info("fofoOrderItem2" + fofoOrderItem);
23973 govind 814
 
33102 tejus.loha 815
				} else {
816
					// TODO below mop condition need to added added
817
					fofoOrderItem.setSellingPrice(fim.getAmount());
818
				}
31739 amit.gupta 819
 
33102 tejus.loha 820
			} else {
821
				fofoOrderItem.setSellingPrice(fim.getAmount());
822
				LOGGER.info("fofoOrderItem1" + fofoOrderItem);
24844 amit.gupta 823
 
33102 tejus.loha 824
			}
825
			LOGGER.info("fofoOrderItem" + fofoOrderItem);
24281 amit.gupta 826
 
33102 tejus.loha 827
		}
24281 amit.gupta 828
 
33102 tejus.loha 829
		/*
830
		 * for (PaymentOptionTransactionModel paymentOptionTransactionModel :
831
		 * paymentOptionTransactionModels) { amount = amount +
832
		 * paymentOptionTransactionModel.getAmount(); } LOGGER.info("FofoOrder amount" +
833
		 * fofoOrder.getUnitPrice() + "amount" + amount); if (amount ==
834
		 * fofoOrder.getUnitPrice()) {
835
		 */
836
		if (paymentOptionTransactionModels.size() > 0) {
837
			List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
838
					.selectByReferenceIdAndType(referenceId, PaymentOptionReferenceType.ORDER);
839
			Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
840
					.paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
841
			LOGGER.info(
842
					"paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
843
			for (PaymentOptionTransactionModel paymentOptionTransactionModel : paymentOptionTransactionModels) {
844
				if (paymentOptionIdPaymentOptionTransactionMap
845
						.containsKey(paymentOptionTransactionModel.getPaymentOptionId())) {
24281 amit.gupta 846
 
33102 tejus.loha 847
					PaymentOptionTransaction paymentOptionTransaction = paymentOptionIdPaymentOptionTransactionMap
848
							.get(paymentOptionTransactionModel.getPaymentOptionId());
23973 govind 849
 
33102 tejus.loha 850
					if (paymentOptionTransactionModel.getAmount() == 0) {
851
						paymentOptionTransactionRepository.delete(paymentOptionTransaction);
852
						LOGGER.info("deleted successfully");
853
					} else {
23973 govind 854
 
33102 tejus.loha 855
						paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
856
						paymentOptionTransactionRepository.persist(paymentOptionTransaction);
857
						LOGGER.info("updated successfully");
24105 govind 858
 
33102 tejus.loha 859
					}
860
				} else {
861
					if (paymentOptionTransactionModel.getAmount() > 0) {
862
						PaymentOptionTransaction paymentOptionTransaction = new PaymentOptionTransaction();
863
						paymentOptionTransaction.setReferenceId(referenceId);
864
						paymentOptionTransaction.setReferenceType(PaymentOptionReferenceType.ORDER);
865
						paymentOptionTransaction.setPaymentOptionId(paymentOptionTransactionModel.getPaymentOptionId());
866
						paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
867
						paymentOptionTransaction.setFofoId(fofoId);
868
						paymentOptionTransaction.setCreateTimestamp(fofoOrder.getCreateTimestamp());
869
						paymentOptionTransactionRepository.persist(paymentOptionTransaction);
870
						LOGGER.info("inserted successfully");
871
					}
872
				}
24105 govind 873
 
33102 tejus.loha 874
			}
23973 govind 875
 
33102 tejus.loha 876
			model.addAttribute("response1", mvcResponseSender.createResponseString(true));
877
		}
878
		/*
879
		 * else
880
		 *
881
		 * { throw new ProfitMandiBusinessException("Amount", amount,
882
		 * "Sum of amount is not equal to total amount"); }
883
		 */
28339 tejbeer 884
 
33102 tejus.loha 885
		return "response";
23973 govind 886
 
33102 tejus.loha 887
	}
21985 kshitij.so 888
 
33102 tejus.loha 889
	private Map<String, List<MobileInsurancePlan>> getPlans(float sellingPrice, int itemId)
890
			throws ProfitMandiBusinessException {
891
		try {
892
			Map<String, List<MobileInsurancePlan>> productDurationPlans = insuranceService.getAllPlans(itemId,
893
					sellingPrice);
894
			return productDurationPlans;
895
		} catch (Exception e) {
896
			LOGGER.info(e, e);
897
			throw new ProfitMandiBusinessException("Fetch Insurance Plans", "Insurance",
898
					"Could not fetch insurance Plans");
899
		}
32238 amit.gupta 900
 
33102 tejus.loha 901
	}
32238 amit.gupta 902
 
33102 tejus.loha 903
	@GetMapping("/insuranceDetails")
904
	public String getInsuranceDetails(HttpServletRequest request,
905
									  @RequestParam(name = "offset", defaultValue = "0") int offset,
906
									  @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
907
			throws ProfitMandiBusinessException {
908
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
909
		long size = 0;
910
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
911
				offset, limit);
912
		size = insurancePolicyRepository.selectCountByRetailerId(loginDetails.getFofoId());
913
		Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
914
				.selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
915
				.stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
916
		if (size < limit) {
917
			model.addAttribute("end", offset + size);
918
		} else {
919
			model.addAttribute("end", offset + limit);
920
		}
921
		model.addAttribute("start", offset + 1);
922
		model.addAttribute("size", size);
923
		model.addAttribute("insurancePolicies", insurancePolicies);
924
		model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
925
		return "insurance-details";
926
	}
32238 amit.gupta 927
 
33102 tejus.loha 928
	@GetMapping("/insuranceDetailsPaginated")
929
	public String getInsuranceDetailsPaginated(HttpServletRequest request,
930
											   @RequestParam(name = "offset", defaultValue = "0") int offset,
931
											   @RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
932
			throws ProfitMandiBusinessException {
933
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
934
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
935
				offset, limit);
936
		Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
937
				.selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
938
				.stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
939
		model.addAttribute("insurancePolicies", insurancePolicies);
940
		model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
941
		return "insurance-details-paginated";
942
	}
23973 govind 943
 
33102 tejus.loha 944
	@GetMapping("/getMouForm")
945
	public String getMouForm(HttpServletRequest request, Model model) throws Exception {
946
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
24844 amit.gupta 947
 
33102 tejus.loha 948
		Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
949
		if (mou != null) {
950
			if (mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
951
				model.addAttribute("response1", mvcResponseSender.createResponseString(true));
952
			} else {
953
				model.addAttribute("response1", mvcResponseSender.createResponseString(false));
954
			}
23973 govind 955
 
33102 tejus.loha 956
		} else {
957
			model.addAttribute("response1", mvcResponseSender.createResponseString(false));
23973 govind 958
 
33102 tejus.loha 959
		}
960
		return "response";
25092 amit.gupta 961
 
33102 tejus.loha 962
	}
25092 amit.gupta 963
 
33102 tejus.loha 964
	@GetMapping("/pendingOrders")
965
	public String getPendingOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
966
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
967
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
968
		Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
969
		if (mou == null) {
970
			mou = new Mou();
971
			mou.setFofoId(loginDetails.getFofoId());
972
			mou.setCreateTimestamp(LocalDateTime.now());
973
			mou.setUpdateTimestamp(LocalDateTime.now());
974
			mouRepository.persist(mou);
975
		} else if (!mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
976
			mou.setUpdateTimestamp(LocalDateTime.now());
977
		}
25092 amit.gupta 978
 
33102 tejus.loha 979
		List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.PROCESSING,
980
				loginDetails.getFofoId());
23973 govind 981
 
33102 tejus.loha 982
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, loginDetails.getFofoId());
983
		model.addAttribute("inventoryMap", map.get("inventoryMap"));
984
		model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
27861 tejbeer 985
 
33102 tejus.loha 986
		model.addAttribute("isAdmin", isAdmin);
987
		return "pending_fofo_order";
27861 tejbeer 988
 
33102 tejus.loha 989
	}
27861 tejbeer 990
 
33102 tejus.loha 991
	@GetMapping("/billedOrders")
992
	public String getBilledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
993
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
994
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
27861 tejbeer 995
 
33102 tejus.loha 996
		List<PendingOrderItem> pendingOrderItem;
27861 tejbeer 997
 
33102 tejus.loha 998
		if (isAdmin) {
27861 tejbeer 999
 
33102 tejus.loha 1000
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.BILLED);
27861 tejbeer 1001
 
33102 tejus.loha 1002
		} else {
1003
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.BILLED,
1004
					loginDetails.getFofoId());
1005
		}
24105 govind 1006
 
33102 tejus.loha 1007
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
24105 govind 1008
 
33102 tejus.loha 1009
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1010
		model.addAttribute("isAdmin", isAdmin);
1011
		return "billed_order_item";
1012
	}
24105 govind 1013
 
33102 tejus.loha 1014
	@GetMapping("/settledOrders")
1015
	public String getSettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1016
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1017
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
24105 govind 1018
 
33102 tejus.loha 1019
		List<PendingOrderItem> pendingOrderItem = null;
27861 tejbeer 1020
 
33102 tejus.loha 1021
		if (isAdmin) {
24105 govind 1022
 
33102 tejus.loha 1023
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.SETTLED);
27861 tejbeer 1024
 
33102 tejus.loha 1025
		} else {
1026
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.SETTLED,
1027
					loginDetails.getFofoId());
1028
		}
24105 govind 1029
 
33102 tejus.loha 1030
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
27861 tejbeer 1031
 
33102 tejus.loha 1032
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1033
		model.addAttribute("isAdmin", isAdmin);
1034
		return "settled_order_item";
1035
	}
24440 amit.gupta 1036
 
33102 tejus.loha 1037
	@GetMapping("/unsettledOrders")
1038
	public String getunsettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1039
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1040
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
25726 amit.gupta 1041
 
33102 tejus.loha 1042
		List<PendingOrderItem> pendingOrderItem = null;
24880 govind 1043
 
33102 tejus.loha 1044
		if (isAdmin) {
25092 amit.gupta 1045
 
33102 tejus.loha 1046
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.UNSETTLED);
26647 tejbeer 1047
 
33102 tejus.loha 1048
		} else {
1049
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.UNSETTLED,
1050
					loginDetails.getFofoId());
1051
		}
28420 tejbeer 1052
 
33102 tejus.loha 1053
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
28425 tejbeer 1054
 
33102 tejus.loha 1055
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1056
		model.addAttribute("isAdmin", isAdmin);
1057
		return "unsettled_order_item";
1058
	}
28420 tejbeer 1059
 
33102 tejus.loha 1060
	@GetMapping("/claimedOrders")
1061
	public String getclaimedOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
1062
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1063
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1064
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1065
				.collect(Collectors.toList());
28420 tejbeer 1066
 
33102 tejus.loha 1067
		List<PendingOrderItem> pendingOrderItem = null;
28420 tejbeer 1068
 
33102 tejus.loha 1069
		if (isAdmin) {
26647 tejbeer 1070
 
33102 tejus.loha 1071
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.CLAIMED);
1072
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
28339 tejbeer 1073
 
33102 tejus.loha 1074
			Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1075
					.filter(x -> x != null).collect(Collectors.toList()).stream()
1076
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1077
			model.addAttribute("customRetailersMap", customRetailersMap);
28339 tejbeer 1078
 
33102 tejus.loha 1079
		} else {
1080
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.CLAIMED,
1081
					loginDetails.getFofoId());
1082
		}
27046 tejbeer 1083
 
33102 tejus.loha 1084
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
27046 tejbeer 1085
 
33102 tejus.loha 1086
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1087
		model.addAttribute("isAdmin", isAdmin);
1088
		return "claim_raised_order_item";
1089
	}
28350 tejbeer 1090
 
33102 tejus.loha 1091
	@GetMapping("/getPendingOrderItem")
1092
	public String getPendingOrderItem(HttpServletRequest request, @RequestParam int orderId, Model model)
1093
			throws ProfitMandiBusinessException {
1094
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1095
		Map<Integer, Item> itemMap = new HashMap<>();
1096
		Map<Integer, CurrentInventorySnapshot> inventoryMap = new HashMap<>();
1097
		PendingOrder pendingPO = pendingOrderRepository.selectById(orderId);
1098
		Customer customer = customerRepository.selectById(pendingPO.getCustomerId());
1099
		List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(orderId);
1100
		for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
1101
			Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1102
			CurrentInventorySnapshot cis = currentInventorySnapshotRepository
1103
					.selectByItemAndFofoId(pendingOrderItem.getItemId(), pendingPO.getFofoId());
1104
			itemMap.put(pendingOrderItem.getItemId(), item);
1105
			LOGGER.info("cis" + cis);
1106
			inventoryMap.put(pendingOrderItem.getItemId(), cis);
1107
		}
28358 tejbeer 1108
 
33102 tejus.loha 1109
		LOGGER.info("inventoryMap" + inventoryMap);
1110
		model.addAttribute("pendingOrderItems", pendingOrderItems);
1111
		model.addAttribute("itemMap", itemMap);
1112
		model.addAttribute("inventoryMap", inventoryMap);
1113
		model.addAttribute("pendingPO", gson.toJson(pendingPO));
1114
		model.addAttribute("pendingPOCustomer", gson.toJson(customer));
1115
		model.addAttribute("isAdmin", roleManager.isAdmin(loginDetails.getRoleIds()));
1116
		return "pending-order-item";
1117
	}
28350 tejbeer 1118
 
33102 tejus.loha 1119
	@RequestMapping(value = "/getPendingOrderItemById", method = RequestMethod.GET)
1120
	public String getPendingOrderItemById(HttpServletRequest request, @RequestParam int id, Model model)
1121
			throws Exception {
28339 tejbeer 1122
 
33102 tejus.loha 1123
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1124
		model.addAttribute("pendingOrderItem", pendingOrderItem);
1125
		return "cancel-pending-order";
1126
	}
28339 tejbeer 1127
 
33102 tejus.loha 1128
	@RequestMapping(value = "/getPendingOrderChangePartnerById", method = RequestMethod.GET)
1129
	public String getPendingOrderChangePartnerById(HttpServletRequest request, @RequestParam int id, Model model)
1130
			throws Exception {
28339 tejbeer 1131
 
33102 tejus.loha 1132
		PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
1133
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(true);
1134
		model.addAttribute("customRetailersMap", customRetailersMap);
1135
		model.addAttribute("pendingOrder", pendingOrder);
1136
		return "change-partner-po";
1137
	}
28339 tejbeer 1138
 
33102 tejus.loha 1139
	@RequestMapping(value = "/changePendingOrderPartner", method = RequestMethod.POST)
1140
	public String changePendingOrderPartner(HttpServletRequest request, @RequestParam int id, @RequestParam int fofoId,
1141
											Model model) throws Exception {
27046 tejbeer 1142
 
33102 tejus.loha 1143
		PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
1144
		pendingOrder.setFofoId(fofoId);
1145
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28339 tejbeer 1146
 
33102 tejus.loha 1147
		return "response";
1148
	}
26647 tejbeer 1149
 
33102 tejus.loha 1150
	@RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
1151
	public String cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id, @RequestParam String reason,
1152
										 Model model) throws Exception {
28339 tejbeer 1153
 
33102 tejus.loha 1154
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1155
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
28339 tejbeer 1156
 
33102 tejus.loha 1157
		pendingOrderItem.setStatus(OrderStatus.CANCELLED);
1158
		pendingOrderItem.setStatusDescription(loginDetails.getEmailId());
1159
		pendingOrderItem.setRemark(reason);
1160
		pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
1161
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
28339 tejbeer 1162
 
33102 tejus.loha 1163
		List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
1164
				.map(x -> x.getStatus()).collect(Collectors.toList());
28339 tejbeer 1165
 
33102 tejus.loha 1166
		Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
28339 tejbeer 1167
 
33102 tejus.loha 1168
		List<Integer> catalogIds = new ArrayList<>();
28339 tejbeer 1169
 
33102 tejus.loha 1170
		Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1171
		pendingOrderItem.setItemName(item.getItemDescription());
1172
		catalogIds.add(item.getCatalogItemId());
28339 tejbeer 1173
 
33102 tejus.loha 1174
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1175
		JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1176
		pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1177
		pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1178
		CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
28339 tejbeer 1179
 
33102 tejus.loha 1180
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
28339 tejbeer 1181
 
33102 tejus.loha 1182
		Map<String, Object> emailModel = new HashMap<>();
1183
		emailModel.put("customer", customerAddress);
1184
		emailModel.put("pendingOrder", pendingOrder);
1185
		emailModel.put("date", dateTimeFormatter);
1186
		LOGGER.info("emal" + customer.getEmailId());
1187
		String[] customerEmail = null;
1188
		if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
1189
			customerEmail = new String[]{customer.getEmailId()};
28339 tejbeer 1190
 
33102 tejus.loha 1191
			List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
28339 tejbeer 1192
 
33102 tejus.loha 1193
			emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel,
1194
					customerEmail, null, bccTo.toArray(new String[0]));
28339 tejbeer 1195
 
33102 tejus.loha 1196
		}
28339 tejbeer 1197
 
33102 tejus.loha 1198
		if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1199
				&& !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1200
				&& !status.contains(OrderStatus.CLAIMED)) {
1201
			pendingOrder.setStatus(OrderStatus.CLOSED);
1202
		}
1203
		pendingOrderItemRepository.persist(pendingOrderItem);
28339 tejbeer 1204
 
33102 tejus.loha 1205
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28339 tejbeer 1206
 
33102 tejus.loha 1207
		return "response";
1208
	}
28339 tejbeer 1209
 
33102 tejus.loha 1210
	@RequestMapping(value = "/deliveredPendingOrderItem", method = RequestMethod.POST)
1211
	public String deliveredPendingOrderItem(HttpServletRequest request, @RequestParam int id, Model model)
1212
			throws Exception {
28339 tejbeer 1213
 
33102 tejus.loha 1214
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1215
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1216
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
30426 tejbeer 1217
 
33102 tejus.loha 1218
		if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1219
			pendingOrderItem.setStatus(OrderStatus.UNSETTLED);
1220
			pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
28339 tejbeer 1221
 
33102 tejus.loha 1222
		} else {
1223
			pendingOrderItem.setStatus(OrderStatus.SETTLED);
1224
			pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
28339 tejbeer 1225
 
33102 tejus.loha 1226
		}
28339 tejbeer 1227
 
33102 tejus.loha 1228
		List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
1229
				.map(x -> x.getStatus()).collect(Collectors.toList());
28339 tejbeer 1230
 
33102 tejus.loha 1231
		List<Integer> catalogIds = new ArrayList<>();
26647 tejbeer 1232
 
33102 tejus.loha 1233
		Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1234
		pendingOrderItem.setItemName(item.getItemDescription());
1235
		catalogIds.add(item.getCatalogItemId());
26721 tejbeer 1236
 
33102 tejus.loha 1237
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1238
		JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1239
		pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1240
		pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1241
		CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
27046 tejbeer 1242
 
33102 tejus.loha 1243
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
28352 tejbeer 1244
 
33102 tejus.loha 1245
		Map<String, Object> emailModel = new HashMap<>();
1246
		emailModel.put("customer", customerAddress);
1247
		emailModel.put("pendingOrder", pendingOrder);
1248
		emailModel.put("date", dateTimeFormatter);
1249
		Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1250
		String[] customerEmail = null;
1251
		if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
1252
			customerEmail = new String[]{customer.getEmailId()};
1253
			List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
28437 tejbeer 1254
 
33102 tejus.loha 1255
			emailService.sendMailWithAttachments("Order Delivered with SmartDukaan", "order-delivered.vm", emailModel,
1256
					customerEmail, null, bccTo.toArray(new String[0]));
28437 tejbeer 1257
 
33102 tejus.loha 1258
		}
1259
		if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1260
				&& !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1261
				&& !status.contains(OrderStatus.CLAIMED)) {
1262
			pendingOrder.setStatus(OrderStatus.CLOSED);
1263
		}
1264
		pendingOrderItemRepository.persist(pendingOrderItem);
1265
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28437 tejbeer 1266
 
33102 tejus.loha 1267
		return "response";
1268
	}
28437 tejbeer 1269
 
33102 tejus.loha 1270
	@RequestMapping(value = "/raiseClaimOrderItem", method = RequestMethod.POST)
1271
	public String raiseClaimOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
28437 tejbeer 1272
 
33102 tejus.loha 1273
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1274
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1275
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
28352 tejbeer 1276
 
33102 tejus.loha 1277
		if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1278
			pendingOrderItem.setStatus(OrderStatus.CLAIMED);
1279
			pendingOrderItem.setClaimedTimestamp(LocalDateTime.now());
26721 tejbeer 1280
 
33102 tejus.loha 1281
		}
1282
		pendingOrderItemRepository.persist(pendingOrderItem);
1283
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
26721 tejbeer 1284
 
33102 tejus.loha 1285
		return "response";
1286
	}
26721 tejbeer 1287
 
33102 tejus.loha 1288
	@RequestMapping(value = "/verifyOrderItem", method = RequestMethod.POST)
1289
	public String verifyOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
28352 tejbeer 1290
 
33102 tejus.loha 1291
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1292
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1293
		pendingOrderItem.setVerifiedTimestamp(LocalDateTime.now());
28352 tejbeer 1294
 
33102 tejus.loha 1295
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28352 tejbeer 1296
 
33102 tejus.loha 1297
		return "response";
1298
	}
28352 tejbeer 1299
 
33102 tejus.loha 1300
	@RequestMapping(value = "/cancelOrderByInvoice", method = RequestMethod.POST)
1301
	public String cancelOrder(HttpServletRequest request, @RequestParam List<String> invoiceNumbers, Model model)
1302
			throws Exception {
1303
		orderService.cancelOrder(invoiceNumbers);
1304
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28352 tejbeer 1305
 
33102 tejus.loha 1306
		return "response";
1307
	}
28352 tejbeer 1308
 
33102 tejus.loha 1309
	@RequestMapping(value = "/getOnlineOrder", method = RequestMethod.GET)
1310
	public String cancelOrder(HttpServletRequest request, Model model) throws Exception {
1311
		return "online-order";
1312
	}
28356 tejbeer 1313
 
33102 tejus.loha 1314
	@GetMapping("/getAllOrdersByStatus")
1315
	public String getAllOrdersByStatus(HttpServletRequest request, @RequestParam OrderStatus status,
1316
									   @RequestParam(required = false) LocalDateTime startTime,
1317
									   @RequestParam(required = false) LocalDateTime endTime, Model model) throws ProfitMandiBusinessException {
1318
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1319
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
28352 tejbeer 1320
 
33102 tejus.loha 1321
		LOGGER.info("startTime {}", startTime);
1322
		LOGGER.info("endTime {}", endTime);
28352 tejbeer 1323
 
33102 tejus.loha 1324
		List<PendingOrderItem> pendingOrderItems;
1325
		if (startTime == null) {
1326
			pendingOrderItems = pendingOrderItemRepository.selectOrderItemByStatus(status);
1327
		} else {
1328
			List<OrderStatus> statusList = new ArrayList<>();
1329
			if (status.equals(OrderStatus.DELIVERED)) {
1330
				statusList.add(OrderStatus.SETTLED);
1331
				statusList.add(OrderStatus.UNSETTLED);
1332
			} else {
1333
				statusList.add(status);
1334
			}
1335
			pendingOrderItems = pendingOrderItemRepository.selectByStatusAndCreateTimestamp(statusList,
1336
					startTime.toLocalDate().atStartOfDay(), endTime);
1337
		}
28339 tejbeer 1338
 
33102 tejus.loha 1339
		List<Integer> pendingOrderIds = pendingOrderItems.stream().map(x -> x.getOrderId()).collect(Collectors.toList());
32697 ranu 1340
 
33102 tejus.loha 1341
		List<Integer> fofoIds = pendingOrderRepository.selectByIds(pendingOrderIds)
1342
				.stream().map(x -> x.getFofoId()).distinct().collect(Collectors.toList());
32697 ranu 1343
 
33102 tejus.loha 1344
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
32697 ranu 1345
 
33102 tejus.loha 1346
		Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1347
				.filter(x -> x != null).collect(Collectors.toList()).stream()
1348
				.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1349
		model.addAttribute("customRetailersMap", customRetailersMap);
32697 ranu 1350
 
33102 tejus.loha 1351
		LOGGER.info("customRetailersMap {}", customRetailersMap);
32697 ranu 1352
 
33102 tejus.loha 1353
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItems, 0);
32697 ranu 1354
 
33102 tejus.loha 1355
		model.addAttribute("pendingOrderItems", (List<PendingOrderItem>) map.get("pendingOrderItems"));
1356
		model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
28339 tejbeer 1357
 
33102 tejus.loha 1358
		model.addAttribute("isAdmin", isAdmin);
1359
		return "online-order-item";
1360
	}
28339 tejbeer 1361
 
33092 tejus.loha 1362
 
32409 amit.gupta 1363
}
32405 jai.hind 1364
 
1365
 
1366
 
1367
 
1368