Subversion Repositories SmartDukaan

Rev

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

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