Subversion Repositories SmartDukaan

Rev

Rev 30177 | Rev 30426 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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