Subversion Repositories SmartDukaan

Rev

Rev 24271 | Rev 24285 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 24271 Rev 24275
Line 216... Line 216...
216
 
216
 
217
	@Autowired
217
	@Autowired
218
	private CustomerCreditNoteRepository customerCreditNoteRepository;
218
	private CustomerCreditNoteRepository customerCreditNoteRepository;
219
 
219
 
220
	@Override
220
	@Override
221
	public int createOrder(CreateOrderRequest createOrderRequest, int fofoId, boolean accessoriesDeals) throws ProfitMandiBusinessException {
221
	public int createOrder(CreateOrderRequest createOrderRequest, int fofoId, boolean accessoriesDeals)
-
 
222
			throws ProfitMandiBusinessException {
222
 
223
 
223
		CustomCustomer customCustomer = createOrderRequest.getCustomer();
224
		CustomCustomer customCustomer = createOrderRequest.getCustomer();
224
 
225
 
225
		if (!StringUtils.isValidEmailAddress(customCustomer.getEmailId())) {
226
		if (!StringUtils.isValidEmailAddress(customCustomer.getEmailId())) {
226
			LOGGER.error("invalid customer emailId {} ", customCustomer.getEmailId());
227
			LOGGER.error("invalid customer emailId {} ", customCustomer.getEmailId());
Line 242... Line 243...
242
 
243
 
243
		Map<Integer, Integer> itemIdQuantity = new HashMap<>(); // this is for error
244
		Map<Integer, Integer> itemIdQuantity = new HashMap<>(); // this is for error
244
		Map<Integer, CustomFofoOrderItem> itemIdCustomFofoOrderItemMap = new HashMap<>();
245
		Map<Integer, CustomFofoOrderItem> itemIdCustomFofoOrderItemMap = new HashMap<>();
245
		Map<Integer, Float> lineItemPrice = new HashMap<>(); // this is for pricing error
246
		Map<Integer, Float> lineItemPrice = new HashMap<>(); // this is for pricing error
246
 
247
 
247
 
-
 
248
		float totalAmount = 0;
248
		float totalAmount = 0;
249
		boolean noGST = false;
249
		boolean noGST = false;
250
		for (CustomFofoOrderItem customFofoOrderItem : createOrderRequest.getFofoOrderItems()) {
250
		for (CustomFofoOrderItem customFofoOrderItem : createOrderRequest.getFofoOrderItems()) {
251
			// itemIds.add(customFofoOrderItem.getItemId());
251
			// itemIds.add(customFofoOrderItem.getItemId());
252
			Set<String> serialNumbers = this
252
			Set<String> serialNumbers = this
Line 273... Line 273...
273
			LOGGER.error("itemId's quantity should be equal to given serialnumber size {} ", itemIdQuantity);
273
			LOGGER.error("itemId's quantity should be equal to given serialnumber size {} ", itemIdQuantity);
274
			throw new ProfitMandiBusinessException("itemIdQuantity", itemIdQuantity, "FFORDR_1001");
274
			throw new ProfitMandiBusinessException("itemIdQuantity", itemIdQuantity, "FFORDR_1001");
275
			// return "error";
275
			// return "error";
276
		}
276
		}
277
 
277
 
278
 
-
 
279
		this.validatePaymentOptionsAndTotalAmount(createOrderRequest.getPaymentOptions(),
278
		this.validatePaymentOptionsAndTotalAmount(createOrderRequest.getPaymentOptions(), totalAmount);
280
				totalAmount);
-
 
281
 
279
 
282
		if (!lineItemPrice.isEmpty()) {
280
		if (!lineItemPrice.isEmpty()) {
283
			// given fofo line item price must be greater than zero
281
			// given fofo line item price must be greater than zero
284
			LOGGER.error("requested itemId's selling price must greater than 0");
282
			LOGGER.error("requested itemId's selling price must greater than 0");
285
			throw new ProfitMandiBusinessException(ProfitMandiConstants.PRICE, lineItemPrice, "FFORDR_1002");
283
			throw new ProfitMandiBusinessException(ProfitMandiConstants.PRICE, lineItemPrice, "FFORDR_1002");
Line 306... Line 304...
306
		Map<String, Float> insuranceSerialNumberSaleAmount = new HashMap<>();
304
		Map<String, Float> insuranceSerialNumberSaleAmount = new HashMap<>();
307
		Map<String, String> serialNumberModelName = new HashMap<>();
305
		Map<String, String> serialNumberModelName = new HashMap<>();
308
		Map<String, String> serialNumberBrand = new HashMap<>();
306
		Map<String, String> serialNumberBrand = new HashMap<>();
309
		for (CustomFofoOrderItem customFofoOrderItem : createOrderRequest.getFofoOrderItems()) {
307
		for (CustomFofoOrderItem customFofoOrderItem : createOrderRequest.getFofoOrderItems()) {
310
			Item item = itemMap.get(customFofoOrderItem.getItemId());
308
			Item item = itemMap.get(customFofoOrderItem.getItemId());
311
			noGST = item.getHsnCode().equals("NOGST"); 
309
			noGST = item.getHsnCode().equals("NOGST");
312
			if (item.getType().equals(ItemType.SERIALIZED)) {
310
			if (item.getType().equals(ItemType.SERIALIZED)) {
313
				for (SerialNumberDetail serialNumberDetail : customFofoOrderItem.getSerialNumberDetails()) {
311
				for (SerialNumberDetail serialNumberDetail : customFofoOrderItem.getSerialNumberDetails()) {
314
					serialNumbers.add(serialNumberDetail.getSerialNumber());
312
					serialNumbers.add(serialNumberDetail.getSerialNumber());
315
					if (serialNumberDetail.isInsurance()) {
313
					if (serialNumberDetail.isInsurance()) {
316
						insuranceSerialNumberItemPrice.put(serialNumberDetail.getSerialNumber(),
314
						insuranceSerialNumberItemPrice.put(serialNumberDetail.getSerialNumber(),
Line 427... Line 425...
427
			}
425
			}
428
		}
426
		}
429
 
427
 
430
		Map<Integer, PriceModel> itemIdMopPriceMap = pricingService
428
		Map<Integer, PriceModel> itemIdMopPriceMap = pricingService
431
				.getPurchasePriceMopPriceNotFound(itemIdCustomFofoOrderItemMap.keySet(), fofoId);
429
				.getPurchasePriceMopPriceNotFound(itemIdCustomFofoOrderItemMap.keySet(), fofoId);
432
		if(accessoriesDeals) {
430
		if (accessoriesDeals) {
433
			this.validateDpPrice(itemIdMopPriceMap, itemIdCustomFofoOrderItemMap);
431
			this.validateDpPrice(itemIdMopPriceMap, itemIdCustomFofoOrderItemMap);
434
		} else {
432
		} else {
435
			this.validateMopPrice(itemIdMopPriceMap, itemIdCustomFofoOrderItemMap);
433
			this.validateMopPrice(itemIdMopPriceMap, itemIdCustomFofoOrderItemMap);
436
		}
434
		}
437
 
435
 
438
		String fofoStoreCode = this.getFofoStoreCode(fofoId);
436
		String fofoStoreCode = this.getFofoStoreCode(fofoId);
439
		InvoiceNumberGenerationSequence invoiceNumberGenerationSequence = null;
437
		InvoiceNumberGenerationSequence invoiceNumberGenerationSequence = null;
440
		String documentNumber = null;
438
		String documentNumber = null;
441
		if(noGST) {
439
		if (noGST) {
442
			documentNumber = this.getSecurityDepositNumber(fofoId, fofoStoreCode);
440
			documentNumber = this.getSecurityDepositNumber(fofoId, fofoStoreCode);
443
			
441
 
444
		} else {
442
		} else {
445
			documentNumber = this.getInvoiceNumber(fofoId, fofoStoreCode);
443
			documentNumber = this.getInvoiceNumber(fofoId, fofoStoreCode);
446
		}
444
		}
447
			
-
 
448
 
445
 
449
		Customer customer = this.createAndGetCustomer(customCustomer);
446
		Customer customer = this.createAndGetCustomer(customCustomer);
450
 
447
 
451
		CustomerAddress customerAddress = this.createCustomerAddress(customCustomer.getAddress(), customer.getId());
448
		CustomerAddress customerAddress = this.createCustomerAddress(customCustomer.getAddress(), customer.getId());
452
 
449
 
Line 477... Line 474...
477
			this.createFofoLineItem(fofoOrderItem.getId(), inventoryItems, inventoryItemIdQuantityUsed);
474
			this.createFofoLineItem(fofoOrderItem.getId(), inventoryItems, inventoryItemIdQuantityUsed);
478
 
475
 
479
			this.updateCurrentInventorySnapshot(currentInventorySnapshots, fofoId, customFofoOrderItem.getItemId(),
476
			this.updateCurrentInventorySnapshot(currentInventorySnapshots, fofoId, customFofoOrderItem.getItemId(),
480
					customFofoOrderItem.getQuantity());
477
					customFofoOrderItem.getQuantity());
481
 
478
 
482
			this.updateInventoryItemsAndScanRecord(inventoryItems, fofoId, inventoryItemIdQuantityUsed, fofoOrder.getId());
479
			this.updateInventoryItemsAndScanRecord(inventoryItems, fofoId, inventoryItemIdQuantityUsed,
-
 
480
					fofoOrder.getId());
483
		}
481
		}
484
 
482
 
485
		// insurance calculation is insurance flag is enabled
483
		// insurance calculation is insurance flag is enabled
486
		if (!insuranceSerialNumberItemPrice.isEmpty()) {
484
		if (!insuranceSerialNumberItemPrice.isEmpty()) {
487
			LOGGER.info("Processing for insurence for serialNumbers");
485
			LOGGER.info("Processing for insurence for serialNumbers");
Line 530... Line 528...
530
		schemeService.processSchemeOut(fofoOrder.getId(), fofoId);
528
		schemeService.processSchemeOut(fofoOrder.getId(), fofoId);
531
 
529
 
532
		return fofoOrder.getId();
530
		return fofoOrder.getId();
533
	}
531
	}
534
 
532
 
535
 
-
 
536
	private String getInvoiceNumber(int fofoId,
533
	private String getInvoiceNumber(int fofoId, String fofoStoreCode) {
537
			String fofoStoreCode) {
-
 
538
		InvoiceNumberGenerationSequence invoiceNumberGenerationSequence = null;
534
		InvoiceNumberGenerationSequence invoiceNumberGenerationSequence = null;
539
		try {
535
		try {
540
			invoiceNumberGenerationSequence = invoiceNumberGenerationSequenceRepository.selectByFofoId(fofoId);
536
			invoiceNumberGenerationSequence = invoiceNumberGenerationSequenceRepository.selectByFofoId(fofoId);
541
			invoiceNumberGenerationSequence.setSequence(invoiceNumberGenerationSequence.getSequence() + 1);
537
			invoiceNumberGenerationSequence.setSequence(invoiceNumberGenerationSequence.getSequence() + 1);
542
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
538
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
Line 546... Line 542...
546
			invoiceNumberGenerationSequence.setSequence(1);
542
			invoiceNumberGenerationSequence.setSequence(1);
547
		}
543
		}
548
		invoiceNumberGenerationSequenceRepository.persist(invoiceNumberGenerationSequence);
544
		invoiceNumberGenerationSequenceRepository.persist(invoiceNumberGenerationSequence);
549
		return invoiceNumberGenerationSequence.getPrefix() + "/" + invoiceNumberGenerationSequence.getSequence();
545
		return invoiceNumberGenerationSequence.getPrefix() + "/" + invoiceNumberGenerationSequence.getSequence();
550
	}
546
	}
551
	
547
 
552
	private String getSecurityDepositNumber(int fofoId,
548
	private String getSecurityDepositNumber(int fofoId, String fofoStoreCode) {
553
			String fofoStoreCode) {
-
 
554
		InvoiceNumberGenerationSequence invoiceNumberGenerationSequence = null;
549
		InvoiceNumberGenerationSequence invoiceNumberGenerationSequence = null;
555
		try {
550
		try {
556
			invoiceNumberGenerationSequence = invoiceNumberGenerationSequenceRepository.selectByFofoId(fofoId);
551
			invoiceNumberGenerationSequence = invoiceNumberGenerationSequenceRepository.selectByFofoId(fofoId);
-
 
552
			invoiceNumberGenerationSequence
557
			invoiceNumberGenerationSequence.setChallanNumberSequence(invoiceNumberGenerationSequence.getChallanNumberSequence()+ 1);
553
					.setChallanNumberSequence(invoiceNumberGenerationSequence.getChallanNumberSequence() + 1);
558
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
554
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
559
			invoiceNumberGenerationSequence = new InvoiceNumberGenerationSequence();
555
			invoiceNumberGenerationSequence = new InvoiceNumberGenerationSequence();
560
			invoiceNumberGenerationSequence.setFofoId(fofoId);
556
			invoiceNumberGenerationSequence.setFofoId(fofoId);
561
			invoiceNumberGenerationSequence.setPrefix(fofoStoreCode);
557
			invoiceNumberGenerationSequence.setPrefix(fofoStoreCode);
562
			invoiceNumberGenerationSequence.setChallanNumberSequence(1);
558
			invoiceNumberGenerationSequence.setChallanNumberSequence(1);
563
		}
559
		}
564
		invoiceNumberGenerationSequenceRepository.persist(invoiceNumberGenerationSequence);
560
		invoiceNumberGenerationSequenceRepository.persist(invoiceNumberGenerationSequence);
-
 
561
		return invoiceNumberGenerationSequence.getPrefix() + "/SEC"
565
		return invoiceNumberGenerationSequence.getPrefix() + "/SEC" + invoiceNumberGenerationSequence.getChallanNumberSequence();
562
				+ invoiceNumberGenerationSequence.getChallanNumberSequence();
566
	}
563
	}
567
 
564
 
568
	private Set<String> serialNumberDetailsToSerialNumbers(Set<SerialNumberDetail> serialNumberDetails) {
565
	private Set<String> serialNumberDetailsToSerialNumbers(Set<SerialNumberDetail> serialNumberDetails) {
569
		Set<String> serialNumbers = new HashSet<>();
566
		Set<String> serialNumbers = new HashSet<>();
570
		for (SerialNumberDetail serialNumberDetail : serialNumberDetails) {
567
		for (SerialNumberDetail serialNumberDetail : serialNumberDetails) {
Line 597... Line 594...
597
					paymentOptionRepository.selectById(paymentOptionTransaction.getPaymentOptionId()).getName());
594
					paymentOptionRepository.selectById(paymentOptionTransaction.getPaymentOptionId()).getName());
598
			paymentOptions.add(cpi);
595
			paymentOptions.add(cpi);
599
		}
596
		}
600
		List<FofoOrderItem> fofoOrderItems = this.getByOrderId(fofoOrder.getId());
597
		List<FofoOrderItem> fofoOrderItems = this.getByOrderId(fofoOrder.getId());
601
 
598
 
602
		
-
 
603
		
-
 
604
		pdfModel.setTitle("Retailer Invoice");
599
		pdfModel.setTitle("Retailer Invoice");
605
		if(fofoOrderItems.stream().findAny().get().getHsnCode().equals("NOGST")) {
600
		if (fofoOrderItems.stream().findAny().get().getHsnCode().equals("NOGST")) {
606
			pdfModel.setTitle("Security Deposit Receipt");
601
			pdfModel.setTitle("Security Deposit Receipt");
607
		}
602
		}
608
		pdfModel.setPaymentOptions(paymentOptions);
603
		pdfModel.setPaymentOptions(paymentOptions);
609
		pdfModel.setAuther("SmartDukaan");
604
		pdfModel.setAuther("SmartDukaan");
610
		pdfModel.setInvoiceDate(fofoOrder.getFormattedDate());
605
		pdfModel.setInvoiceDate(fofoOrder.getFormattedDate());
Line 637... Line 632...
637
		tncs.add("Warranty for the goods received by me is the responsibility of the manufacturer only.");
632
		tncs.add("Warranty for the goods received by me is the responsibility of the manufacturer only.");
638
		if (pdfModel.getInsurancePolicies() != null && pdfModel.getInsurancePolicies().size() > 0) {
633
		if (pdfModel.getInsurancePolicies() != null && pdfModel.getInsurancePolicies().size() > 0) {
639
			tncs.add("Damage protection provided is the responisibility of Protection Provider only");
634
			tncs.add("Damage protection provided is the responisibility of Protection Provider only");
640
		}
635
		}
641
		pdfModel.setTncs(tncs);
636
		pdfModel.setTncs(tncs);
642
		
637
 
643
		pdfModel.setCustomer(getCustomCustomer(fofoOrder));
638
		pdfModel.setCustomer(getCustomCustomer(fofoOrder));
644
		pdfModel.setInvoiceNumber(fofoOrder.getInvoiceNumber());
639
		pdfModel.setInvoiceNumber(fofoOrder.getInvoiceNumber());
645
		pdfModel.setTotalAmount(fofoOrder.getTotalAmount());
640
		pdfModel.setTotalAmount(fofoOrder.getTotalAmount());
646
 
641
 
647
		Retailer retailer = retailerRepository.selectById(fofoOrder.getFofoId());
642
		Retailer retailer = retailerRepository.selectById(fofoOrder.getFofoId());
Line 818... Line 813...
818
			LocalDateTime startDate, LocalDateTime endDate, int offset, int limit) throws ProfitMandiBusinessException {
813
			LocalDateTime startDate, LocalDateTime endDate, int offset, int limit) throws ProfitMandiBusinessException {
819
		long countItems = 0;
814
		long countItems = 0;
820
		List<FofoOrder> fofoOrders = new ArrayList<>();
815
		List<FofoOrder> fofoOrders = new ArrayList<>();
821
 
816
 
822
		if (searchType == SearchType.CUSTOMER_MOBILE_NUMBER && !searchValue.isEmpty()) {
817
		if (searchType == SearchType.CUSTOMER_MOBILE_NUMBER && !searchValue.isEmpty()) {
823
			fofoOrders = fofoOrderRepository.selectByFofoIdAndCustomerMobileNumber(fofoId, searchValue, null,
818
			fofoOrders = fofoOrderRepository.selectByFofoIdAndCustomerMobileNumber(fofoId, searchValue, null, null,
824
					null, offset, limit);
819
					offset, limit);
825
			countItems = fofoOrderRepository.selectCountByCustomerMobileNumber(fofoId, searchValue, null,
820
			countItems = fofoOrderRepository.selectCountByCustomerMobileNumber(fofoId, searchValue, null, null);
826
					null);
-
 
827
		} else if (searchType == SearchType.CUSTOMER_NAME && !searchValue.isEmpty()) {
821
		} else if (searchType == SearchType.CUSTOMER_NAME && !searchValue.isEmpty()) {
828
			fofoOrders = fofoOrderRepository.selectByFofoIdAndCustomerName(fofoId, searchValue, null,
822
			fofoOrders = fofoOrderRepository.selectByFofoIdAndCustomerName(fofoId, searchValue, null, null, offset,
829
					null, offset, limit);
823
					limit);
830
			countItems = fofoOrderRepository.selectCountByCustomerName(fofoId, searchValue, null, null);
824
			countItems = fofoOrderRepository.selectCountByCustomerName(fofoId, searchValue, null, null);
831
		} else if (searchType == SearchType.IMEI && !searchValue.isEmpty()) {
825
		} else if (searchType == SearchType.IMEI && !searchValue.isEmpty()) {
832
			fofoOrders = fofoOrderRepository.selectByFofoIdAndSerialNumber(fofoId, searchValue, null,
826
			fofoOrders = fofoOrderRepository.selectByFofoIdAndSerialNumber(fofoId, searchValue, null, null, offset,
833
					null, offset, limit);
827
					limit);
834
			countItems = fofoOrderRepository.selectCountBySerialNumber(fofoId, searchValue, null, null);
828
			countItems = fofoOrderRepository.selectCountBySerialNumber(fofoId, searchValue, null, null);
835
		} else if (searchType == SearchType.ITEM_NAME && !searchValue.isEmpty()) {
829
		} else if (searchType == SearchType.ITEM_NAME && !searchValue.isEmpty()) {
836
			fofoOrders = fofoOrderRepository.selectByFofoIdAndItemName(fofoId, searchValue, null, null,
830
			fofoOrders = fofoOrderRepository.selectByFofoIdAndItemName(fofoId, searchValue, null, null, offset, limit);
837
					offset, limit);
-
 
838
			countItems=fofoOrderRepository.selectCountByItemName(fofoId, searchValue, null, null);
831
			countItems = fofoOrderRepository.selectCountByItemName(fofoId, searchValue, null, null);
839
		} else if (searchType == SearchType.INVOICE_NUMBER && !searchValue.isEmpty()) {
832
		} else if (searchType == SearchType.INVOICE_NUMBER && !searchValue.isEmpty()) {
840
			fofoOrders = Arrays.asList(fofoOrderRepository.selectByFofoIdAndInvoiceNumber(fofoId, searchValue));
833
			fofoOrders = Arrays.asList(fofoOrderRepository.selectByFofoIdAndInvoiceNumber(fofoId, searchValue));
841
			countItems = fofoOrders.size();
834
			countItems = fofoOrders.size();
842
		}  else if(searchType == SearchType.DATE_RANGE){
835
		} else if (searchType == SearchType.DATE_RANGE) {
843
			fofoOrders = fofoOrderRepository.selectByFofoId(fofoId, startDate, endDate, offset, limit);
836
			fofoOrders = fofoOrderRepository.selectByFofoId(fofoId, startDate, endDate, offset, limit);
844
			countItems = fofoOrderRepository.selectCountByFofoId(fofoId, startDate, endDate);
837
			countItems = fofoOrderRepository.selectCountByFofoId(fofoId, startDate, endDate);
845
		}
838
		}
846
		Map<String, Object> map = new HashMap<>();
839
		Map<String, Object> map = new HashMap<>();
847
 
840
 
Line 868... Line 861...
868
 
861
 
869
		if (searchType == SearchType.CUSTOMER_MOBILE_NUMBER && !searchValue.isEmpty()) {
862
		if (searchType == SearchType.CUSTOMER_MOBILE_NUMBER && !searchValue.isEmpty()) {
870
			fofoOrders = fofoOrderRepository.selectByFofoIdAndCustomerMobileNumber(fofoId, searchValue, startDate,
863
			fofoOrders = fofoOrderRepository.selectByFofoIdAndCustomerMobileNumber(fofoId, searchValue, startDate,
871
					endDate, offset, limit);
864
					endDate, offset, limit);
872
		} else if (searchType == SearchType.CUSTOMER_NAME && !searchValue.isEmpty()) {
865
		} else if (searchType == SearchType.CUSTOMER_NAME && !searchValue.isEmpty()) {
873
			fofoOrders = fofoOrderRepository.selectByFofoIdAndCustomerName(fofoId, searchValue, startDate,
866
			fofoOrders = fofoOrderRepository.selectByFofoIdAndCustomerName(fofoId, searchValue, startDate, endDate,
874
					endDate, offset, limit);
867
					offset, limit);
875
		} else if (searchType == SearchType.IMEI && !searchValue.isEmpty()) {
868
		} else if (searchType == SearchType.IMEI && !searchValue.isEmpty()) {
876
			fofoOrders = fofoOrderRepository.selectByFofoIdAndSerialNumber(fofoId, searchValue, startDate,
-
 
877
					endDate, offset, limit);
-
 
878
		} else if (searchType == SearchType.ITEM_NAME && !searchValue.isEmpty()) {
-
 
879
			fofoOrders = fofoOrderRepository.selectByFofoIdAndItemName(fofoId, searchValue, startDate, endDate,
869
			fofoOrders = fofoOrderRepository.selectByFofoIdAndSerialNumber(fofoId, searchValue, startDate, endDate,
880
					offset, limit);
870
					offset, limit);
-
 
871
		} else if (searchType == SearchType.ITEM_NAME && !searchValue.isEmpty()) {
-
 
872
			fofoOrders = fofoOrderRepository.selectByFofoIdAndItemName(fofoId, searchValue, startDate, endDate, offset,
-
 
873
					limit);
881
			
874
 
882
		}  else if (searchType == SearchType.DATE_RANGE){
875
		} else if (searchType == SearchType.DATE_RANGE) {
883
			fofoOrders = fofoOrderRepository.selectByFofoId(fofoId, startDate, endDate, offset, limit);
876
			fofoOrders = fofoOrderRepository.selectByFofoId(fofoId, startDate, endDate, offset, limit);
884
		}
877
		}
885
		Map<String, Object> map = new HashMap<>();
878
		Map<String, Object> map = new HashMap<>();
886
		map.put("saleHistories", fofoOrders);
879
		map.put("saleHistories", fofoOrders);
887
		map.put("searchType", searchType);
880
		map.put("searchType", searchType);
Line 1055... Line 1048...
1055
					invalidInsuranceSalePurchaseAmount);
1048
					invalidInsuranceSalePurchaseAmount);
1056
			throw new ProfitMandiBusinessException("invalidInsuranceSalePurchaseAmount",
1049
			throw new ProfitMandiBusinessException("invalidInsuranceSalePurchaseAmount",
1057
					invalidInsuranceSalePurchaseAmount, "FFORDR_1009");
1050
					invalidInsuranceSalePurchaseAmount, "FFORDR_1009");
1058
		}
1051
		}
1059
	}
1052
	}
-
 
1053
 
1060
	private void validateDpPrice(Map<Integer, PriceModel> itemIdMopPriceMap,
1054
	private void validateDpPrice(Map<Integer, PriceModel> itemIdMopPriceMap,
1061
			Map<Integer, CustomFofoOrderItem> itemIdCustomFofoLineItemMap) throws ProfitMandiBusinessException {
1055
			Map<Integer, CustomFofoOrderItem> itemIdCustomFofoLineItemMap) throws ProfitMandiBusinessException {
1062
		for (Map.Entry<Integer, CustomFofoOrderItem> entry : itemIdCustomFofoLineItemMap.entrySet()) {
1056
		for (Map.Entry<Integer, CustomFofoOrderItem> entry : itemIdCustomFofoLineItemMap.entrySet()) {
1063
			int itemId = entry.getKey();
1057
			int itemId = entry.getKey();
1064
			CustomFofoOrderItem customFofoOrderItem = entry.getValue();
1058
			CustomFofoOrderItem customFofoOrderItem = entry.getValue();
1065
			PriceModel priceModel = itemIdMopPriceMap.get(itemId);
1059
			PriceModel priceModel = itemIdMopPriceMap.get(itemId);
1066
			if(customFofoOrderItem.getSerialNumberDetails().size() > 0) {
1060
			if (customFofoOrderItem.getSerialNumberDetails().size() > 0) {
1067
				if(priceModel.getPrice() > customFofoOrderItem.getSellingPrice()) {
1061
				if (priceModel.getPrice() > customFofoOrderItem.getSellingPrice()) {
-
 
1062
					throw new ProfitMandiBusinessException("Selling Price",
1068
					throw new ProfitMandiBusinessException("Selling Price", itemRepository.selectById(itemId).getItemDescription(), "FFORDR_1010");
1063
							itemRepository.selectById(itemId).getItemDescription(), "FFORDR_1010");
1069
				}
1064
				}
1070
			} else {
1065
			} else {
1071
				if(priceModel.getPurchasePrice() > customFofoOrderItem.getSellingPrice()) {
1066
				if (priceModel.getPurchasePrice() > customFofoOrderItem.getSellingPrice()) {
-
 
1067
					throw new ProfitMandiBusinessException("Selling Price",
1072
					throw new ProfitMandiBusinessException("Selling Price", itemRepository.selectById(itemId).getItemDescription(), "Selling Price should not be less than DP");
1068
							itemRepository.selectById(itemId).getItemDescription(),
-
 
1069
							"Selling Price should not be less than DP");
1073
				}
1070
				}
1074
			}
1071
			}
1075
		}
1072
		}
1076
	}
1073
	}
-
 
1074
 
1077
	private void validateMopPrice(Map<Integer, PriceModel> itemIdMopPriceMap,
1075
	private void validateMopPrice(Map<Integer, PriceModel> itemIdMopPriceMap,
1078
			Map<Integer, CustomFofoOrderItem> itemIdCustomFofoLineItemMap) throws ProfitMandiBusinessException {
1076
			Map<Integer, CustomFofoOrderItem> itemIdCustomFofoLineItemMap) throws ProfitMandiBusinessException {
1079
		Map<Integer, Float> invalidMopItemIdPriceMap = new HashMap<>();
1077
		Map<Integer, Float> invalidMopItemIdPriceMap = new HashMap<>();
1080
		Map<Integer, Float> invalidDiscountAmountMap = new HashMap<>();
1078
		Map<Integer, Float> invalidDiscountAmountMap = new HashMap<>();
1081
		for (Map.Entry<Integer, PriceModel> entry : itemIdMopPriceMap.entrySet()) {
1079
		for (Map.Entry<Integer, PriceModel> entry : itemIdMopPriceMap.entrySet()) {
Line 1203... Line 1201...
1203
				paymentOptionTransactionRepository.persist(paymentOptionTransaction);
1201
				paymentOptionTransactionRepository.persist(paymentOptionTransaction);
1204
			}
1202
			}
1205
		}
1203
		}
1206
	}
1204
	}
1207
 
1205
 
1208
	private FofoOrder createAndGetFofoOrder(int customerId, String customerGstNumber, int fofoId,
1206
	private FofoOrder createAndGetFofoOrder(int customerId, String customerGstNumber, int fofoId, String documentNumber,
1209
			String documentNumber, float totalAmount, int customerAddressId) {
1207
			float totalAmount, int customerAddressId) {
1210
		FofoOrder fofoOrder = new FofoOrder();
1208
		FofoOrder fofoOrder = new FofoOrder();
1211
		fofoOrder.setCustomerGstNumber(customerGstNumber);
1209
		fofoOrder.setCustomerGstNumber(customerGstNumber);
1212
		fofoOrder.setCustomerId(customerId);
1210
		fofoOrder.setCustomerId(customerId);
1213
		fofoOrder.setFofoId(fofoId);
1211
		fofoOrder.setFofoId(fofoId);
1214
		fofoOrder.setInvoiceNumber(documentNumber);
1212
		fofoOrder.setInvoiceNumber(documentNumber);
Line 1455... Line 1453...
1455
		customerAddressRepository.persist(customerAddress);
1453
		customerAddressRepository.persist(customerAddress);
1456
		fofoOrder.setCustomerGstNumber(customCustomer.getGstNumber());
1454
		fofoOrder.setCustomerGstNumber(customCustomer.getGstNumber());
1457
	}
1455
	}
1458
 
1456
 
1459
	@Override
1457
	@Override
1460
	public CustomerCreditNote badReturn(int fofoId, FoiBadReturnRequest foiBadReturnRequest) throws ProfitMandiBusinessException {
1458
	public CustomerCreditNote badReturn(int fofoId, FoiBadReturnRequest foiBadReturnRequest)
-
 
1459
			throws ProfitMandiBusinessException {
1461
		FofoOrderItem foi = fofoOrderItemRepository.selectById(foiBadReturnRequest.getFofoOrderItemId());
1460
		FofoOrderItem foi = fofoOrderItemRepository.selectById(foiBadReturnRequest.getFofoOrderItemId());
1462
		FofoOrder fofoOrder = fofoOrderRepository.selectByOrderId(foi.getOrderId());
1461
		FofoOrder fofoOrder = fofoOrderRepository.selectByOrderId(foi.getOrderId());
1463
		if (fofoOrder.getFofoId() != fofoId) {
1462
		if (fofoOrder.getFofoId() != fofoId) {
1464
			throw new ProfitMandiBusinessException("Partner Auth", "", "Invalid Order");
1463
			throw new ProfitMandiBusinessException("Partner Auth", "", "Invalid Order");
1465
		}
1464
		}
1466
		int billedQty = foi.getQuantity() - customerReturnItemRepository.selectAllByOrderItemId(foi.getId()).size();
1465
		int billedQty = foi.getQuantity() - customerReturnItemRepository.selectAllByOrderItemId(foi.getId()).size();
1467
		if(foiBadReturnRequest.getMarkedBadArr().size() > billedQty ) {
1466
		if (foiBadReturnRequest.getMarkedBadArr().size() > billedQty) {
1468
			throw new ProfitMandiBusinessException("Cant bad return more than what is billed", "", "Invalid Quantity");
1467
			throw new ProfitMandiBusinessException("Cant bad return more than what is billed", "", "Invalid Quantity");
1469
		}
1468
		}
1470
		List<CustomerReturnItem> customerReturnItems = new ArrayList<>();
1469
		List<CustomerReturnItem> customerReturnItems = new ArrayList<>();
1471
		for (BadReturnRequest badReturnRequest : foiBadReturnRequest.getMarkedBadArr()) {
1470
		for (BadReturnRequest badReturnRequest : foiBadReturnRequest.getMarkedBadArr()) {
1472
			CustomerReturnItem customerReturnItem = new CustomerReturnItem();
1471
			CustomerReturnItem customerReturnItem = new CustomerReturnItem();
Line 1475... Line 1474...
1475
			customerReturnItem.setFofoOrderId(fofoOrder.getId());
1474
			customerReturnItem.setFofoOrderId(fofoOrder.getId());
1476
			customerReturnItem.setRemarks(badReturnRequest.getRemarks());
1475
			customerReturnItem.setRemarks(badReturnRequest.getRemarks());
1477
			customerReturnItem.setInventoryItemId(badReturnRequest.getInventoryItemId());
1476
			customerReturnItem.setInventoryItemId(badReturnRequest.getInventoryItemId());
1478
			customerReturnItem.setQuantity(1);
1477
			customerReturnItem.setQuantity(1);
1479
			customerReturnItem.setType(ReturnType.BAD);
1478
			customerReturnItem.setType(ReturnType.BAD);
1480
			//customerReturnItemRepository.persist(customerReturnItem);
1479
			// customerReturnItemRepository.persist(customerReturnItem);
1481
			inventoryService.saleReturnInventoryItem(customerReturnItem);
1480
			inventoryService.saleReturnInventoryItem(customerReturnItem);
1482
			customerReturnItems.add(customerReturnItem);
1481
			customerReturnItems.add(customerReturnItem);
1483
		}
1482
		}
1484
		CustomerCreditNote creditNote = generateCreditNote(fofoOrder, customerReturnItems);
1483
		CustomerCreditNote creditNote = generateCreditNote(fofoOrder, customerReturnItems);
1485
		for (CustomerReturnItem customerReturnItem: customerReturnItems) {
1484
		for (CustomerReturnItem customerReturnItem : customerReturnItems) {
1486
			purchaseReturnService.returnInventoryItem(fofoId, false, customerReturnItem.getInventoryItemId(), ReturnType.BAD);
1485
			purchaseReturnService.returnInventoryItem(fofoId, false, customerReturnItem.getInventoryItemId(),
-
 
1486
					ReturnType.BAD);
1487
		}
1487
		}
1488
        return creditNote;
1488
		return creditNote;
1489
	}
1489
	}
1490
 
1490
 
1491
	private CustomerCreditNote generateCreditNote(FofoOrder fofoOrder, List<CustomerReturnItem> customerReturnItems) throws ProfitMandiBusinessException {
1491
	private CustomerCreditNote generateCreditNote(FofoOrder fofoOrder, List<CustomerReturnItem> customerReturnItems)
-
 
1492
			throws ProfitMandiBusinessException {
1492
 
1493
 
1493
		InvoiceNumberGenerationSequence sequence = invoiceNumberGenerationSequenceRepository
1494
		InvoiceNumberGenerationSequence sequence = invoiceNumberGenerationSequenceRepository
1494
				.selectByFofoId(fofoOrder.getFofoId());
1495
				.selectByFofoId(fofoOrder.getFofoId());
1495
		sequence.setCreditNoteSequence(sequence.getCreditNoteSequence() + 1);
1496
		sequence.setCreditNoteSequence(sequence.getCreditNoteSequence() + 1);
1496
		invoiceNumberGenerationSequenceRepository.persist(sequence);
1497
		invoiceNumberGenerationSequenceRepository.persist(sequence);
1497
		
1498
 
1498
		String creditNoteNumber = sequence.getPrefix() + "/" + sequence.getCreditNoteSequence();
1499
		String creditNoteNumber = sequence.getPrefix() + "/" + sequence.getCreditNoteSequence();
1499
		CustomerCreditNote creditNote = new CustomerCreditNote();
1500
		CustomerCreditNote creditNote = new CustomerCreditNote();
1500
		creditNote.setCreditNoteNumber(creditNoteNumber);
1501
		creditNote.setCreditNoteNumber(creditNoteNumber);
1501
		creditNote.setFofoId(fofoOrder.getFofoId());
1502
		creditNote.setFofoId(fofoOrder.getFofoId());
1502
		creditNote.setFofoOrderId(fofoOrder.getId());
1503
		creditNote.setFofoOrderId(fofoOrder.getId());
1503
		creditNote.setFofoOrderItemId(customerReturnItems.get(0).getFofoOrderItemId());
1504
		creditNote.setFofoOrderItemId(customerReturnItems.get(0).getFofoOrderItemId());
1504
		creditNote.setSettlementType(SettlementType.UNSETTLED);
1505
		creditNote.setSettlementType(SettlementType.UNSETTLED);
1505
		customerCreditNoteRepository.persist(creditNote);
1506
		customerCreditNoteRepository.persist(creditNote);
1506
		
1507
 
1507
		for (CustomerReturnItem customerReturnItem : customerReturnItems) {
1508
		for (CustomerReturnItem customerReturnItem : customerReturnItems) {
1508
			customerReturnItem.setCreditNoteId(creditNote.getId());
1509
			customerReturnItem.setCreditNoteId(creditNote.getId());
1509
			customerReturnItemRepository.persist(customerReturnItem);
1510
			customerReturnItemRepository.persist(customerReturnItem);
1510
		}
1511
		}
1511
		//this.returnInventoryItems(inventoryItems, debitNote);
1512
		// this.returnInventoryItems(inventoryItems, debitNote);
1512
 
1513
 
1513
		return creditNote;
1514
		return creditNote;
1514
	}
1515
	}
1515
	
1516
 
1516
	@Override
1517
	@Override
1517
	public CreditNotePdfModel getCreditNotePdfModel(int customerCreditNoteId) throws ProfitMandiBusinessException {
1518
	public CreditNotePdfModel getCreditNotePdfModel(int customerCreditNoteId) throws ProfitMandiBusinessException {
1518
		CustomerCreditNote creditNote = customerCreditNoteRepository.selectById(customerCreditNoteId);
1519
		CustomerCreditNote creditNote = customerCreditNoteRepository.selectById(customerCreditNoteId);
1519
		return getCreditNotePdfModel(creditNote);
1520
		return getCreditNotePdfModel(creditNote);
1520
	}
1521
	}
1521
	
1522
 
1522
	private CreditNotePdfModel getCreditNotePdfModel(CustomerCreditNote creditNote) throws ProfitMandiBusinessException {
1523
	private CreditNotePdfModel getCreditNotePdfModel(CustomerCreditNote creditNote)
-
 
1524
			throws ProfitMandiBusinessException {
1523
		FofoOrder fofoOrder = fofoOrderRepository.selectByOrderId(creditNote.getFofoOrderId());
1525
		FofoOrder fofoOrder = fofoOrderRepository.selectByOrderId(creditNote.getFofoOrderId());
1524
		List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository.selectAllByCreditNoteId(creditNote.getId());
1526
		List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository
-
 
1527
				.selectAllByCreditNoteId(creditNote.getId());
1525
		CustomCustomer customCustomer = getCustomCustomer(fofoOrder);
1528
		CustomCustomer customCustomer = getCustomCustomer(fofoOrder);
1526
		
1529
 
1527
		Set<CustomOrderItem> customerFofoOrderItems = new HashSet<>();
1530
		Set<CustomOrderItem> customerFofoOrderItems = new HashSet<>();
1528
		CustomRetailer customRetailer = retailerService.getFofoRetailers(Arrays.asList(fofoOrder.getFofoId())).get(fofoOrder.getFofoId());
1531
		CustomRetailer customRetailer = retailerService.getFofoRetailers(Arrays.asList(fofoOrder.getFofoId()))
-
 
1532
				.get(fofoOrder.getFofoId());
1529
 
1533
 
1530
		FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectById(creditNote.getFofoOrderItemId());
1534
		FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectById(creditNote.getFofoOrderItemId());
1531
		float totalTaxRate = fofoOrderItem.getIgstRate() + fofoOrderItem.getSgstRate() + fofoOrderItem.getCgstRate();
1535
		float totalTaxRate = fofoOrderItem.getIgstRate() + fofoOrderItem.getSgstRate() + fofoOrderItem.getCgstRate();
1532
		float taxableSellingPrice = fofoOrderItem.getSellingPrice() / (1 + totalTaxRate / 100);
1536
		float taxableSellingPrice = fofoOrderItem.getSellingPrice() / (1 + totalTaxRate / 100);
1533
		float taxableDiscountPrice = fofoOrderItem.getDiscount() / (1 + totalTaxRate / 100);
1537
		float taxableDiscountPrice = fofoOrderItem.getDiscount() / (1 + totalTaxRate / 100);
1534
 
1538
 
1535
		CustomOrderItem customFofoOrderItem = new CustomOrderItem();
1539
		CustomOrderItem customFofoOrderItem = new CustomOrderItem();
1536
		customFofoOrderItem.setAmount(customerReturnItems.size() * (taxableSellingPrice - taxableDiscountPrice));
1540
		customFofoOrderItem.setAmount(customerReturnItems.size() * (taxableSellingPrice - taxableDiscountPrice));
1537
		customFofoOrderItem.setDescription(fofoOrderItem.getBrand() + " " + fofoOrderItem.getModelName() + " "
1541
		customFofoOrderItem.setDescription(fofoOrderItem.getBrand() + " " + fofoOrderItem.getModelName() + " "
1538
				+ fofoOrderItem.getModelNumber() + "-" + fofoOrderItem.getColor());
1542
				+ fofoOrderItem.getModelNumber() + "-" + fofoOrderItem.getColor());
1539
		
1543
 
1540
		if(ItemType.SERIALIZED.equals(itemRepository.selectById(fofoOrderItem.getItemId()).getType())){
1544
		if (ItemType.SERIALIZED.equals(itemRepository.selectById(fofoOrderItem.getItemId()).getType())) {
1541
			Set<Integer> inventoryItemIds = customerReturnItems.stream().map(x -> x.getInventoryItemId())
1545
			Set<Integer> inventoryItemIds = customerReturnItems.stream().map(x -> x.getInventoryItemId())
1542
					.collect(Collectors.toSet());
1546
					.collect(Collectors.toSet());
1543
			List<String> serialNumbers = inventoryItemRepository.selectByIds(inventoryItemIds).stream()
1547
			List<String> serialNumbers = inventoryItemRepository.selectByIds(inventoryItemIds).stream()
1544
					.map(x -> x.getSerialNumber()).collect(Collectors.toList());
1548
					.map(x -> x.getSerialNumber()).collect(Collectors.toList());
1545
			customFofoOrderItem.setDescription(
1549
			customFofoOrderItem.setDescription(
1546
					customFofoOrderItem.getDescription() + "\n IMEIS - " + String.join(", ", serialNumbers));
1550
					customFofoOrderItem.getDescription() + "\n IMEIS - " + String.join(", ", serialNumbers));
1547
		}
1551
		}
1548
		
1552
 
1549
		customFofoOrderItem.setRate(taxableSellingPrice);
1553
		customFofoOrderItem.setRate(taxableSellingPrice);
1550
		customFofoOrderItem.setDiscount(taxableDiscountPrice);
1554
		customFofoOrderItem.setDiscount(taxableDiscountPrice);
1551
		customFofoOrderItem.setQuantity(customerReturnItems.size());
1555
		customFofoOrderItem.setQuantity(customerReturnItems.size());
-
 
1556
		customFofoOrderItem.setNetAmount(
1552
		customFofoOrderItem.setNetAmount((fofoOrderItem.getSellingPrice() - fofoOrderItem.getDiscount()) * customFofoOrderItem.getQuantity());
1557
				(fofoOrderItem.getSellingPrice() - fofoOrderItem.getDiscount()) * customFofoOrderItem.getQuantity());
1553
 
1558
 
1554
		float igstAmount = (customFofoOrderItem.getAmount() * fofoOrderItem.getIgstRate()) / 100;
1559
		float igstAmount = (customFofoOrderItem.getAmount() * fofoOrderItem.getIgstRate()) / 100;
1555
		float cgstAmount = (customFofoOrderItem.getAmount() * fofoOrderItem.getCgstRate()) / 100;
1560
		float cgstAmount = (customFofoOrderItem.getAmount() * fofoOrderItem.getCgstRate()) / 100;
1556
		float sgstAmount = (customFofoOrderItem.getAmount() * fofoOrderItem.getSgstRate()) / 100;
1561
		float sgstAmount = (customFofoOrderItem.getAmount() * fofoOrderItem.getSgstRate()) / 100;
1557
		LOGGER.info("fofoOrderItem - {}", fofoOrderItem);
1562
		LOGGER.info("fofoOrderItem - {}", fofoOrderItem);
Line 1562... Line 1567...
1562
		customFofoOrderItem.setSgstRate(fofoOrderItem.getSgstRate());
1567
		customFofoOrderItem.setSgstRate(fofoOrderItem.getSgstRate());
1563
		customFofoOrderItem.setSgstAmount(sgstAmount);
1568
		customFofoOrderItem.setSgstAmount(sgstAmount);
1564
		customFofoOrderItem.setHsnCode(fofoOrderItem.getHsnCode());
1569
		customFofoOrderItem.setHsnCode(fofoOrderItem.getHsnCode());
1565
		customFofoOrderItem.setOrderId(1);
1570
		customFofoOrderItem.setOrderId(1);
1566
		customerFofoOrderItems.add(customFofoOrderItem);
1571
		customerFofoOrderItems.add(customFofoOrderItem);
1567
		
1572
 
1568
		PdfModel pdfModel = new PdfModel();
1573
		PdfModel pdfModel = new PdfModel();
1569
		pdfModel.setAuther("NSSPL");
1574
		pdfModel.setAuther("NSSPL");
1570
		pdfModel.setCustomer(customCustomer);
1575
		pdfModel.setCustomer(customCustomer);
1571
		pdfModel.setInvoiceNumber(fofoOrder.getInvoiceNumber());
1576
		pdfModel.setInvoiceNumber(fofoOrder.getInvoiceNumber());
1572
		pdfModel.setInvoiceDate(FormattingUtils.formatDate(fofoOrder.getCreateTimestamp()));
1577
		pdfModel.setInvoiceDate(FormattingUtils.formatDate(fofoOrder.getCreateTimestamp()));
1573
		pdfModel.setTitle("Credit Note");
1578
		pdfModel.setTitle("Credit Note");
1574
		pdfModel.setRetailer(customRetailer);
1579
		pdfModel.setRetailer(customRetailer);
1575
		pdfModel.setTotalAmount(customFofoOrderItem.getNetAmount());
1580
		pdfModel.setTotalAmount(customFofoOrderItem.getNetAmount());
1576
		pdfModel.setOrderItems(customerFofoOrderItems);
1581
		pdfModel.setOrderItems(customerFofoOrderItems);
1577
		
1582
 
1578
		CreditNotePdfModel creditNotePdfModel = new CreditNotePdfModel();
1583
		CreditNotePdfModel creditNotePdfModel = new CreditNotePdfModel();
1579
		creditNotePdfModel.setCreditNoteDate(FormattingUtils.formatDate(creditNote.getCreateTimestamp()));
1584
		creditNotePdfModel.setCreditNoteDate(FormattingUtils.formatDate(creditNote.getCreateTimestamp()));
1580
		creditNotePdfModel.setCreditNoteNumber(creditNote.getCreditNoteNumber());
1585
		creditNotePdfModel.setCreditNoteNumber(creditNote.getCreditNoteNumber());
1581
		creditNotePdfModel.setPdfModel(pdfModel);
1586
		creditNotePdfModel.setPdfModel(pdfModel);
1582
		return creditNotePdfModel;
1587
		return creditNotePdfModel;
1583
	}
1588
	}
1584
 
1589
 
1585
 
-
 
1586
	//This will remove the order and maintain order record and reverse inventory and scheme
1590
	// This will remove the order and maintain order record and reverse inventory
-
 
1591
	// and scheme
1587
	@Override
1592
	@Override
1588
	public void cancelOrder(List<String> invoiceNumbers) throws Exception {
1593
	public void cancelOrder(List<String> invoiceNumbers) throws Exception {
1589
		for(String invoiceNumber : invoiceNumbers) {
1594
		for (String invoiceNumber : invoiceNumbers) {
1590
			FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
1595
			FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
1591
			fofoOrder.setCancelledTimestamp(LocalDateTime.now());
1596
			fofoOrder.setCancelledTimestamp(LocalDateTime.now());
1592
			fofoOrderRepository.persist(fofoOrder);
1597
			fofoOrderRepository.persist(fofoOrder);
1593
			List<PaymentOptionTransaction> paymentTransactions = paymentOptionTransactionRepository.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
1598
			List<PaymentOptionTransaction> paymentTransactions = paymentOptionTransactionRepository
-
 
1599
					.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
1594
			for (PaymentOptionTransaction paymentOptionTransaction : paymentTransactions) {
1600
			for (PaymentOptionTransaction paymentOptionTransaction : paymentTransactions) {
1595
				paymentOptionTransactionRepository.delete(paymentOptionTransaction);
1601
				paymentOptionTransactionRepository.delete(paymentOptionTransaction);
1596
			}
1602
			}
1597
			List<FofoOrderItem> fois = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
1603
			List<FofoOrderItem> fois = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
1598
			List<InventoryItem> inventoryItems = new ArrayList<>();
1604
			List<InventoryItem> inventoryItems = new ArrayList<>();
1599
			fois.stream().forEach(x->{
1605
			fois.stream().forEach(x -> {
1600
				x.getFofoLineItems().stream().forEach(y->{
1606
				x.getFofoLineItems().stream().forEach(y -> {
1601
					inventoryService.rollbackInventory(y.getInventoryItemId(), y.getQuantity(), fofoOrder.getFofoId());
1607
					inventoryService.rollbackInventory(y.getInventoryItemId(), y.getQuantity(), fofoOrder.getFofoId());
1602
					inventoryItems.add(inventoryItemRepository.selectById(y.getInventoryItemId()));
1608
					inventoryItems.add(inventoryItemRepository.selectById(y.getInventoryItemId()));
1603
				});
1609
				});
1604
			});
1610
			});
1605
			String reversalReason = "Order Rolledback/Cancelled for Invoice Number " + invoiceNumber;
1611
			String reversalReason = "Order Rolledback/Cancelled for Invoice Number " + invoiceNumber;
1606
			schemeService.reverseSchemes(inventoryItems, fofoOrder.getId(), reversalReason, SchemeType.OUT);
1612
			schemeService.reverseSchemes(inventoryItems, fofoOrder.getId(), reversalReason, SchemeType.OUT);
1607
		}
1613
		}
1608
	}
1614
	}
1609
 
1615
 
1610
 
-
 
1611
	@Override
1616
	@Override
1612
	public float getSales(int fofoId, LocalDateTime startDate, LocalDateTime endDate) {
1617
	public float getSales(int fofoId, LocalDateTime startDate, LocalDateTime endDate) {
1613
		// TODO Auto-generated method stub
1618
		// TODO Auto-generated method stub
1614
		return 0;
1619
		return 0;
1615
	}
1620
	}
1616
 
1621
 
1617
 
-
 
1618
	@Override
1622
	@Override
1619
	public float getSales(int fofoId, LocalDate onDate) {
1623
	public float getSales(int fofoId, LocalDate onDate) {
1620
		return fofoOrderRepository.selectSaleSumGroupByFofoIds(LocalDateTime.of(onDate, LocalTime.MIDNIGHT), 
1624
		LocalDateTime startTime = LocalDateTime.of(onDate, LocalTime.MIDNIGHT).minusDays(1);
1621
				LocalDateTime.of(onDate.plusDays(1), LocalTime.MIDNIGHT)).get(fofoId);
1625
		LocalDateTime endTime = LocalDateTime.of(onDate, LocalTime.MIDNIGHT);
-
 
1626
		Float sales = fofoOrderRepository.selectSaleSumGroupByFofoIds(startTime, endTime).get(fofoId);
-
 
1627
		return sales == null ? 0f : sales;
1622
	}
1628
	}
1623
 
1629
 
1624
 
-
 
1625
	@Override
1630
	@Override
1626
	public float getSales(LocalDateTime onDate) {
1631
	public float getSales(LocalDateTime onDate) {
1627
		// TODO Auto-generated method stub
1632
		// TODO Auto-generated method stub
1628
		return 0;
1633
		return 0;
1629
	}
1634
	}
1630
 
1635
 
1631
 
-
 
1632
	@Override
1636
	@Override
1633
	public float getSales(LocalDateTime startDate, LocalDateTime endDate) {
1637
	public float getSales(LocalDateTime startDate, LocalDateTime endDate) {
1634
		// TODO Auto-generated method stub
1638
		// TODO Auto-generated method stub
1635
		return 0;
1639
		return 0;
1636
	}
1640
	}