Subversion Repositories SmartDukaan

Rev

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

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