Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
21612 ashik.ali 1
package com.spice.profitmandi.web.controller;
2
 
26817 amit.gupta 3
import com.google.gson.Gson;
23203 ashik.ali 4
import com.spice.profitmandi.common.enumuration.SearchType;
21612 ashik.ali 5
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
30322 amit.gupta 6
import com.spice.profitmandi.common.model.*;
28339 tejbeer 7
import com.spice.profitmandi.common.solr.SolrService;
30162 manish 8
import com.spice.profitmandi.common.util.FileUtil;
21689 ashik.ali 9
import com.spice.profitmandi.common.util.PdfUtils;
23638 amit.gupta 10
import com.spice.profitmandi.common.util.StringUtils;
22244 ashik.ali 11
import com.spice.profitmandi.common.web.util.ResponseSender;
23638 amit.gupta 12
import com.spice.profitmandi.dao.entity.catalog.Item;
27861 tejbeer 13
import com.spice.profitmandi.dao.entity.catalog.TagListing;
22217 ashik.ali 14
import com.spice.profitmandi.dao.entity.dtr.InsurancePolicy;
23343 ashik.ali 15
import com.spice.profitmandi.dao.entity.dtr.InsuranceProvider;
23548 ashik.ali 16
import com.spice.profitmandi.dao.entity.dtr.PaymentOptionTransaction;
30322 amit.gupta 17
import com.spice.profitmandi.dao.entity.fofo.*;
23298 ashik.ali 18
import com.spice.profitmandi.dao.entity.user.Address;
23548 ashik.ali 19
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
27046 tejbeer 20
import com.spice.profitmandi.dao.enumuration.transaction.OrderStatus;
30322 amit.gupta 21
import com.spice.profitmandi.dao.model.*;
23638 amit.gupta 22
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
27861 tejbeer 23
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
30322 amit.gupta 24
import com.spice.profitmandi.dao.repository.dtr.*;
25
import com.spice.profitmandi.dao.repository.fofo.*;
24440 amit.gupta 26
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
30162 manish 27
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
23298 ashik.ali 28
import com.spice.profitmandi.dao.repository.user.AddressRepository;
28377 tejbeer 29
import com.spice.profitmandi.service.EmailService;
23798 amit.gupta 30
import com.spice.profitmandi.service.authentication.RoleManager;
25726 amit.gupta 31
import com.spice.profitmandi.service.integrations.zest.InsuranceService;
24440 amit.gupta 32
import com.spice.profitmandi.service.integrations.zest.MobileInsurancePlan;
23366 ashik.ali 33
import com.spice.profitmandi.service.order.OrderService;
22069 ashik.ali 34
import com.spice.profitmandi.service.pricing.PricingService;
26647 tejbeer 35
import com.spice.profitmandi.service.user.RetailerService;
22139 amit.gupta 36
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 37
import com.spice.profitmandi.web.util.CookiesProcessor;
24105 govind 38
import com.spice.profitmandi.web.util.MVCResponseSender;
30148 amit.gupta 39
import org.apache.logging.log4j.LogManager;
40
import org.apache.logging.log4j.Logger;
41
import org.json.JSONObject;
42
import org.springframework.beans.factory.annotation.Autowired;
43
import org.springframework.core.io.InputStreamResource;
44
import org.springframework.http.HttpHeaders;
45
import org.springframework.http.HttpStatus;
46
import org.springframework.http.MediaType;
47
import org.springframework.http.ResponseEntity;
48
import org.springframework.stereotype.Controller;
49
import org.springframework.transaction.annotation.Transactional;
50
import org.springframework.ui.Model;
51
import org.springframework.web.bind.annotation.*;
21612 ashik.ali 52
 
30148 amit.gupta 53
import javax.servlet.http.HttpServletRequest;
54
import javax.servlet.http.HttpServletResponse;
55
import java.io.ByteArrayInputStream;
56
import java.io.ByteArrayOutputStream;
57
import java.io.InputStream;
58
import java.time.LocalDate;
59
import java.time.LocalDateTime;
60
import java.time.format.DateTimeFormatter;
61
import java.time.temporal.ChronoUnit;
62
import java.util.*;
63
import java.util.stream.Collectors;
64
 
21612 ashik.ali 65
@Controller
23973 govind 66
@Transactional(rollbackFor = Throwable.class)
21612 ashik.ali 67
public class OrderController {
68
 
23568 govind 69
	private static final Logger LOGGER = LogManager.getLogger(OrderController.class);
21985 kshitij.so 70
 
28339 tejbeer 71
	private static final List<String> offlineOrders = Arrays.asList("EMIOD", "POD");
72
 
21612 ashik.ali 73
	@Autowired
22860 ashik.ali 74
	private CustomerRepository customerRepository;
23973 govind 75
 
23821 amit.gupta 76
	private boolean accessoriesDeals = true;
21985 kshitij.so 77
 
21612 ashik.ali 78
	@Autowired
23786 amit.gupta 79
	private RoleManager roleManager;
23973 govind 80
 
23786 amit.gupta 81
	@Autowired
26817 amit.gupta 82
	private Gson gson;
27046 tejbeer 83
 
26817 amit.gupta 84
	@Autowired
23654 amit.gupta 85
	private CustomerReturnItemRepository customerReturnItemRepository;
23973 govind 86
 
23654 amit.gupta 87
	@Autowired
23638 amit.gupta 88
	private FofoOrderItemRepository fofoOrderItemRepository;
21985 kshitij.so 89
 
29642 amit.gupta 90
	private static final List<String> allowedDoaImeis = Arrays.asList("863903054378477");
91
 
21612 ashik.ali 92
	@Autowired
22860 ashik.ali 93
	private PaymentOptionRepository paymentOptionRepository;
24844 amit.gupta 94
 
24440 amit.gupta 95
	@Autowired
96
	private StateRepository stateRepository;
23973 govind 97
 
23638 amit.gupta 98
	@Autowired
99
	private ItemRepository itemRepository;
21985 kshitij.so 100
 
21680 ashik.ali 101
	@Autowired
24105 govind 102
	private MVCResponseSender mvcResponseSender;
24844 amit.gupta 103
 
24440 amit.gupta 104
	@Autowired
25726 amit.gupta 105
	private InsuranceService insuranceService;
24105 govind 106
 
107
	@Autowired
22860 ashik.ali 108
	private FofoOrderRepository fofoOrderRepository;
21985 kshitij.so 109
 
21680 ashik.ali 110
	@Autowired
22860 ashik.ali 111
	private CustomerAddressRepository customerAddressRepository;
23973 govind 112
 
22217 ashik.ali 113
	@Autowired
22860 ashik.ali 114
	private InsurancePolicyRepository insurancePolicyRepository;
23973 govind 115
 
23343 ashik.ali 116
	@Autowired
117
	private InsuranceProviderRepository insuranceProviderRepository;
21985 kshitij.so 118
 
21896 ashik.ali 119
	@Autowired
22860 ashik.ali 120
	private CookiesProcessor cookiesProcessor;
23973 govind 121
 
22069 ashik.ali 122
	@Autowired
22860 ashik.ali 123
	private PricingService pricingService;
23973 govind 124
 
22354 ashik.ali 125
	@Autowired
22860 ashik.ali 126
	private OrderService orderService;
23973 govind 127
 
23298 ashik.ali 128
	@Autowired
129
	private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
23973 govind 130
 
22354 ashik.ali 131
	@Autowired
23298 ashik.ali 132
	private AddressRepository addressRepository;
23973 govind 133
 
23298 ashik.ali 134
	@Autowired
30148 amit.gupta 135
	private PaymentOptionTransactionRepository paymentOptionTransactionRepository;
23973 govind 136
 
23366 ashik.ali 137
	@Autowired
138
	private FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;
23973 govind 139
 
23419 ashik.ali 140
	@Autowired
22860 ashik.ali 141
	private ResponseSender<?> responseSender;
23973 govind 142
 
26647 tejbeer 143
	@Autowired
144
	private PendingOrderRepository pendingOrderRepository;
30426 tejbeer 145
 
26647 tejbeer 146
	@Autowired
30162 manish 147
	private OrderRepository orderRepository;
30426 tejbeer 148
 
30162 manish 149
	@Autowired
26647 tejbeer 150
	private PendingOrderItemRepository pendingOrderItemRepository;
151
 
152
	@Autowired
153
	private FofoStoreRepository fofoStoreRepository;
154
 
155
	@Autowired
156
	private RetailerService retailerService;
157
 
158
	@Autowired
159
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
160
 
27861 tejbeer 161
	@Autowired
162
	private TagListingRepository tagListingRepository;
163
 
28339 tejbeer 164
	@Autowired
165
	private PendingOrderService pendingOrderService;
166
 
167
	@Autowired
168
	private EmailService emailService;
169
 
170
	@Autowired
171
	private SolrService commonSolrService;
172
 
28420 tejbeer 173
	@Autowired
174
	private MouRepository mouRepository;
175
 
21985 kshitij.so 176
	@RequestMapping(value = "/order")
23973 govind 177
	public String orderIndex(HttpServletRequest request, @RequestParam(name = "cartData") String cartData, Model model)
178
			throws ProfitMandiBusinessException {
179
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
180
 
23298 ashik.ali 181
		int addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(loginDetails.getFofoId());
182
		Address address = addressRepository.selectById(addressId);
23973 govind 183
 
22860 ashik.ali 184
		List<CartFofo> cartItems = orderService.cartCheckout(cartData);
185
		Set<Integer> itemIds = new HashSet<>();
28339 tejbeer 186
		List<Integer> poIds = new ArrayList<>();
187
		List<Integer> poItemIds = new ArrayList<>();
23973 govind 188
		for (CartFofo cartFofo : cartItems) {
22860 ashik.ali 189
			itemIds.add(cartFofo.getItemId());
28339 tejbeer 190
			if (cartFofo.getPoId() != 0) {
191
				poIds.add(cartFofo.getPoId());
192
				poItemIds.add(cartFofo.getPoItemId());
193
			}
21985 kshitij.so 194
		}
28339 tejbeer 195
 
196
		PendingOrder po = null;
197
		Customer customer = null;
198
		PendingOrderItem poi = null;
23973 govind 199
		Map<Integer, PriceModel> mopPriceMap = pricingService.getPurchasePriceMopPriceNotFound(itemIds,
200
				loginDetails.getFofoId());
201
		List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository
202
				.selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());
28339 tejbeer 203
 
204
		if (!poIds.isEmpty()) {
205
			po = pendingOrderRepository.selectById(poIds.get(0));
206
			customer = customerRepository.selectById(po.getCustomerId());
207
			if (!offlineOrders.contains(po.getPayMethod())) {
208
				paymentOptionIds.add(23);
209
			}
210
		}
211
 
212
		if (!poItemIds.isEmpty()) {
213
			poi = pendingOrderItemRepository.selectById(poItemIds.get(0));
214
		}
215
 
23366 ashik.ali 216
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new HashSet<>(paymentOptionIds));
28339 tejbeer 217
 
218
		LOGGER.info("pendingOrder" + po);
219
		LOGGER.info("pendingOrderItem" + poi);
220
 
22860 ashik.ali 221
		LOGGER.info("mopPriceMap {}", mopPriceMap);
24844 amit.gupta 222
		model.addAttribute("stateNames",
223
				stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
23298 ashik.ali 224
		model.addAttribute("retailerStateName", address.getState());
28339 tejbeer 225
		model.addAttribute("pendingPOCustomer", gson.toJson(customer));
226
		model.addAttribute("pendingPO", gson.toJson(po));
227
 
24440 amit.gupta 228
		model.addAttribute("cartItems", cartItems);
28339 tejbeer 229
		model.addAttribute("pendingOrder", po);
230
		model.addAttribute("pendingOrderItem", poi);
231
 
22860 ashik.ali 232
		model.addAttribute("mopPriceMap", mopPriceMap);
23366 ashik.ali 233
		model.addAttribute("paymentOptions", paymentOptions);
23821 amit.gupta 234
		model.addAttribute("accessoriesDeals", accessoriesDeals);
22860 ashik.ali 235
		return "order-index";
21985 kshitij.so 236
	}
23973 govind 237
 
24440 amit.gupta 238
	@RequestMapping(value = "/checkplans", method = RequestMethod.GET)
25726 amit.gupta 239
	public String getInsurancePrices(HttpServletRequest request, @RequestParam float price, Model model,
240
			@RequestParam int itemId) throws ProfitMandiBusinessException {
22244 ashik.ali 241
		LOGGER.info("Request received at url : {}", request.getRequestURI());
24844 amit.gupta 242
 
24440 amit.gupta 243
		try {
25726 amit.gupta 244
			String response = mvcResponseSender.createResponseString(this.getPlans(price, itemId));
24440 amit.gupta 245
			model.addAttribute("response", response);
246
		} catch (Exception e) {
247
			// TODO Auto-generated catch block
248
			e.printStackTrace();
249
			throw new ProfitMandiBusinessException("Plans", "Plans API", "Error formatting insurance plans");
250
		}
24844 amit.gupta 251
 
24440 amit.gupta 252
		return "response";
22244 ashik.ali 253
	}
23973 govind 254
 
21985 kshitij.so 255
	@RequestMapping(value = "/get-order", method = RequestMethod.GET)
23973 govind 256
	public String getOrder(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId,
257
			Model model) throws ProfitMandiBusinessException {
22927 ashik.ali 258
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
259
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
23638 amit.gupta 260
		List<FofoOrderItem> fofoLineItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
22927 ashik.ali 261
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
23973 govind 262
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
22927 ashik.ali 263
		customerAddress.setPhoneNumber(customer.getMobileNumber());
30148 amit.gupta 264
		List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
23973 govind 265
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
266
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
267
				.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
268
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
269
				.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
23343 ashik.ali 270
		this.addInsuranceProvider(insurancePolicies);
24087 amit.gupta 271
 
22927 ashik.ali 272
		model.addAttribute("fofoOrder", fofoOrder);
273
		model.addAttribute("fofoLineItems", fofoLineItems);
274
		model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
275
		model.addAttribute("customerBillingAddressObj", customerAddress);
23548 ashik.ali 276
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
23366 ashik.ali 277
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
22927 ashik.ali 278
		model.addAttribute("insurancePolicies", insurancePolicies);
279
		return "order-details";
21985 kshitij.so 280
	}
23973 govind 281
 
282
	private Map<Integer, InsuranceProvider> toInsuranceProviderIdInsuranceProvider(
283
			List<InsuranceProvider> insuranceProviders) {
23343 ashik.ali 284
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = new HashMap<>();
23973 govind 285
		for (InsuranceProvider insuranceProvider : insuranceProviders) {
23343 ashik.ali 286
			insuranceProviderIdInsuranceProviderMap.put(insuranceProvider.getId(), insuranceProvider);
287
		}
288
		return insuranceProviderIdInsuranceProviderMap;
289
	}
23973 govind 290
 
291
	private void addInsuranceProvider(List<InsurancePolicy> insurancePolicies) {
292
		if (insurancePolicies.isEmpty()) {
23343 ashik.ali 293
			return;
294
		}
295
		Set<Integer> insuranceProviderIds = new HashSet<>();
23973 govind 296
		for (InsurancePolicy insurancePolicy : insurancePolicies) {
23343 ashik.ali 297
			insuranceProviderIds.add(insurancePolicy.getProviderId());
298
		}
299
		LOGGER.info("insuranceProviderIds {}", insuranceProviderIds);
300
		List<InsuranceProvider> insuranceProviders = insuranceProviderRepository.selectByIds(insuranceProviderIds);
23973 govind 301
		Map<Integer, InsuranceProvider> insuranceProviderIdInsuranceProviderMap = this
302
				.toInsuranceProviderIdInsuranceProvider(insuranceProviders);
303
		for (InsurancePolicy insurancePolicy : insurancePolicies) {
304
			insurancePolicy
305
					.setInsuranceProvider(insuranceProviderIdInsuranceProviderMap.get(insurancePolicy.getProviderId()));
23343 ashik.ali 306
		}
307
	}
23973 govind 308
 
22244 ashik.ali 309
	@RequestMapping(value = "/saleDetails", method = RequestMethod.GET)
23973 govind 310
	public String getSaleDetails(HttpServletRequest request,
311
			@RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId, Model model) throws Exception {
22927 ashik.ali 312
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
25562 amit.gupta 313
		boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
22927 ashik.ali 314
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoDetails.getFofoId(), orderId);
23654 amit.gupta 315
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
22927 ashik.ali 316
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
30148 amit.gupta 317
		List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
23973 govind 318
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
319
 
320
		// Added Migration info as we lost it.
321
		if (paymentOptionTransactions == null || paymentOptionTransactions.size() == 0) {
23952 amit.gupta 322
			PaymentOptionTransaction pot = new PaymentOptionTransaction();
323
			pot.setAmount(fofoOrder.getTotalAmount());
324
			pot.setCreateTimestamp(fofoOrder.getCreateTimestamp());
23973 govind 325
			// Mark it paid through cash
23952 amit.gupta 326
			pot.setPaymentOptionId(1);
327
			pot.setReferenceType(PaymentOptionReferenceType.ORDER);
30148 amit.gupta 328
			paymentOptionTransactionRepository.persist(pot);
23952 amit.gupta 329
			paymentOptionTransactions.add(pot);
330
			LOGGER.info("Added to get invoice");
331
		}
23973 govind 332
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
333
				.paymentOptionIdPaymentOptionMap(paymentOptionTransactions);
334
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
335
				.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
23343 ashik.ali 336
		this.addInsuranceProvider(insurancePolicies);
23973 govind 337
		Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
23638 amit.gupta 338
			try {
339
				return itemRepository.selectById(x.getItemId());
340
			} catch (ProfitMandiBusinessException e) {
341
				// TODO Auto-generated catch block
342
				return null;
343
			}
344
		}));
23973 govind 345
		Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
346
				.collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
23654 amit.gupta 347
 
23973 govind 348
		Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
349
				.collect(Collectors.toMap(foi -> foi.getId(),
350
						foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
23654 amit.gupta 351
 
352
		Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
23973 govind 353
 
354
		for (FofoOrderItem foi : fofoOrderItems) {
355
			for (FofoLineItem fli : foi.getFofoLineItems()) {
23654 amit.gupta 356
				inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
357
			}
23973 govind 358
			List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
359
					.selectAllByOrderItemId(foi.getId());
25562 amit.gupta 360
			this.markDoa(fofoOrder, foi, isAdmin);
23973 govind 361
			for (CustomerReturnItem customerReturnItem : customerReturnItems) {
362
				inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
363
						inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
23654 amit.gupta 364
			}
365
		}
23973 govind 366
 
23654 amit.gupta 367
		LOGGER.info("fofoOrderItemIdLineItemMap {}", fofoOrderItemIdLineItemMap);
22927 ashik.ali 368
		model.addAttribute("fofoOrder", fofoOrder);
23638 amit.gupta 369
		model.addAttribute("itemsMap", itemsMap);
23654 amit.gupta 370
		model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
23973 govind 371
		model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
372
				StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
29707 tejbeer 373
		model.addAttribute("fofoOrderItemIdLineItemMap", fofoOrderItemIdLineItemMap);
374
 
23654 amit.gupta 375
		model.addAttribute("fofoOrderItems", fofoOrderItems);
376
		model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
22927 ashik.ali 377
		model.addAttribute("customerBillingAddress", orderService.getBillingAddress(customerAddress));
378
		model.addAttribute("customerBillingAddressObj", customerAddress);
23548 ashik.ali 379
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
23366 ashik.ali 380
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
22927 ashik.ali 381
		model.addAttribute("insurancePolicies", insurancePolicies);
23638 amit.gupta 382
		model.addAttribute("markDefective", this.markDefective(fofoOrder));
22927 ashik.ali 383
		return "sale-details";
22244 ashik.ali 384
	}
23973 govind 385
 
25562 amit.gupta 386
	private void markDoa(FofoOrder fofoOrder, FofoOrderItem foi, boolean isAdmin) {
25606 tejbeer 387
		if (isAdmin) {
24094 amit.gupta 388
			foi.setDoa(true);
25562 amit.gupta 389
			return;
24094 amit.gupta 390
		}
29707 tejbeer 391
		boolean isImei = foi.getFofoLineItems().stream()
392
				.anyMatch(x -> org.apache.commons.lang3.StringUtils.isNotEmpty(x.getSerialNumber())
393
						&& allowedDoaImeis.contains(x.getSerialNumber()));
24094 amit.gupta 394
		LocalDateTime buyDate = fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS);
395
		LocalDateTime curDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
28263 amit.gupta 396
		if (buyDate.isAfter(curDate.minusDays(45)) || isImei) {
24094 amit.gupta 397
			foi.setDoa(true);
398
		} else
399
			foi.setDoa(
400
					foi.getBrand().equals("Nokia") && foi.getCost() < 4990 && buyDate.isAfter(curDate.minusYears(1)));
23638 amit.gupta 401
	}
23973 govind 402
 
23638 amit.gupta 403
	private boolean markDefective(FofoOrder fofoOrder) {
23973 govind 404
		return fofoOrder.getCreateTimestamp().truncatedTo(ChronoUnit.DAYS).plusDays(180)
405
				.isAfter(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
406
 
23638 amit.gupta 407
	}
23973 govind 408
 
23584 ashik.ali 409
	@RequestMapping(value = "/getSearchOrder")
23973 govind 410
	public String getSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
23584 ashik.ali 411
		return "search-order";
412
	}
23973 govind 413
 
27819 tejbeer 414
	@RequestMapping(value = "/getInvoiceSearchOrder")
415
	public String getInvoiceSearchOrder(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
416
		return "invoices-cancel";
417
	}
418
 
23584 ashik.ali 419
	@RequestMapping(value = "/customerDetails", method = RequestMethod.PUT)
23973 govind 420
	public String updateCustomerDetails(HttpServletRequest request, @RequestBody CustomCustomer customCustomer,
421
			@RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
24281 amit.gupta 422
			throws Exception {
23973 govind 423
 
23584 ashik.ali 424
		orderService.updateCustomerDetails(customCustomer, invoiceNumber);
425
		return this.getSearchOrderDetails(request, invoiceNumber, model);
426
	}
23973 govind 427
 
23584 ashik.ali 428
	@RequestMapping(value = "/searchOrderDetails", method = RequestMethod.GET)
23973 govind 429
	public String getSearchOrderDetails(HttpServletRequest request,
430
			@RequestParam(name = ProfitMandiConstants.INVOICE_NUMBER) String invoiceNumber, Model model)
24281 amit.gupta 431
			throws Exception {
23973 govind 432
 
23584 ashik.ali 433
		FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
24271 amit.gupta 434
		List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
23584 ashik.ali 435
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
436
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
24105 govind 437
		List<Integer> fofoPartnerPaymentOptions = fofoPartnerPaymentOptionRepository
438
				.selectPaymentOptionIdsByFofoId(fofoOrder.getFofoId());
24276 amit.gupta 439
		Map<Integer, Item> itemsMap = fofoOrderItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> {
440
			try {
441
				return itemRepository.selectById(x.getItemId());
442
			} catch (ProfitMandiBusinessException e) {
443
				// TODO Auto-generated catch block
444
				return null;
445
			}
446
		}));
24105 govind 447
		LOGGER.info("fofoPartnerPaymentOptions" + fofoPartnerPaymentOptions);
30148 amit.gupta 448
		List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
23973 govind 449
				.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
24105 govind 450
		LOGGER.info("paymentOptionTransactions" + paymentOptionTransactions);
23973 govind 451
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = this
24105 govind 452
				.paymentOptionIdPaymentOptionMapUsingPaymentOptions(fofoPartnerPaymentOptions);
453
		Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
454
				.paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
455
		LOGGER.info("paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
23973 govind 456
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository
457
				.selectByRetailerIdInvoiceNumber(fofoOrder.getFofoId(), fofoOrder.getInvoiceNumber());
23584 ashik.ali 458
		this.addInsuranceProvider(insurancePolicies);
459
		model.addAttribute("fofoOrder", fofoOrder);
24844 amit.gupta 460
		for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
24271 amit.gupta 461
			fofoOrderItem.setDoa(true);
462
		}
24844 amit.gupta 463
 
24281 amit.gupta 464
		Map<Integer, Set<FofoLineItem>> fofoOrderItemIdLineItemMap = fofoOrderItems.stream()
465
				.collect(Collectors.toMap(FofoOrderItem::getId, FofoOrderItem::getFofoLineItems));
466
 
467
		Map<Integer, List<CustomerReturnItem>> foiIdCustomerReturnInventoryItemsMap = fofoOrderItems.stream()
468
				.collect(Collectors.toMap(foi -> foi.getId(),
469
						foi -> customerReturnItemRepository.selectAllByOrderItemId(foi.getId())));
470
 
471
		Map<Integer, Integer> inventoryItemBilledQtyMap = new HashMap<>();
472
 
473
		for (FofoOrderItem foi : fofoOrderItems) {
474
			for (FofoLineItem fli : foi.getFofoLineItems()) {
475
				inventoryItemBilledQtyMap.put(fli.getInventoryItemId(), fli.getQuantity());
476
			}
477
			List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
478
					.selectAllByOrderItemId(foi.getId());
479
			for (CustomerReturnItem customerReturnItem : customerReturnItems) {
480
				inventoryItemBilledQtyMap.put(customerReturnItem.getInventoryItemId(),
481
						inventoryItemBilledQtyMap.get(customerReturnItem.getInventoryItemId()) - 1);
482
			}
483
		}
484
		model.addAttribute("foiIdCustomerReturnInventoryItemsMap",
485
				StringUtils.toString(foiIdCustomerReturnInventoryItemsMap));
24271 amit.gupta 486
		model.addAttribute("fofoOrderItems", fofoOrderItems);
24281 amit.gupta 487
		model.addAttribute("inventoryItemBilledQtyMap", StringUtils.toString(inventoryItemBilledQtyMap));
488
		model.addAttribute("fofoOrderItemIdLineItemsMap", StringUtils.toString(fofoOrderItemIdLineItemMap));
24276 amit.gupta 489
		model.addAttribute("itemsMap", itemsMap);
24271 amit.gupta 490
		model.addAttribute("markDefective", true);
23584 ashik.ali 491
		model.addAttribute("customer", customer);
492
		model.addAttribute("customerAddress", customerAddress);
493
		model.addAttribute("paymentOptionTransactions", paymentOptionTransactions);
494
		model.addAttribute("paymentOptionIdPaymentOptionMap", paymentOptionIdPaymentOptionMap);
24105 govind 495
		model.addAttribute("paymentOptionIdPaymentOptionTransactionMap", paymentOptionIdPaymentOptionTransactionMap);
23584 ashik.ali 496
		model.addAttribute("insurancePolicies", insurancePolicies);
24105 govind 497
		model.addAttribute("fofoPartnerPaymentOptions", fofoPartnerPaymentOptions);
498
		model.addAttribute("totalNumberOfPaymentOptionId", fofoPartnerPaymentOptions.size());
24844 amit.gupta 499
		model.addAttribute("stateNames",
500
				stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList()));
23584 ashik.ali 501
		return "search-order-details";
502
	}
23973 govind 503
 
504
	private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap(
505
			List<PaymentOptionTransaction> paymentOptionTransactions) {
23366 ashik.ali 506
		Set<Integer> paymentOptionIds = new HashSet<>();
23973 govind 507
		for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
23548 ashik.ali 508
			paymentOptionIds.add(paymentOptionTransaction.getPaymentOptionId());
23366 ashik.ali 509
		}
510
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(paymentOptionIds);
511
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
23973 govind 512
		for (PaymentOption paymentOption : paymentOptions) {
23366 ashik.ali 513
			paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
514
		}
515
		return paymentOptionIdPaymentOptionMap;
516
	}
23973 govind 517
 
24105 govind 518
	private Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMapUsingPaymentOptions(
519
			List<Integer> fofoPartnerPaymentOptions) {
520
		List<PaymentOption> paymentOptions = paymentOptionRepository
521
				.selectByIds(new HashSet<>(fofoPartnerPaymentOptions));
522
		Map<Integer, PaymentOption> paymentOptionIdPaymentOptionMap = new HashMap<>();
523
		for (PaymentOption paymentOption : paymentOptions) {
524
			paymentOptionIdPaymentOptionMap.put(paymentOption.getId(), paymentOption);
525
		}
526
		return paymentOptionIdPaymentOptionMap;
527
	}
528
 
529
	private Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap(
530
			List<PaymentOptionTransaction> paymentOptionTransactions) {
531
		Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = new HashMap<>();
532
		for (PaymentOptionTransaction paymentOptionTransaction : paymentOptionTransactions) {
533
			paymentOptionIdPaymentOptionTransactionMap.put(paymentOptionTransaction.getPaymentOptionId(),
534
					paymentOptionTransaction);
535
		}
536
		return paymentOptionIdPaymentOptionTransactionMap;
537
	}
538
 
21985 kshitij.so 539
	@RequestMapping(value = "/create-order", method = RequestMethod.POST)
23973 govind 540
	public String createOrder(HttpServletRequest request, @RequestBody CreateOrderRequest createOrderRequest,
541
			Model model) throws ProfitMandiBusinessException {
26647 tejbeer 542
		// throw new ProfitMandiBusinessException("Billing is on hold temporarily",
543
		// "Billing is on hold temporarily", "Billing is on hold temporarily");
26531 amit.gupta 544
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), createOrderRequest);
22927 ashik.ali 545
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
23973 govind 546
 
23823 amit.gupta 547
		int fofoOrderId = orderService.createOrder(createOrderRequest, fofoDetails.getFofoId(), accessoriesDeals);
28339 tejbeer 548
 
22280 ashik.ali 549
		LOGGER.info("Order has been created successfully...");
26531 amit.gupta 550
		return "redirect:/get-order/?orderId=" + fofoOrderId;
21612 ashik.ali 551
	}
23973 govind 552
 
23638 amit.gupta 553
	@RequestMapping(value = "/order/bad_return", method = RequestMethod.POST)
23973 govind 554
	public ResponseEntity<?> badReturn(HttpServletRequest request, @RequestBody FoiBadReturnRequest foiBadReturnRequest,
555
			Model model) throws ProfitMandiBusinessException {
23638 amit.gupta 556
		LOGGER.info("request at uri {} body {}", request.getRequestURI(), foiBadReturnRequest);
557
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
24282 amit.gupta 558
		CustomerCreditNote custmoerCreditNote;
24844 amit.gupta 559
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
24282 amit.gupta 560
			FofoOrderItem foi = fofoOrderItemRepository.selectById(foiBadReturnRequest.getFofoOrderItemId());
561
			FofoOrder fo = fofoOrderRepository.selectByOrderId(foi.getOrderId());
562
			custmoerCreditNote = orderService.badReturn(fo.getFofoId(), foiBadReturnRequest);
563
		} else {
564
			custmoerCreditNote = orderService.badReturn(fofoDetails.getFofoId(), foiBadReturnRequest);
565
		}
23654 amit.gupta 566
		return responseSender.ok(custmoerCreditNote.getId());
23638 amit.gupta 567
	}
21985 kshitij.so 568
 
21689 ashik.ali 569
	@RequestMapping(value = "/generateInvoice")
23973 govind 570
	public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
571
			@RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
572
		LOGGER.info("Request received at url {} with params [{}={}] ", request.getRequestURI(),
573
				ProfitMandiConstants.ORDER_ID, orderId);
22139 amit.gupta 574
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30322 amit.gupta 575
		InvoicePdfModel pdfModel = null;
23973 govind 576
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
23594 ashik.ali 577
			pdfModel = orderService.getInvoicePdfModel(orderId);
23973 govind 578
		} else {
23594 ashik.ali 579
			pdfModel = orderService.getInvoicePdfModel(fofoDetails.getFofoId(), orderId);
580
		}
21689 ashik.ali 581
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
24844 amit.gupta 582
		PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
21689 ashik.ali 583
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
23973 govind 584
		final HttpHeaders headers = new HttpHeaders();
585
		headers.setContentType(MediaType.APPLICATION_PDF);
586
		headers.set("Content-disposition", "inline; filename=invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
587
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
588
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
589
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
590
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
21689 ashik.ali 591
	}
23973 govind 592
 
24844 amit.gupta 593
	@RequestMapping(value = "/generateInvoices")
594
	public ResponseEntity<?> generateInvoice(HttpServletRequest request, HttpServletResponse response,
595
			@RequestParam LocalDateTime startDate, @RequestParam LocalDateTime endDate, @RequestParam int partnerId)
596
			throws ProfitMandiBusinessException {
597
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30322 amit.gupta 598
		List<InvoicePdfModel> pdfModels = new ArrayList<>();
24844 amit.gupta 599
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
600
			List<Integer> orderIds = fofoOrderRepository.selectByFofoId(partnerId, startDate, endDate, 0, 0).stream()
601
					.map(x -> x.getId()).collect(Collectors.toList());
602
			for (int orderId : orderIds) {
603
				pdfModels.add(orderService.getInvoicePdfModel(orderId));
604
			}
605
			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
606
			PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
607
			LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
608
			final HttpHeaders headers = new HttpHeaders();
609
			headers.setContentType(MediaType.APPLICATION_PDF);
610
			headers.set("Content-disposition", "inline; filename=invoice-" + partnerId + ".pdf");
611
			headers.setContentLength(byteArrayOutputStream.toByteArray().length);
612
			final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
613
			final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
614
			return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
615
		} else {
616
			throw new ProfitMandiBusinessException("Auth", fofoDetails.getEmailId(), "Unauthorised access");
617
		}
618
	}
619
 
22244 ashik.ali 620
	@RequestMapping(value = "/saleHistory")
23973 govind 621
	public String saleHistory(HttpServletRequest request,
622
			@RequestParam(name = "searchValue", defaultValue = "") String searchValue,
623
			@RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
624
			@RequestParam(required = false) LocalDateTime startTime,
625
			@RequestParam(required = false) LocalDateTime endTime,
626
			@RequestParam(name = "offset", defaultValue = "0") int offset,
627
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
628
			throws ProfitMandiBusinessException {
22927 ashik.ali 629
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23973 govind 630
 
631
		Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
632
				startTime, endTime, offset, limit);
23203 ashik.ali 633
		model.addAllAttributes(map);
22244 ashik.ali 634
		return "sale-history";
635
	}
23973 govind 636
 
25092 amit.gupta 637
	@RequestMapping(value = "/downloadInvoices")
638
	public ResponseEntity<?> downloadInvoices(HttpServletRequest request,
639
			@RequestParam(name = "searchValue", defaultValue = "") String searchValue,
640
			@RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
641
			@RequestParam(required = false) LocalDateTime startTime,
642
			@RequestParam(required = false) LocalDateTime endTime,
643
			@RequestParam(name = "offset", defaultValue = "0") int offset,
644
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
645
			throws ProfitMandiBusinessException {
646
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
647
 
648
		Map<String, Object> map = orderService.getSaleHistory(loginDetails.getFofoId(), searchType, searchValue,
649
				startTime, endTime, offset, 100);
25562 amit.gupta 650
		List<FofoOrder> fofoOrders = (List<FofoOrder>) map.get("saleHistories");
25092 amit.gupta 651
 
25562 amit.gupta 652
		if (fofoOrders.size() == 0) {
25092 amit.gupta 653
			throw new ProfitMandiBusinessException("Search criteria", "", "No orders found for criteria");
654
		}
655
 
25093 amit.gupta 656
		final HttpHeaders headers = new HttpHeaders();
25092 amit.gupta 657
		headers.setContentType(MediaType.APPLICATION_PDF);
658
		headers.set("Content-disposition", "inline; filename=invoices.pdf");
659
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
30322 amit.gupta 660
		List<InvoicePdfModel> pdfModels = new ArrayList<>();
25562 amit.gupta 661
		for (FofoOrder fofoOrder : fofoOrders) {
25092 amit.gupta 662
			try {
663
				pdfModels.add(orderService.getInvoicePdfModel(fofoOrder.getId()));
25606 tejbeer 664
			} catch (Exception e) {
665
				LOGGER.info("could not create invoice for {}, invoice number {}", fofoOrder.getId(),
666
						fofoOrder.getInvoiceNumber());
25092 amit.gupta 667
			}
668
		}
669
		PdfUtils.generateAndWrite(pdfModels, byteArrayOutputStream);
670
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
671
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
672
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
673
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
674
	}
675
 
23973 govind 676
	@RequestMapping(value = "/credit-note/{creditNoteId}")
677
	public ResponseEntity<?> downloadCreditNote(HttpServletRequest request, @PathVariable int creditNoteId)
678
			throws ProfitMandiBusinessException {
23654 amit.gupta 679
		CreditNotePdfModel creditNotePdfModel = orderService.getCreditNotePdfModel(creditNoteId);
680
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
681
		PdfUtils.generateAndWriteCustomerCreditNotes(Arrays.asList(creditNotePdfModel), byteArrayOutputStream);
682
		LOGGER.info("Pdf Stream length {}", byteArrayOutputStream.toByteArray().length);
23973 govind 683
		final HttpHeaders headers = new HttpHeaders();
684
		headers.setContentType(MediaType.APPLICATION_PDF);
685
		headers.set("Content-disposition",
686
				"inline; filename=invoice-" + creditNotePdfModel.getCreditNoteNumber() + ".pdf");
687
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
688
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
689
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
690
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
23654 amit.gupta 691
	}
23973 govind 692
 
22291 ashik.ali 693
	@RequestMapping(value = "/getPaginatedSaleHistory")
23973 govind 694
	public String getSaleHistoryPaginated(HttpServletRequest request,
695
			@RequestParam(name = "searchValue", defaultValue = "") String searchValue,
696
			@RequestParam(name = "searchType", defaultValue = "") SearchType searchType,
697
			@RequestParam(required = false) LocalDateTime startTime,
698
			@RequestParam(required = false) LocalDateTime endTime,
699
			@RequestParam(name = "offset", defaultValue = "0") int offset,
700
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
701
			throws ProfitMandiBusinessException {
22927 ashik.ali 702
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23973 govind 703
		Map<String, Object> map = orderService.getSaleHistoryPaginated(loginDetails.getFofoId(), searchType,
704
				searchValue, startTime, endTime, offset, limit);
23203 ashik.ali 705
		model.addAllAttributes(map);
22291 ashik.ali 706
		return "sale-history-paginated";
707
	}
708
 
24105 govind 709
	@PutMapping(value = "/updatePaymentTransaction")
710
	public String updateTransactionDetails(HttpServletRequest request, @RequestParam String referenceType,
711
			@RequestParam int fofoId, @RequestParam int referenceId,
27861 tejbeer 712
			@RequestBody PartnerOptionsAndItemAmountModel partnerOptionsAndItemAmountModel,
28055 tejbeer 713
			@RequestParam float totalAmount, Model model) throws Exception {
27861 tejbeer 714
 
715
		List<PaymentOptionTransactionModel> paymentOptionTransactionModels = partnerOptionsAndItemAmountModel
716
				.getPaymentOptionTransactionModel();
24105 govind 717
		LOGGER.info(paymentOptionTransactionModels);
27861 tejbeer 718
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoId, referenceId);
719
		LOGGER.info("sdssd" + fofoOrder);
720
		fofoOrder.setTotalAmount(totalAmount);
721
		List<FofoItemIdAmountModel> fofoItemIdAmountModel = partnerOptionsAndItemAmountModel.getItemAmountModel();
722
		for (FofoItemIdAmountModel fim : fofoItemIdAmountModel) {
723
			LOGGER.info("fim" + fim.getFofoItemId());
28190 tejbeer 724
 
28189 tejbeer 725
			LOGGER.info("fimAmount" + fim.getAmount());
27861 tejbeer 726
			Item item = itemRepository.selectById(fim.getItemId());
727
			TagListing tagListing = tagListingRepository.selectByItemId(item.getId());
728
			FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectById(fim.getFofoItemId());
28188 tejbeer 729
			LOGGER.info("category" + item.getCategoryId());
730
			if (item.getCategoryId() == ProfitMandiConstants.MOBILE_CATEGORY_ID) {
28190 tejbeer 731
				if (fofoOrderItem.getMop() <= fim.getAmount()) {
27861 tejbeer 732
 
28131 tejbeer 733
					if (fim.getAmount() <= tagListing.getMrp()) {
27861 tejbeer 734
						fofoOrderItem.setSellingPrice(fim.getAmount());
735
					} else {
736
						throw new ProfitMandiBusinessException("Amount", fim.getAmount(),
737
								"Sum of amount is not less than  to MRP");
738
					}
739
 
740
					LOGGER.info("fofoOrderItem2" + fofoOrderItem);
741
 
28190 tejbeer 742
				} else {
743
					// TODO below mop condition need to added added
744
					fofoOrderItem.setSellingPrice(fim.getAmount());
27861 tejbeer 745
				}
746
 
747
			} else {
748
				fofoOrderItem.setSellingPrice(fim.getAmount());
749
				LOGGER.info("fofoOrderItem1" + fofoOrderItem);
750
 
751
			}
752
			LOGGER.info("fofoOrderItem" + fofoOrderItem);
753
 
24105 govind 754
		}
755
 
27861 tejbeer 756
		/*
757
		 * for (PaymentOptionTransactionModel paymentOptionTransactionModel :
758
		 * paymentOptionTransactionModels) { amount = amount +
759
		 * paymentOptionTransactionModel.getAmount(); } LOGGER.info("FofoOrder amount" +
760
		 * fofoOrder.getTotalAmount() + "amount" + amount); if (amount ==
761
		 * fofoOrder.getTotalAmount()) {
762
		 */
763
		if (paymentOptionTransactionModels.size() > 0) {
30148 amit.gupta 764
			List<PaymentOptionTransaction> paymentOptionTransactions = paymentOptionTransactionRepository
27861 tejbeer 765
					.selectByReferenceIdAndType(referenceId, PaymentOptionReferenceType.ORDER);
766
			Map<Integer, PaymentOptionTransaction> paymentOptionIdPaymentOptionTransactionMap = this
767
					.paymentOptionIdPaymentOptionTransactionMap(paymentOptionTransactions);
768
			LOGGER.info(
769
					"paymentOptionIdPaymentOptionTransactionMap" + paymentOptionIdPaymentOptionTransactionMap.keySet());
770
			for (PaymentOptionTransactionModel paymentOptionTransactionModel : paymentOptionTransactionModels) {
771
				if (paymentOptionIdPaymentOptionTransactionMap
772
						.containsKey(paymentOptionTransactionModel.getPaymentOptionId())) {
24105 govind 773
 
27861 tejbeer 774
					PaymentOptionTransaction paymentOptionTransaction = paymentOptionIdPaymentOptionTransactionMap
775
							.get(paymentOptionTransactionModel.getPaymentOptionId());
24105 govind 776
 
27861 tejbeer 777
					if (paymentOptionTransactionModel.getAmount() == 0) {
30148 amit.gupta 778
						paymentOptionTransactionRepository.delete(paymentOptionTransaction);
27861 tejbeer 779
						LOGGER.info("deleted successfully");
780
					} else {
24105 govind 781
 
27861 tejbeer 782
						paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
30148 amit.gupta 783
						paymentOptionTransactionRepository.persist(paymentOptionTransaction);
27861 tejbeer 784
						LOGGER.info("updated successfully");
785
 
24105 govind 786
					}
27861 tejbeer 787
				} else {
788
					if (paymentOptionTransactionModel.getAmount() > 0) {
789
						PaymentOptionTransaction paymentOptionTransaction = new PaymentOptionTransaction();
790
						paymentOptionTransaction.setReferenceId(referenceId);
791
						paymentOptionTransaction.setReferenceType(PaymentOptionReferenceType.ORDER);
792
						paymentOptionTransaction.setPaymentOptionId(paymentOptionTransactionModel.getPaymentOptionId());
793
						paymentOptionTransaction.setAmount(paymentOptionTransactionModel.getAmount());
794
						paymentOptionTransaction.setFofoId(fofoId);
795
						paymentOptionTransaction.setCreateTimestamp(fofoOrder.getCreateTimestamp());
30148 amit.gupta 796
						paymentOptionTransactionRepository.persist(paymentOptionTransaction);
27861 tejbeer 797
						LOGGER.info("inserted successfully");
798
					}
24105 govind 799
				}
800
 
801
			}
27861 tejbeer 802
 
803
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
24105 govind 804
		}
27861 tejbeer 805
		/*
806
		 * else
807
		 * 
808
		 * { throw new ProfitMandiBusinessException("Amount", amount,
809
		 * "Sum of amount is not equal to total amount"); }
810
		 */
24105 govind 811
 
812
		return "response";
27861 tejbeer 813
 
24105 govind 814
	}
24440 amit.gupta 815
 
25726 amit.gupta 816
	private Map<String, List<MobileInsurancePlan>> getPlans(float sellingPrice, int itemId)
817
			throws ProfitMandiBusinessException {
818
		try {
819
			Map<String, List<MobileInsurancePlan>> productDurationPlans = insuranceService.getAllPlans(itemId,
820
					sellingPrice);
821
			return productDurationPlans;
822
		} catch (Exception e) {
823
			e.printStackTrace();
824
			throw new ProfitMandiBusinessException("Fetch Insurance Plans", "Insurance",
26647 tejbeer 825
					"Could not fetch insurance Plans");
25726 amit.gupta 826
		}
827
 
24440 amit.gupta 828
	}
24880 govind 829
 
830
	@GetMapping("/insuranceDetails")
831
	public String getInsuranceDetails(HttpServletRequest request,
832
			@RequestParam(name = "offset", defaultValue = "0") int offset,
833
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
834
			throws ProfitMandiBusinessException {
835
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
836
		long size = 0;
837
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
838
				offset, limit);
839
		size = insurancePolicyRepository.selectCountByRetailerId(loginDetails.getFofoId());
840
		Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
841
				.selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
842
				.stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
843
		if (size < limit) {
844
			model.addAttribute("end", offset + size);
845
		} else {
846
			model.addAttribute("end", offset + limit);
847
		}
848
		model.addAttribute("start", offset + 1);
849
		model.addAttribute("size", size);
850
		model.addAttribute("insurancePolicies", insurancePolicies);
851
		model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
852
		return "insurance-details";
853
	}
25092 amit.gupta 854
 
24880 govind 855
	@GetMapping("/insuranceDetailsPaginated")
856
	public String getInsuranceDetailsPaginated(HttpServletRequest request,
857
			@RequestParam(name = "offset", defaultValue = "0") int offset,
858
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
859
			throws ProfitMandiBusinessException {
860
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
861
		List<InsurancePolicy> insurancePolicies = insurancePolicyRepository.selectByRetailerId(loginDetails.getFofoId(),
862
				offset, limit);
863
		Map<Integer, String> providerPolicyNameAndIdMap = insuranceProviderRepository
864
				.selectByIds(insurancePolicies.stream().map(x -> x.getProviderId()).collect(Collectors.toSet()))
865
				.stream().collect(Collectors.toMap(InsuranceProvider::getId, InsuranceProvider::getName));
866
		model.addAttribute("insurancePolicies", insurancePolicies);
867
		model.addAttribute("providerPolicyNameAndIdMap", providerPolicyNameAndIdMap);
868
		return "insurance-details-paginated";
869
	}
26647 tejbeer 870
 
28420 tejbeer 871
	@GetMapping("/getMouForm")
872
	public String getMouForm(HttpServletRequest request, Model model) throws Exception {
873
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
874
 
875
		Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
876
		if (mou != null) {
28425 tejbeer 877
			if (mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
878
				model.addAttribute("response", mvcResponseSender.createResponseString(true));
879
			} else {
880
				model.addAttribute("response", mvcResponseSender.createResponseString(false));
881
			}
882
 
28420 tejbeer 883
		} else {
884
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
885
 
886
		}
887
		return "response";
888
 
889
	}
890
 
26647 tejbeer 891
	@GetMapping("/pendingOrders")
26663 tejbeer 892
	public String getPendingOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
26647 tejbeer 893
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
894
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
28420 tejbeer 895
		Mou mou = mouRepository.selectByFofoId(loginDetails.getFofoId());
896
		if (mou == null) {
897
			mou = new Mou();
898
			mou.setFofoId(loginDetails.getFofoId());
899
			mou.setCreateTimestamp(LocalDateTime.now());
28425 tejbeer 900
			mou.setUpdateTimestamp(LocalDateTime.now());
28420 tejbeer 901
			mouRepository.persist(mou);
28425 tejbeer 902
		} else if (!mou.getUpdateTimestamp().getMonth().equals(LocalDateTime.now().getMonth())) {
903
			mou.setUpdateTimestamp(LocalDateTime.now());
28420 tejbeer 904
		}
26647 tejbeer 905
 
28339 tejbeer 906
		List<PendingOrderItem> pendingOrderItem = null;
907
 
28420 tejbeer 908
		pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.PROCESSING,
909
				loginDetails.getFofoId());
28339 tejbeer 910
 
28358 tejbeer 911
		Map<String, Object> map = null;
27046 tejbeer 912
 
28420 tejbeer 913
		map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
914
		model.addAttribute("inventoryMap", map.get("inventoryMap"));
27046 tejbeer 915
 
28350 tejbeer 916
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
917
 
28358 tejbeer 918
		LOGGER.info("partnerInventoryMap" + map.get("partnerInventoryMap"));
28350 tejbeer 919
		model.addAttribute("isAdmin", isAdmin);
28358 tejbeer 920
		return "pending_fofo_order";
921
 
28350 tejbeer 922
	}
923
 
28339 tejbeer 924
	@GetMapping("/billedOrders")
925
	public String getBilledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
926
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
927
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
928
 
929
		List<PendingOrderItem> pendingOrderItem = null;
930
 
931
		if (isAdmin) {
932
 
933
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.BILLED);
934
 
935
		} else {
936
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.BILLED,
937
					loginDetails.getFofoId());
27046 tejbeer 938
		}
939
 
28339 tejbeer 940
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
941
 
942
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
26817 amit.gupta 943
		model.addAttribute("isAdmin", isAdmin);
28339 tejbeer 944
		return "billed_order_item";
26647 tejbeer 945
	}
946
 
28339 tejbeer 947
	@GetMapping("/settledOrders")
948
	public String getSettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
949
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
950
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
951
 
952
		List<PendingOrderItem> pendingOrderItem = null;
953
 
954
		if (isAdmin) {
955
 
956
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.SETTLED);
957
 
958
		} else {
959
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.SETTLED,
960
					loginDetails.getFofoId());
961
		}
962
 
963
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
964
 
965
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
966
		model.addAttribute("isAdmin", isAdmin);
967
		return "settled_order_item";
968
	}
969
 
970
	@GetMapping("/unsettledOrders")
971
	public String getunsettledOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
972
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
973
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
974
 
975
		List<PendingOrderItem> pendingOrderItem = null;
976
 
977
		if (isAdmin) {
978
 
979
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.UNSETTLED);
980
 
981
		} else {
982
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.UNSETTLED,
983
					loginDetails.getFofoId());
984
		}
985
 
986
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
987
 
988
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
989
		model.addAttribute("isAdmin", isAdmin);
990
		return "unsettled_order_item";
991
	}
992
 
993
	@GetMapping("/claimedOrders")
994
	public String getclaimedOrders(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
995
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
996
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
997
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
998
				.collect(Collectors.toList());
999
 
1000
		List<PendingOrderItem> pendingOrderItem = null;
1001
 
1002
		if (isAdmin) {
1003
 
1004
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(OrderStatus.CLAIMED);
30426 tejbeer 1005
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
1006
 
1007
			Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1008
					.filter(x -> x != null).collect(Collectors.toList()).stream()
1009
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
28339 tejbeer 1010
			model.addAttribute("customRetailersMap", customRetailersMap);
1011
 
1012
		} else {
1013
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatusAndFofoId(OrderStatus.CLAIMED,
1014
					loginDetails.getFofoId());
1015
		}
1016
 
1017
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, loginDetails.getFofoId());
1018
 
1019
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1020
		model.addAttribute("isAdmin", isAdmin);
1021
		return "claim_raised_order_item";
1022
	}
1023
 
26647 tejbeer 1024
	@GetMapping("/getPendingOrderItem")
1025
	public String getPendingOrderItem(HttpServletRequest request, @RequestParam int orderId, Model model)
1026
			throws ProfitMandiBusinessException {
1027
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1028
		Map<Integer, Item> itemMap = new HashMap<>();
1029
		Map<Integer, CurrentInventorySnapshot> inventoryMap = new HashMap<>();
26817 amit.gupta 1030
		PendingOrder pendingPO = pendingOrderRepository.selectById(orderId);
1031
		Customer customer = customerRepository.selectById(pendingPO.getCustomerId());
26647 tejbeer 1032
		List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(orderId);
1033
		for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
1034
			Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1035
			CurrentInventorySnapshot cis = currentInventorySnapshotRepository
28339 tejbeer 1036
					.selectByItemAndFofoId(pendingOrderItem.getItemId(), pendingPO.getFofoId());
26647 tejbeer 1037
			itemMap.put(pendingOrderItem.getItemId(), item);
1038
			LOGGER.info("cis" + cis);
1039
			inventoryMap.put(pendingOrderItem.getItemId(), cis);
1040
		}
1041
 
1042
		LOGGER.info("inventoryMap" + inventoryMap);
1043
		model.addAttribute("pendingOrderItems", pendingOrderItems);
1044
		model.addAttribute("itemMap", itemMap);
1045
		model.addAttribute("inventoryMap", inventoryMap);
26817 amit.gupta 1046
		model.addAttribute("pendingPO", gson.toJson(pendingPO));
1047
		model.addAttribute("pendingPOCustomer", gson.toJson(customer));
26721 tejbeer 1048
		model.addAttribute("isAdmin", roleManager.isAdmin(loginDetails.getRoleIds()));
26647 tejbeer 1049
		return "pending-order-item";
1050
	}
26721 tejbeer 1051
 
28352 tejbeer 1052
	@RequestMapping(value = "/getPendingOrderItemById", method = RequestMethod.GET)
1053
	public String getPendingOrderItemById(HttpServletRequest request, @RequestParam int id, Model model)
26721 tejbeer 1054
			throws Exception {
27046 tejbeer 1055
 
28352 tejbeer 1056
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1057
		model.addAttribute("pendingOrderItem", pendingOrderItem);
1058
		return "cancel-pending-order";
1059
	}
1060
 
28437 tejbeer 1061
	@RequestMapping(value = "/getPendingOrderChangePartnerById", method = RequestMethod.GET)
1062
	public String getPendingOrderChangePartnerById(HttpServletRequest request, @RequestParam int id, Model model)
1063
			throws Exception {
1064
 
1065
		PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
1066
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(true);
1067
		model.addAttribute("customRetailersMap", customRetailersMap);
1068
		model.addAttribute("pendingOrder", pendingOrder);
1069
		return "change-partner-po";
1070
	}
1071
 
1072
	@RequestMapping(value = "/changePendingOrderPartner", method = RequestMethod.POST)
1073
	public String changePendingOrderPartner(HttpServletRequest request, @RequestParam int id, @RequestParam int fofoId,
1074
			Model model) throws Exception {
1075
 
1076
		PendingOrder pendingOrder = pendingOrderRepository.selectById(id);
1077
		pendingOrder.setFofoId(fofoId);
1078
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1079
 
1080
		return "response";
1081
	}
1082
 
28352 tejbeer 1083
	@RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
1084
	public String cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id, @RequestParam String reason,
1085
			Model model) throws Exception {
1086
 
27046 tejbeer 1087
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
26721 tejbeer 1088
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1089
 
27046 tejbeer 1090
		pendingOrderItem.setStatus(OrderStatus.CANCELLED);
1091
		pendingOrderItem.setStatusDescription(loginDetails.getEmailId());
28352 tejbeer 1092
		pendingOrderItem.setRemark(reason);
1093
		pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
27057 tejbeer 1094
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
26721 tejbeer 1095
 
27046 tejbeer 1096
		List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
26721 tejbeer 1097
				.map(x -> x.getStatus()).collect(Collectors.toList());
1098
 
28352 tejbeer 1099
		Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1100
 
1101
		List<Integer> catalogIds = new ArrayList<>();
1102
 
1103
		Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1104
		pendingOrderItem.setItemName(item.getItemDescription());
1105
		catalogIds.add(item.getCatalogItemId());
1106
 
1107
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1108
		JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1109
		pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1110
		pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1111
		CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
1112
 
1113
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
1114
 
1115
		Map<String, Object> emailModel = new HashMap<>();
1116
		emailModel.put("customer", customerAddress);
1117
		emailModel.put("pendingOrder", pendingOrder);
1118
		emailModel.put("date", dateTimeFormatter);
28427 tejbeer 1119
		LOGGER.info("emal" + customer.getEmailId());
28352 tejbeer 1120
		String[] customerEmail = null;
28427 tejbeer 1121
		if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
28356 tejbeer 1122
			customerEmail = new String[] { customer.getEmailId() };
28352 tejbeer 1123
 
28356 tejbeer 1124
			List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
1125
 
28377 tejbeer 1126
			emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel,
28356 tejbeer 1127
					customerEmail, null, bccTo.toArray(new String[0]));
28352 tejbeer 1128
 
1129
		}
1130
 
28345 tejbeer 1131
		if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1132
				&& !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1133
				&& !status.contains(OrderStatus.CLAIMED)) {
27046 tejbeer 1134
			pendingOrder.setStatus(OrderStatus.CLOSED);
26721 tejbeer 1135
		}
1136
		pendingOrderItemRepository.persist(pendingOrderItem);
28352 tejbeer 1137
 
26721 tejbeer 1138
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1139
 
1140
		return "response";
1141
	}
27046 tejbeer 1142
 
28339 tejbeer 1143
	@RequestMapping(value = "/deliveredPendingOrderItem", method = RequestMethod.POST)
1144
	public String deliveredPendingOrderItem(HttpServletRequest request, @RequestParam int id, Model model)
1145
			throws Exception {
1146
 
1147
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1148
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1149
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1150
 
1151
		if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1152
			pendingOrderItem.setStatus(OrderStatus.UNSETTLED);
1153
			pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
1154
 
1155
		} else {
1156
			pendingOrderItem.setStatus(OrderStatus.SETTLED);
1157
			pendingOrderItem.setDeliveredTimestamp(LocalDateTime.now());
1158
 
1159
		}
1160
 
1161
		List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream()
1162
				.map(x -> x.getStatus()).collect(Collectors.toList());
1163
 
1164
		List<Integer> catalogIds = new ArrayList<>();
1165
 
1166
		Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1167
		pendingOrderItem.setItemName(item.getItemDescription());
1168
		catalogIds.add(item.getCatalogItemId());
1169
 
1170
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1171
		JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1172
		pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1173
		pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1174
		CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
1175
 
1176
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
1177
 
1178
		Map<String, Object> emailModel = new HashMap<>();
1179
		emailModel.put("customer", customerAddress);
1180
		emailModel.put("pendingOrder", pendingOrder);
1181
		emailModel.put("date", dateTimeFormatter);
1182
		Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1183
		String[] customerEmail = null;
28427 tejbeer 1184
		if (customer.getEmailId() != null && !customer.getEmailId().isEmpty()) {
28356 tejbeer 1185
			customerEmail = new String[] { customer.getEmailId() };
1186
			List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
28339 tejbeer 1187
 
1188
			emailService.sendMailWithAttachments("Order Delivered with SmartDukaan", "order-delivered.vm", emailModel,
28356 tejbeer 1189
					customerEmail, null, bccTo.toArray(new String[0]));
28339 tejbeer 1190
 
1191
		}
28345 tejbeer 1192
		if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1193
				&& !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1194
				&& !status.contains(OrderStatus.CLAIMED))
28339 tejbeer 1195
 
1196
		{
1197
			pendingOrder.setStatus(OrderStatus.CLOSED);
1198
		}
1199
		pendingOrderItemRepository.persist(pendingOrderItem);
1200
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1201
 
1202
		return "response";
1203
	}
1204
 
1205
	@RequestMapping(value = "/raiseClaimOrderItem", method = RequestMethod.POST)
1206
	public String raiseClaimOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
1207
 
1208
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1209
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1210
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1211
 
1212
		if (pendingOrder.getTotalAmount() == pendingOrder.getPaidAmount()) {
1213
			pendingOrderItem.setStatus(OrderStatus.CLAIMED);
1214
			pendingOrderItem.setClaimedTimestamp(LocalDateTime.now());
1215
 
1216
		}
1217
		pendingOrderItemRepository.persist(pendingOrderItem);
1218
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1219
 
1220
		return "response";
1221
	}
1222
 
28344 tejbeer 1223
	@RequestMapping(value = "/verifyOrderItem", method = RequestMethod.POST)
1224
	public String verifyOrderItem(HttpServletRequest request, @RequestParam int id, Model model) throws Exception {
1225
 
1226
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1227
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1228
		pendingOrderItem.setVerifiedTimestamp(LocalDateTime.now());
28350 tejbeer 1229
 
1230
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1231
 
28344 tejbeer 1232
		return "response";
1233
	}
1234
 
27819 tejbeer 1235
	@RequestMapping(value = "/cancelOrderByInvoice", method = RequestMethod.POST)
1236
	public String cancelOrder(HttpServletRequest request, @RequestParam List<String> invoiceNumbers, Model model)
1237
			throws Exception {
1238
		orderService.cancelOrder(invoiceNumbers);
1239
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
1240
 
1241
		return "response";
1242
	}
1243
 
28358 tejbeer 1244
	@RequestMapping(value = "/getOnlineOrder", method = RequestMethod.GET)
1245
	public String cancelOrder(HttpServletRequest request, Model model) throws Exception {
1246
		return "online-order";
1247
	}
1248
 
1249
	@GetMapping("/getAllOrdersByStatus")
1250
	public String getAllOrdersByStatus(HttpServletRequest request, @RequestParam OrderStatus status,
28420 tejbeer 1251
			@RequestParam(required = false) LocalDateTime startTime,
1252
			@RequestParam(required = false) LocalDateTime endTime, Model model) throws ProfitMandiBusinessException {
28358 tejbeer 1253
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1254
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1255
 
28420 tejbeer 1256
		LOGGER.info("startTime" + startTime);
1257
 
1258
		LOGGER.info("endTime" + endTime);
1259
 
28358 tejbeer 1260
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1261
				.collect(Collectors.toList());
1262
 
30426 tejbeer 1263
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
1264
 
1265
		Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1266
				.filter(x -> x != null).collect(Collectors.toList()).stream()
1267
				.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
28358 tejbeer 1268
		model.addAttribute("customRetailersMap", customRetailersMap);
1269
 
1270
		List<PendingOrderItem> pendingOrderItem = null;
28420 tejbeer 1271
		if (startTime == null) {
1272
			pendingOrderItem = pendingOrderItemRepository.selectOrderItemByStatus(status);
1273
		} else {
1274
			List<OrderStatus> statusList = new ArrayList<>();
1275
			if (status.equals(OrderStatus.DELIVERED)) {
1276
				statusList.add(OrderStatus.SETTLED);
1277
				statusList.add(OrderStatus.UNSETTLED);
1278
			} else {
1279
				statusList.add(status);
1280
			}
28429 tejbeer 1281
			pendingOrderItem = pendingOrderItemRepository.selectByStatusAndCreateTimestamp(statusList,
1282
					startTime.toLocalDate().atStartOfDay(), endTime);
28420 tejbeer 1283
		}
28361 tejbeer 1284
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, 0);
28358 tejbeer 1285
 
1286
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
28361 tejbeer 1287
		model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
28358 tejbeer 1288
 
1289
		model.addAttribute("isAdmin", isAdmin);
1290
		return "online-order-item";
1291
	}
30426 tejbeer 1292
 
30162 manish 1293
	@RequestMapping(value = "/franchiseeSalesReport", method = RequestMethod.GET)
30426 tejbeer 1294
	public String getFranchiseeSalesReport(HttpServletRequest request, Model model)
1295
			throws ProfitMandiBusinessException {
30162 manish 1296
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1297
 
30162 manish 1298
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1299
		LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
30426 tejbeer 1300
		FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoDetails.getFofoId());
28377 tejbeer 1301
 
30426 tejbeer 1302
		List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoDetails.getFofoId(),
1303
				fs.getCode(), currentStartMonth, currentDate);
1304
 
30162 manish 1305
		LOGGER.info("focoSaleReportList {}", focoSaleReportList);
30426 tejbeer 1306
 
1307
		model.addAttribute("startDate", currentDate.minusDays(30).toLocalDate());
30162 manish 1308
		model.addAttribute("endDate", LocalDate.now());
1309
		model.addAttribute("focoSaleReportList", focoSaleReportList);
1310
		return "foco-sale-report";
1311
	}
30426 tejbeer 1312
 
30162 manish 1313
	@RequestMapping(value = "/downloadFranchiseeSales", method = RequestMethod.GET)
1314
	public ResponseEntity<?> getdownloadFranchiseeSales(HttpServletRequest request,
1315
			@RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1316
			@RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1317
			throws Exception {
1318
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1319
		List<List<?>> rows = new ArrayList<>();
1320
 
1321
		FofoStore fs = fofoStoreRepository.selectByRetailerId(fofoDetails.getFofoId());
1322
		List<FocoSaleReportModel> focoSaleReportList = fofoOrderRepository.selectFocoSaleReport(fofoDetails.getFofoId(),
1323
				fs.getCode(), startDate.atStartOfDay(), endDate.atStartOfDay());
1324
		LOGGER.info("FocoSaleReportList {}", focoSaleReportList);
1325
 
1326
		for (FocoSaleReportModel fsr : focoSaleReportList) {
1327
 
1328
			rows.add(Arrays.asList(fsr.getCode(), fsr.getName(), fsr.getCity(), fsr.getState(), fsr.getRegion(),
1329
					fsr.getItemId(), fsr.getBrand(), fsr.getModelName(), fsr.getModelNumber(), fsr.getColor(),
1330
					fsr.getQuantity(), fsr.getDp(), fsr.getSellingPrice(), fsr.getMop(), fsr.getSerialNumber(),
1331
					fsr.getCreateDate(), fsr.getCustomerName(), fsr.getCustomerPhone(), fsr.getCustomerCity(),
1332
					fsr.getCustomerPincode(), fsr.getInvoiceNumber(), fsr.getPurchaseReference(),
1333
					fsr.getCustomerGstNumber(), fsr.getCancelledTimestamp(), fsr.getGrnCompleteDate(),
1334
					fsr.getHygieneRating(), fsr.getRating(), fsr.getStatus(), fsr.getRemark(),
1335
					fsr.getCreatedTimestamp(), fsr.getDisposedTimestamp(), fsr.getNextTimestamp(),
1336
					fsr.getActivationTimestamp(), fsr.getActivationTimestamp(), fsr.getLabel()));
1337
 
1338
		}
1339
 
1340
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1341
				Arrays.asList("Code", "Name", "City", "State", "Region", "Item Id", "Brand", "Model Name",
1342
						"Model Number", "Color", "Quantity", "Dp", "Selling_Price", "mop", "Serial Number",
1343
						"Create Date", "Customer Name", "Customer Phone", "Customer City", " Customer Pincode",
1344
						"Invoice  Number", "Purchase Reference", "Customer Gst Number", " Cancelled Timestamp",
1345
						"GRN Complete Date", "Hygiene Rating", "Rating", "Status", "Remark", "Created Timestamp",
1346
						"Disposed Timestamp", " Next Timestamp", "Activation Timestamp", "Create Timestamp", "Label"),
1347
				rows);
1348
 
1349
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Franchisee Sales Report");
1350
 
1351
		return responseEntity;
1352
 
1353
	}
30426 tejbeer 1354
 
30162 manish 1355
	@RequestMapping(value = "/downloadWalletSummaryReport", method = RequestMethod.GET)
1356
	public ResponseEntity<?> getDownloadWalletSummaryReport(HttpServletRequest request,
1357
			@RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1358
			@RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1359
			throws Exception {
1360
 
1361
		List<List<?>> rows = new ArrayList<>();
1362
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1363
 
1364
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1365
		LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
1366
 
1367
		List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository
1368
				.selectWalletSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1369
		LOGGER.info("walletSummartList {}", walletSummartList);
1370
 
1371
		for (WalletSummaryReportModel walletSummart : walletSummartList) {
1372
 
1373
			rows.add(Arrays.asList(walletSummart.getId(), walletSummart.getCode(), walletSummart.getName(),
1374
					walletSummart.getEmail(), walletSummart.getPhone(), walletSummart.getAmount(),
1375
					walletSummart.getRefundableAmount(), walletSummart.getReference(), walletSummart.getReferenceType(),
1376
					walletSummart.getBusinessTimestamp(), walletSummart.getDescription()));
1377
 
1378
		}
1379
 
1380
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
1381
				.getCSVByteStream(Arrays.asList("Id", "Code", "Name", "Email", "Phone", "Amount", "Refundable_amount",
1382
						"Reference", "Reference_type", "Business_timestamp", "Description"), rows);
1383
 
1384
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Wallet Statement Report");
1385
 
1386
		return responseEntity;
1387
 
1388
	}
30426 tejbeer 1389
 
30162 manish 1390
	@RequestMapping(value = "/walletSummaryReport", method = RequestMethod.GET)
30426 tejbeer 1391
	public String getWalletSummaryReport(HttpServletRequest request, Model model) throws Exception {
30162 manish 1392
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1393
 
1394
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1395
		LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
30426 tejbeer 1396
 
1397
		List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository
1398
				.selectWalletSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1399
		LOGGER.info("walletSummartList {}", walletSummartList);
30426 tejbeer 1400
 
1401
		model.addAttribute("startDate", currentDate.minusDays(30).toLocalDate());
30162 manish 1402
		model.addAttribute("endDate", LocalDate.now());
1403
		model.addAttribute("walletSummartList", walletSummartList);
30426 tejbeer 1404
 
30162 manish 1405
		return "wallet-summary-report";
1406
	}
30426 tejbeer 1407
 
30162 manish 1408
	@RequestMapping(value = "/pendingIndentReport", method = RequestMethod.GET)
30426 tejbeer 1409
	public String getPendingIndentReport(HttpServletRequest request, Model model) throws Exception {
30162 manish 1410
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1411
 
1412
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1413
		LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();
30426 tejbeer 1414
 
1415
		List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
1416
				.selectPendingIndentReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1417
		LOGGER.info("pendingIndentReports {}", pendingIndentReports);
30426 tejbeer 1418
 
1419
		model.addAttribute("startDate", currentDate.minusMonths(2).toLocalDate());
30162 manish 1420
		model.addAttribute("endDate", LocalDate.now());
1421
		model.addAttribute("pendingIndentReports", pendingIndentReports);
30426 tejbeer 1422
 
30162 manish 1423
		return "pending-indent-report";
1424
	}
30426 tejbeer 1425
 
30162 manish 1426
	@RequestMapping(value = "/pendingIndentReportDownload", method = RequestMethod.GET)
30426 tejbeer 1427
	public ResponseEntity<?> getPendingIndentReportDownload(HttpServletRequest request, Model model) throws Exception {
30162 manish 1428
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1429
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1430
		LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();
1431
		List<List<?>> rows = new ArrayList<>();
30426 tejbeer 1432
		List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
1433
				.selectPendingIndentReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1434
		LOGGER.info("pendingIndentReports {}", pendingIndentReports);
1435
 
30426 tejbeer 1436
		for (PendingIndentReportModel pir : pendingIndentReports) {
1437
 
1438
			rows.add(Arrays.asList(pir.getTransactionId(), pir.getOrderId(), pir.getCreatTimestamp(), pir.getItemId(),
1439
					pir.getBrand(), pir.getModelName(), pir.getModelNumber(), pir.getColor(), pir.getQuantity(),
1440
					pir.getUnitPrice(), pir.getWalletAmount(), pir.getStatus(), pir.getInvoiceNumber(),
30162 manish 1441
					pir.getBillingTimestamp()));
30426 tejbeer 1442
 
30162 manish 1443
		}
1444
 
30426 tejbeer 1445
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList(
1446
				"Transaction Id", "Order Id", "Created_At", "Item_Id", "Brand", "Model Name", "Model Number", "Color",
1447
				"Quantity", "Unit Price", "Wallet Deduction", "Status", "Invoice Number", "Billing Timestamp"), rows);
1448
 
1449
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Order Status Summary Report");
1450
 
30162 manish 1451
		return responseEntity;
1452
	}
30426 tejbeer 1453
 
30162 manish 1454
	@RequestMapping(value = "/schemePayoutReport", method = RequestMethod.GET)
30426 tejbeer 1455
	public String getSchemePayoutReport(HttpServletRequest request, Model model) throws Exception {
30162 manish 1456
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1457
 
1458
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1459
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1460
 
1461
		List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
1462
				.selectSchemePayoutReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1463
		LOGGER.info("schemePayoutReports {}", schemePayoutReports);
30426 tejbeer 1464
 
1465
		model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
30162 manish 1466
		model.addAttribute("endDate", LocalDate.now());
1467
		model.addAttribute("schemePayoutReports", schemePayoutReports);
30426 tejbeer 1468
 
30162 manish 1469
		return "scheme-payout-report";
1470
	}
30426 tejbeer 1471
 
30177 manish 1472
	@RequestMapping(value = "/selectPartnerBillingSummaryReport", method = RequestMethod.GET)
30426 tejbeer 1473
	public String getselectPartnerBillingSummaryReport(HttpServletRequest request, Model model) throws Exception {
30177 manish 1474
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1475
 
30177 manish 1476
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1477
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1478
 
1479
		List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1480
				.selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1481
 
1482
		model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
30177 manish 1483
		model.addAttribute("endDate", LocalDate.now());
1484
		model.addAttribute("partnerBillingSummaryReports", partnerBillingSummaryReports);
30426 tejbeer 1485
 
30177 manish 1486
		return "partner-billing-summary-report";
1487
	}
30426 tejbeer 1488
 
30162 manish 1489
	@RequestMapping(value = "/priceDropReport", method = RequestMethod.GET)
30426 tejbeer 1490
	public String getSelectPriceDropReport(HttpServletRequest request, Model model) throws Exception {
30162 manish 1491
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1492
 
30162 manish 1493
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1494
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1495
 
1496
		List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1497
				currentStartMonth, currentDate);
1498
 
1499
		model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
30162 manish 1500
		model.addAttribute("endDate", LocalDate.now());
1501
		model.addAttribute("priceDropReports", priceDropReports);
30426 tejbeer 1502
 
30162 manish 1503
		return "price-drop-report";
1504
	}
30426 tejbeer 1505
 
30162 manish 1506
	@RequestMapping(value = "/downloadPriceDropReport", method = RequestMethod.GET)
30426 tejbeer 1507
	public ResponseEntity<?> getSelectDownloadPriceDropReport(HttpServletRequest request, Model model)
1508
			throws Exception {
30162 manish 1509
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1510
 
30162 manish 1511
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1512
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
1513
		List<List<?>> rows = new ArrayList<>();
30426 tejbeer 1514
		List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1515
				currentStartMonth, currentDate);
30162 manish 1516
 
30426 tejbeer 1517
		for (PriceDropReportModel pdr : priceDropReports) {
1518
 
1519
			rows.add(Arrays.asList(pdr.getCode(), pdr.getId(), pdr.getBrand(), pdr.getModelName(), pdr.getModelNumber(),
1520
					pdr.getAffectedOn(), pdr.getAmount(), pdr.getPartnerPayout(), pdr.getImei(), pdr.getStatus(),
1521
					pdr.getUpdateTimestamp(), pdr.getRejectionReason()));
1522
 
30162 manish 1523
		}
1524
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
30426 tejbeer 1525
				.getCSVByteStream(Arrays.asList("code", "Price_Drop_Id", "brand", "model_name", "model_number",
1526
						"affected_on", "amount", "partner_payout", "Imei", "status", "processed_on", "Reason"), rows);
30162 manish 1527
 
1528
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "price drop report");
1529
 
1530
		return responseEntity;
30426 tejbeer 1531
 
30162 manish 1532
	}
30426 tejbeer 1533
 
30177 manish 1534
	@RequestMapping(value = "/downloadPartnerBillingSummaryReport", method = RequestMethod.GET)
1535
	public ResponseEntity<?> getdownloadPartnerBillingSummaryReport(HttpServletRequest request,
1536
			@RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1537
			@RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1538
			throws Exception {
1539
 
1540
		List<List<?>> rows = new ArrayList<>();
1541
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1542
 
30177 manish 1543
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1544
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1545
 
1546
		List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1547
				.selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1548
 
30177 manish 1549
		for (PartnerBillingSummaryModel pbsr : partnerBillingSummaryReports) {
1550
 
30426 tejbeer 1551
			rows.add(Arrays.asList(pbsr.getId(), pbsr.getCreateTimestamp(), pbsr.getBillingTimestamp(),
1552
					pbsr.getDeliveryTimestamp(), pbsr.getDeliveryTimestamp(), pbsr.getPartnerGrnTimestamp(),
1553
					pbsr.getTransactionId(), pbsr.getLogisticsTransactionId(), pbsr.getAirwayBillNumber(),
1554
					pbsr.getStatusSubGroup(), pbsr.getStatusName(), pbsr.getRetailerId(), pbsr.getRetailerName(),
1555
					pbsr.getItemId(), pbsr.getBrand(), pbsr.getModelName(), pbsr.getModelNumber(), pbsr.getColor(),
1556
					pbsr.getUnitPrice(), pbsr.getQuantity(), pbsr.getTotalPrice(), pbsr.getInvoiceNumber(),
1557
					pbsr.getIgstRate(), pbsr.getCgstRate(), pbsr.getSgstRate()));
1558
 
30177 manish 1559
		}
1560
 
30426 tejbeer 1561
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("OrderId",
1562
				"CREATION_DATE", "BILLING_DATE", "DELIVERED_ON", "SCANNED_IN_ON", "Transaction_id", "master_order_id",
1563
				"airwaybill_no", "statusSubGroupp", "statusName", "customer_id", "customer_name", "Item_Id", "brand",
1564
				"model_name", "model_number", "color", "selling_price", "Quantity", "total_price", "invoice_number",
1565
				"igstrate", "cgstrate", "sgstrate"), rows);
30177 manish 1566
 
1567
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Billing Statement Report");
1568
 
1569
		return responseEntity;
1570
 
1571
	}
30426 tejbeer 1572
 
30162 manish 1573
	@RequestMapping(value = "/invoiceSchemeOutSummaryReport", method = RequestMethod.GET)
30426 tejbeer 1574
	public String getInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model) throws Exception {
30162 manish 1575
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1576
 
1577
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1578
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1579
 
1580
		List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1581
				.selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1582
		LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
30426 tejbeer 1583
 
1584
		model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
30162 manish 1585
		model.addAttribute("endDate", LocalDate.now());
1586
		model.addAttribute("focoSchemeOutReports", focoSchemeOutReports);
30426 tejbeer 1587
 
30162 manish 1588
		return "invoicewise-scheme-out-report";
1589
	}
30426 tejbeer 1590
 
30162 manish 1591
	@RequestMapping(value = "/downloadInvoiceSchemeOutSummaryReport", method = RequestMethod.GET)
30426 tejbeer 1592
	public ResponseEntity<?> getDownloadInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model)
1593
			throws Exception {
30162 manish 1594
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1595
 
30162 manish 1596
		List<List<?>> rows = new ArrayList<>();
1597
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1598
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1599
 
1600
		List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1601
				.selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1602
		LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
30426 tejbeer 1603
 
1604
		for (FocoSchemeOutReportModel fsor : focoSchemeOutReports) {
1605
			rows.add(Arrays.asList(fsor.getInvoiceNumber(), fsor.getQuantity(), fsor.getBrand(), fsor.getModelName(),
1606
					fsor.getModelNumber(), fsor.getColor(), fsor.getAmount()));
1607
 
30162 manish 1608
		}
1609
 
30426 tejbeer 1610
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1611
				Arrays.asList("InvoiceNumber", "Quantity", "Brand", "Model Name", "Model Number", "Color", "Amount"),
1612
				rows);
1613
 
1614
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows,
1615
				"invoice wise scheme out Summary Report");
1616
 
30162 manish 1617
		return responseEntity;
1618
	}
30426 tejbeer 1619
 
30162 manish 1620
	@RequestMapping(value = "/schemePayoutReportDownload", method = RequestMethod.GET)
30426 tejbeer 1621
	public ResponseEntity<?> getSchemePayoutReportDownload(HttpServletRequest request, Model model) throws Exception {
30162 manish 1622
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1623
 
30162 manish 1624
		List<List<?>> rows = new ArrayList<>();
1625
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1626
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1627
 
1628
		List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
1629
				.selectSchemePayoutReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1630
		LOGGER.info("schemePayoutReports {}", schemePayoutReports);
1631
 
30426 tejbeer 1632
		for (SchemePayoutReportModel spr : schemePayoutReports) {
1633
 
1634
			rows.add(Arrays.asList(spr.getId(), spr.getSerialNumber(), spr.getBrand(), spr.getModelName(),
1635
					spr.getModelNumber(), spr.getColor(), spr.getSchemeInDp(), spr.getSchemeOutDp(), spr.getSchemeId(),
1636
					spr.getName(), spr.getType(), spr.getAmountType(), spr.getPurchaseReference(),
1637
					spr.getInvoiceNumber(), spr.getSioAmount(), spr.getStatus(), spr.getStatusDescription(),
1638
					spr.getCreateTimestamp(), spr.getRolledBackTimestamp()));
1639
 
1640
		}
1641
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Item_Id",
1642
				"serial_number", "Brand", "Model Name", "Model Number", "Color", "Scheme_IN_DP", "Scheme_out_dp",
1643
				"Scheme_Id", "Name", "Type", "amount", "Purchase_Invoice", "SALE_INOVOICE", "Amount", "status",
1644
				"description", "create_timestamp", "rolled_back_timestamp"), rows);
1645
 
1646
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Scheme Payout Summary Report");
1647
 
1648
		return responseEntity;
30162 manish 1649
	}
30426 tejbeer 1650
 
28377 tejbeer 1651
	@GetMapping("/getAllOnlineOrder")
1652
	public String getAllOrders(HttpServletRequest request, @RequestParam(required = false) LocalDate date, Model model)
1653
			throws ProfitMandiBusinessException {
1654
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1655
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1656
		if (date == null) {
1657
			date = LocalDate.now().minusDays(3);
1658
		}
1659
 
1660
		LOGGER.info("date" + date);
1661
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1662
				.collect(Collectors.toList());
1663
 
30426 tejbeer 1664
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
1665
 
1666
		Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1667
				.filter(x -> x != null).collect(Collectors.toList()).stream()
1668
				.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1669
 
28377 tejbeer 1670
		model.addAttribute("customRetailersMap", customRetailersMap);
1671
 
1672
		List<PendingOrderItem> pendingOrderItem = null;
1673
 
1674
		pendingOrderItem = pendingOrderItemRepository.selectAll(date.atStartOfDay(), LocalDateTime.now());
1675
 
1676
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, 0);
1677
 
1678
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1679
		model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
1680
		model.addAttribute("date", date);
1681
		model.addAttribute("isAdmin", isAdmin);
1682
		return "online-all-order-item";
1683
	}
21612 ashik.ali 1684
}