Subversion Repositories SmartDukaan

Rev

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