Subversion Repositories SmartDukaan

Rev

Rev 31238 | Rev 31376 | 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
 
31375 tejbeer 219
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectAll();
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);
1328
 
1329
		for (FocoSaleReportModel fsr : focoSaleReportList) {
1330
 
1331
			rows.add(Arrays.asList(fsr.getCode(), fsr.getName(), fsr.getCity(), fsr.getState(), fsr.getRegion(),
1332
					fsr.getItemId(), fsr.getBrand(), fsr.getModelName(), fsr.getModelNumber(), fsr.getColor(),
1333
					fsr.getQuantity(), fsr.getDp(), fsr.getSellingPrice(), fsr.getMop(), fsr.getSerialNumber(),
1334
					fsr.getCreateDate(), fsr.getCustomerName(), fsr.getCustomerPhone(), fsr.getCustomerCity(),
1335
					fsr.getCustomerPincode(), fsr.getInvoiceNumber(), fsr.getPurchaseReference(),
1336
					fsr.getCustomerGstNumber(), fsr.getCancelledTimestamp(), fsr.getGrnCompleteDate(),
1337
					fsr.getHygieneRating(), fsr.getRating(), fsr.getStatus(), fsr.getRemark(),
1338
					fsr.getCreatedTimestamp(), fsr.getDisposedTimestamp(), fsr.getNextTimestamp(),
1339
					fsr.getActivationTimestamp(), fsr.getActivationTimestamp(), fsr.getLabel()));
1340
 
1341
		}
1342
 
1343
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1344
				Arrays.asList("Code", "Name", "City", "State", "Region", "Item Id", "Brand", "Model Name",
1345
						"Model Number", "Color", "Quantity", "Dp", "Selling_Price", "mop", "Serial Number",
1346
						"Create Date", "Customer Name", "Customer Phone", "Customer City", " Customer Pincode",
1347
						"Invoice  Number", "Purchase Reference", "Customer Gst Number", " Cancelled Timestamp",
1348
						"GRN Complete Date", "Hygiene Rating", "Rating", "Status", "Remark", "Created Timestamp",
1349
						"Disposed Timestamp", " Next Timestamp", "Activation Timestamp", "Create Timestamp", "Label"),
1350
				rows);
1351
 
1352
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Franchisee Sales Report");
1353
 
1354
		return responseEntity;
1355
 
1356
	}
30426 tejbeer 1357
 
30162 manish 1358
	@RequestMapping(value = "/downloadWalletSummaryReport", method = RequestMethod.GET)
1359
	public ResponseEntity<?> getDownloadWalletSummaryReport(HttpServletRequest request,
1360
			@RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1361
			@RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1362
			throws Exception {
1363
 
1364
		List<List<?>> rows = new ArrayList<>();
1365
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1366
 
1367
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1368
		LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
1369
 
1370
		List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository
1371
				.selectWalletSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1372
		LOGGER.info("walletSummartList {}", walletSummartList);
1373
 
1374
		for (WalletSummaryReportModel walletSummart : walletSummartList) {
1375
 
1376
			rows.add(Arrays.asList(walletSummart.getId(), walletSummart.getCode(), walletSummart.getName(),
1377
					walletSummart.getEmail(), walletSummart.getPhone(), walletSummart.getAmount(),
1378
					walletSummart.getRefundableAmount(), walletSummart.getReference(), walletSummart.getReferenceType(),
1379
					walletSummart.getBusinessTimestamp(), walletSummart.getDescription()));
1380
 
1381
		}
1382
 
1383
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
1384
				.getCSVByteStream(Arrays.asList("Id", "Code", "Name", "Email", "Phone", "Amount", "Refundable_amount",
1385
						"Reference", "Reference_type", "Business_timestamp", "Description"), rows);
1386
 
1387
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Wallet Statement Report");
1388
 
1389
		return responseEntity;
1390
 
1391
	}
30426 tejbeer 1392
 
30162 manish 1393
	@RequestMapping(value = "/walletSummaryReport", method = RequestMethod.GET)
30426 tejbeer 1394
	public String getWalletSummaryReport(HttpServletRequest request, Model model) throws Exception {
30162 manish 1395
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1396
 
1397
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1398
		LocalDateTime currentStartMonth = currentDate.minusDays(30).toLocalDate().atStartOfDay();
30426 tejbeer 1399
 
1400
		List<WalletSummaryReportModel> walletSummartList = fofoOrderRepository
1401
				.selectWalletSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1402
		LOGGER.info("walletSummartList {}", walletSummartList);
30426 tejbeer 1403
 
1404
		model.addAttribute("startDate", currentDate.minusDays(30).toLocalDate());
30162 manish 1405
		model.addAttribute("endDate", LocalDate.now());
1406
		model.addAttribute("walletSummartList", walletSummartList);
30426 tejbeer 1407
 
30162 manish 1408
		return "wallet-summary-report";
1409
	}
30426 tejbeer 1410
 
30162 manish 1411
	@RequestMapping(value = "/pendingIndentReport", method = RequestMethod.GET)
30426 tejbeer 1412
	public String getPendingIndentReport(HttpServletRequest request, Model model) throws Exception {
30162 manish 1413
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1414
 
1415
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1416
		LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();
30426 tejbeer 1417
 
1418
		List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
1419
				.selectPendingIndentReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1420
		LOGGER.info("pendingIndentReports {}", pendingIndentReports);
30426 tejbeer 1421
 
1422
		model.addAttribute("startDate", currentDate.minusMonths(2).toLocalDate());
30162 manish 1423
		model.addAttribute("endDate", LocalDate.now());
1424
		model.addAttribute("pendingIndentReports", pendingIndentReports);
30426 tejbeer 1425
 
30162 manish 1426
		return "pending-indent-report";
1427
	}
30426 tejbeer 1428
 
30162 manish 1429
	@RequestMapping(value = "/pendingIndentReportDownload", method = RequestMethod.GET)
30426 tejbeer 1430
	public ResponseEntity<?> getPendingIndentReportDownload(HttpServletRequest request, Model model) throws Exception {
30162 manish 1431
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1432
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1433
		LocalDateTime currentStartMonth = currentDate.minusMonths(2).toLocalDate().atStartOfDay();
1434
		List<List<?>> rows = new ArrayList<>();
30426 tejbeer 1435
		List<PendingIndentReportModel> pendingIndentReports = fofoOrderRepository
1436
				.selectPendingIndentReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1437
		LOGGER.info("pendingIndentReports {}", pendingIndentReports);
1438
 
30426 tejbeer 1439
		for (PendingIndentReportModel pir : pendingIndentReports) {
1440
 
1441
			rows.add(Arrays.asList(pir.getTransactionId(), pir.getOrderId(), pir.getCreatTimestamp(), pir.getItemId(),
1442
					pir.getBrand(), pir.getModelName(), pir.getModelNumber(), pir.getColor(), pir.getQuantity(),
1443
					pir.getUnitPrice(), pir.getWalletAmount(), pir.getStatus(), pir.getInvoiceNumber(),
30162 manish 1444
					pir.getBillingTimestamp()));
30426 tejbeer 1445
 
30162 manish 1446
		}
1447
 
30426 tejbeer 1448
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList(
1449
				"Transaction Id", "Order Id", "Created_At", "Item_Id", "Brand", "Model Name", "Model Number", "Color",
1450
				"Quantity", "Unit Price", "Wallet Deduction", "Status", "Invoice Number", "Billing Timestamp"), rows);
1451
 
1452
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Order Status Summary Report");
1453
 
30162 manish 1454
		return responseEntity;
1455
	}
30426 tejbeer 1456
 
30162 manish 1457
	@RequestMapping(value = "/schemePayoutReport", method = RequestMethod.GET)
30426 tejbeer 1458
	public String getSchemePayoutReport(HttpServletRequest request, Model model) throws Exception {
30162 manish 1459
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1460
 
1461
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1462
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1463
 
1464
		List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
1465
				.selectSchemePayoutReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1466
		LOGGER.info("schemePayoutReports {}", schemePayoutReports);
30426 tejbeer 1467
 
1468
		model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
30162 manish 1469
		model.addAttribute("endDate", LocalDate.now());
1470
		model.addAttribute("schemePayoutReports", schemePayoutReports);
30426 tejbeer 1471
 
30162 manish 1472
		return "scheme-payout-report";
1473
	}
30426 tejbeer 1474
 
30177 manish 1475
	@RequestMapping(value = "/selectPartnerBillingSummaryReport", method = RequestMethod.GET)
30426 tejbeer 1476
	public String getselectPartnerBillingSummaryReport(HttpServletRequest request, Model model) throws Exception {
30177 manish 1477
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1478
 
30177 manish 1479
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1480
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1481
 
1482
		List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1483
				.selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1484
 
1485
		model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
30177 manish 1486
		model.addAttribute("endDate", LocalDate.now());
1487
		model.addAttribute("partnerBillingSummaryReports", partnerBillingSummaryReports);
30426 tejbeer 1488
 
30177 manish 1489
		return "partner-billing-summary-report";
1490
	}
30426 tejbeer 1491
 
30162 manish 1492
	@RequestMapping(value = "/priceDropReport", method = RequestMethod.GET)
30426 tejbeer 1493
	public String getSelectPriceDropReport(HttpServletRequest request, Model model) throws Exception {
30162 manish 1494
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1495
 
30162 manish 1496
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1497
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1498
 
1499
		List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1500
				currentStartMonth, currentDate);
1501
 
1502
		model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
30162 manish 1503
		model.addAttribute("endDate", LocalDate.now());
1504
		model.addAttribute("priceDropReports", priceDropReports);
30426 tejbeer 1505
 
30162 manish 1506
		return "price-drop-report";
1507
	}
30426 tejbeer 1508
 
30162 manish 1509
	@RequestMapping(value = "/downloadPriceDropReport", method = RequestMethod.GET)
30426 tejbeer 1510
	public ResponseEntity<?> getSelectDownloadPriceDropReport(HttpServletRequest request, Model model)
1511
			throws Exception {
30162 manish 1512
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1513
 
30162 manish 1514
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1515
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
1516
		List<List<?>> rows = new ArrayList<>();
30426 tejbeer 1517
		List<PriceDropReportModel> priceDropReports = orderRepository.selectPriceDropReport(fofoDetails.getFofoId(),
1518
				currentStartMonth, currentDate);
30162 manish 1519
 
30426 tejbeer 1520
		for (PriceDropReportModel pdr : priceDropReports) {
1521
 
1522
			rows.add(Arrays.asList(pdr.getCode(), pdr.getId(), pdr.getBrand(), pdr.getModelName(), pdr.getModelNumber(),
1523
					pdr.getAffectedOn(), pdr.getAmount(), pdr.getPartnerPayout(), pdr.getImei(), pdr.getStatus(),
1524
					pdr.getUpdateTimestamp(), pdr.getRejectionReason()));
1525
 
30162 manish 1526
		}
1527
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
30426 tejbeer 1528
				.getCSVByteStream(Arrays.asList("code", "Price_Drop_Id", "brand", "model_name", "model_number",
1529
						"affected_on", "amount", "partner_payout", "Imei", "status", "processed_on", "Reason"), rows);
30162 manish 1530
 
1531
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "price drop report");
1532
 
1533
		return responseEntity;
30426 tejbeer 1534
 
30162 manish 1535
	}
30426 tejbeer 1536
 
30177 manish 1537
	@RequestMapping(value = "/downloadPartnerBillingSummaryReport", method = RequestMethod.GET)
1538
	public ResponseEntity<?> getdownloadPartnerBillingSummaryReport(HttpServletRequest request,
1539
			@RequestParam(name = "startDate", required = true, defaultValue = "") LocalDate startDate,
1540
			@RequestParam(name = "endDate", required = true, defaultValue = "") LocalDate endDate, Model model)
1541
			throws Exception {
1542
 
1543
		List<List<?>> rows = new ArrayList<>();
1544
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1545
 
30177 manish 1546
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1547
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1548
 
1549
		List<PartnerBillingSummaryModel> partnerBillingSummaryReports = fofoOrderRepository
1550
				.selectPartnerBillingSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
1551
 
30177 manish 1552
		for (PartnerBillingSummaryModel pbsr : partnerBillingSummaryReports) {
1553
 
30426 tejbeer 1554
			rows.add(Arrays.asList(pbsr.getId(), pbsr.getCreateTimestamp(), pbsr.getBillingTimestamp(),
1555
					pbsr.getDeliveryTimestamp(), pbsr.getDeliveryTimestamp(), pbsr.getPartnerGrnTimestamp(),
1556
					pbsr.getTransactionId(), pbsr.getLogisticsTransactionId(), pbsr.getAirwayBillNumber(),
1557
					pbsr.getStatusSubGroup(), pbsr.getStatusName(), pbsr.getRetailerId(), pbsr.getRetailerName(),
1558
					pbsr.getItemId(), pbsr.getBrand(), pbsr.getModelName(), pbsr.getModelNumber(), pbsr.getColor(),
1559
					pbsr.getUnitPrice(), pbsr.getQuantity(), pbsr.getTotalPrice(), pbsr.getInvoiceNumber(),
1560
					pbsr.getIgstRate(), pbsr.getCgstRate(), pbsr.getSgstRate()));
1561
 
30177 manish 1562
		}
1563
 
30426 tejbeer 1564
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("OrderId",
1565
				"CREATION_DATE", "BILLING_DATE", "DELIVERED_ON", "SCANNED_IN_ON", "Transaction_id", "master_order_id",
1566
				"airwaybill_no", "statusSubGroupp", "statusName", "customer_id", "customer_name", "Item_Id", "brand",
1567
				"model_name", "model_number", "color", "selling_price", "Quantity", "total_price", "invoice_number",
1568
				"igstrate", "cgstrate", "sgstrate"), rows);
30177 manish 1569
 
1570
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Billing Statement Report");
1571
 
1572
		return responseEntity;
1573
 
1574
	}
30426 tejbeer 1575
 
30162 manish 1576
	@RequestMapping(value = "/invoiceSchemeOutSummaryReport", method = RequestMethod.GET)
30426 tejbeer 1577
	public String getInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model) throws Exception {
30162 manish 1578
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
1579
 
1580
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1581
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1582
 
1583
		List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1584
				.selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1585
		LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
30426 tejbeer 1586
 
1587
		model.addAttribute("startDate", currentDate.minusMonths(3).toLocalDate());
30162 manish 1588
		model.addAttribute("endDate", LocalDate.now());
1589
		model.addAttribute("focoSchemeOutReports", focoSchemeOutReports);
30426 tejbeer 1590
 
30162 manish 1591
		return "invoicewise-scheme-out-report";
1592
	}
30426 tejbeer 1593
 
30162 manish 1594
	@RequestMapping(value = "/downloadInvoiceSchemeOutSummaryReport", method = RequestMethod.GET)
30426 tejbeer 1595
	public ResponseEntity<?> getDownloadInvoiceSchemeOutSummaryReport(HttpServletRequest request, Model model)
1596
			throws Exception {
30162 manish 1597
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1598
 
30162 manish 1599
		List<List<?>> rows = new ArrayList<>();
1600
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1601
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1602
 
1603
		List<FocoSchemeOutReportModel> focoSchemeOutReports = fofoOrderRepository
1604
				.selectInvoiceSchemeOutSummaryReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1605
		LOGGER.info("focoSchemeOutReportModel {}", focoSchemeOutReports);
30426 tejbeer 1606
 
1607
		for (FocoSchemeOutReportModel fsor : focoSchemeOutReports) {
1608
			rows.add(Arrays.asList(fsor.getInvoiceNumber(), fsor.getQuantity(), fsor.getBrand(), fsor.getModelName(),
1609
					fsor.getModelNumber(), fsor.getColor(), fsor.getAmount()));
1610
 
30162 manish 1611
		}
1612
 
30426 tejbeer 1613
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1614
				Arrays.asList("InvoiceNumber", "Quantity", "Brand", "Model Name", "Model Number", "Color", "Amount"),
1615
				rows);
1616
 
1617
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows,
1618
				"invoice wise scheme out Summary Report");
1619
 
30162 manish 1620
		return responseEntity;
1621
	}
30426 tejbeer 1622
 
30162 manish 1623
	@RequestMapping(value = "/schemePayoutReportDownload", method = RequestMethod.GET)
30426 tejbeer 1624
	public ResponseEntity<?> getSchemePayoutReportDownload(HttpServletRequest request, Model model) throws Exception {
30162 manish 1625
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
30426 tejbeer 1626
 
30162 manish 1627
		List<List<?>> rows = new ArrayList<>();
1628
		LocalDateTime currentDate = LocalDate.now().atStartOfDay();
1629
		LocalDateTime currentStartMonth = currentDate.minusMonths(3).toLocalDate().atStartOfDay();
30426 tejbeer 1630
 
1631
		List<SchemePayoutReportModel> schemePayoutReports = fofoOrderRepository
1632
				.selectSchemePayoutReport(fofoDetails.getFofoId(), currentStartMonth, currentDate);
30162 manish 1633
		LOGGER.info("schemePayoutReports {}", schemePayoutReports);
1634
 
30426 tejbeer 1635
		for (SchemePayoutReportModel spr : schemePayoutReports) {
1636
 
1637
			rows.add(Arrays.asList(spr.getId(), spr.getSerialNumber(), spr.getBrand(), spr.getModelName(),
1638
					spr.getModelNumber(), spr.getColor(), spr.getSchemeInDp(), spr.getSchemeOutDp(), spr.getSchemeId(),
1639
					spr.getName(), spr.getType(), spr.getAmountType(), spr.getPurchaseReference(),
1640
					spr.getInvoiceNumber(), spr.getSioAmount(), spr.getStatus(), spr.getStatusDescription(),
1641
					spr.getCreateTimestamp(), spr.getRolledBackTimestamp()));
1642
 
1643
		}
1644
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("Item_Id",
1645
				"serial_number", "Brand", "Model Name", "Model Number", "Color", "Scheme_IN_DP", "Scheme_out_dp",
1646
				"Scheme_Id", "Name", "Type", "amount", "Purchase_Invoice", "SALE_INOVOICE", "Amount", "status",
1647
				"description", "create_timestamp", "rolled_back_timestamp"), rows);
1648
 
1649
		ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Scheme Payout Summary Report");
1650
 
1651
		return responseEntity;
30162 manish 1652
	}
30426 tejbeer 1653
 
28377 tejbeer 1654
	@GetMapping("/getAllOnlineOrder")
1655
	public String getAllOrders(HttpServletRequest request, @RequestParam(required = false) LocalDate date, Model model)
1656
			throws ProfitMandiBusinessException {
1657
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1658
		boolean isAdmin = roleManager.isAdmin(loginDetails.getRoleIds());
1659
		if (date == null) {
1660
			date = LocalDate.now().minusDays(3);
1661
		}
1662
 
1663
		LOGGER.info("date" + date);
1664
		List<Integer> fofoIds = fofoStoreRepository.selectActiveStores().stream().map(x -> x.getId())
1665
				.collect(Collectors.toList());
1666
 
30426 tejbeer 1667
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
1668
 
1669
		Map<Integer, CustomRetailer> customRetailersMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
1670
				.filter(x -> x != null).collect(Collectors.toList()).stream()
1671
				.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1672
 
28377 tejbeer 1673
		model.addAttribute("customRetailersMap", customRetailersMap);
1674
 
1675
		List<PendingOrderItem> pendingOrderItem = null;
1676
 
1677
		pendingOrderItem = pendingOrderItemRepository.selectAll(date.atStartOfDay(), LocalDateTime.now());
1678
 
1679
		Map<String, Object> map = pendingOrderService.getItemOrders(pendingOrderItem, 0);
1680
 
1681
		model.addAttribute("pendingOrderItem", map.get("pendingOrderItem"));
1682
		model.addAttribute("partnerInventoryMap", map.get("partnerInventoryMap"));
1683
		model.addAttribute("date", date);
1684
		model.addAttribute("isAdmin", isAdmin);
1685
		return "online-all-order-item";
1686
	}
21612 ashik.ali 1687
}