Subversion Repositories SmartDukaan

Rev

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