Subversion Repositories SmartDukaan

Rev

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