Subversion Repositories SmartDukaan

Rev

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