Subversion Repositories SmartDukaan

Rev

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