Subversion Repositories SmartDukaan

Rev

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