Subversion Repositories SmartDukaan

Rev

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