Subversion Repositories SmartDukaan

Rev

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