Subversion Repositories SmartDukaan

Rev

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