Subversion Repositories SmartDukaan

Rev

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