Subversion Repositories SmartDukaan

Rev

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

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