Subversion Repositories SmartDukaan

Rev

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

Rev 24460 Rev 24562
Line 9... Line 9...
9
import java.util.Set;
9
import java.util.Set;
10
import java.util.stream.Collectors;
10
import java.util.stream.Collectors;
11
 
11
 
12
import org.apache.logging.log4j.LogManager;
12
import org.apache.logging.log4j.LogManager;
13
import org.apache.logging.log4j.Logger;
13
import org.apache.logging.log4j.Logger;
-
 
14
import org.hibernate.loader.plan.exec.process.internal.CollectionReturnReader;
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.beans.factory.annotation.Qualifier;
16
import org.springframework.beans.factory.annotation.Qualifier;
16
import org.springframework.stereotype.Component;
17
import org.springframework.stereotype.Component;
17
 
18
 
18
import com.spice.profitmandi.common.enumuration.ItemType;
19
import com.spice.profitmandi.common.enumuration.ItemType;
Line 71... Line 72...
71
	@Autowired
72
	@Autowired
72
	private RoleManager roleManager;
73
	private RoleManager roleManager;
73
 
74
 
74
	@Autowired
75
	@Autowired
75
	private RetailerRepository retailerRepository;
76
	private RetailerRepository retailerRepository;
76
	
77
 
77
	@Autowired
78
	@Autowired
78
	private TagListingRepository tagListingRepository;
79
	private TagListingRepository tagListingRepository;
79
 
80
 
80
	@Autowired
81
	@Autowired
81
	private RetailerSchemeRepository retailerSchemeRepository;
82
	private RetailerSchemeRepository retailerSchemeRepository;
Line 353... Line 354...
353
			return;
354
			return;
354
		}
355
		}
355
		if (scheme.isRetailerAll()) {
356
		if (scheme.isRetailerAll()) {
356
			for (InventoryItem inventoryItem : completedInventoryItems) {
357
			for (InventoryItem inventoryItem : completedInventoryItems) {
357
				float cashback = this.createSchemeInOut(scheme, inventoryItem);
358
				float cashback = this.createSchemeInOut(scheme, inventoryItem);
-
 
359
				if (cashback > 0) {
358
				walletService.addAmountToWallet(inventoryItem.getFofoId(), inventoryItem.getPurchaseId(),
360
					walletService.addAmountToWallet(inventoryItem.getFofoId(), inventoryItem.getPurchaseId(),
359
						WalletReferenceType.SCHEME_IN,
361
							WalletReferenceType.SCHEME_IN,
360
						"Added SCHEME_IN for item " + itemStringMap.get(inventoryItem.getItemId())
362
							"Added SCHEME_IN for item " + itemStringMap.get(inventoryItem.getItemId())
361
								+ " against invoiceNumber " + inventoryItem.getPurchase().getPurchaseReference(),
363
									+ " against invoiceNumber " + inventoryItem.getPurchase().getPurchaseReference(),
362
						cashback);
364
							cashback);
-
 
365
				}
363
			}
366
			}
364
		} else {
367
		} else {
365
			List<Integer> retailerIds = retailerSchemeRepository.selectRetailerIdsBySchemeId(scheme.getId());
368
			List<Integer> retailerIds = retailerSchemeRepository.selectRetailerIdsBySchemeId(scheme.getId());
366
			for (InventoryItem inventoryItem : completedInventoryItems) {
369
			for (InventoryItem inventoryItem : completedInventoryItems) {
367
				if (retailerIds.contains(inventoryItem.getFofoId())) {
370
				if (retailerIds.contains(inventoryItem.getFofoId())) {
368
					float cashback = this.createSchemeInOut(scheme, inventoryItem);
371
					float cashback = this.createSchemeInOut(scheme, inventoryItem);
-
 
372
					if (cashback > 0) {
369
					walletService.addAmountToWallet(inventoryItem.getFofoId(), inventoryItem.getPurchaseId(),
373
						walletService.addAmountToWallet(inventoryItem.getFofoId(), inventoryItem.getPurchaseId(),
370
							WalletReferenceType.SCHEME_IN,
374
								WalletReferenceType.SCHEME_IN,
371
							"Added SCHEME_IN for item " + itemStringMap.get(inventoryItem.getItemId())
375
								"Added SCHEME_IN for item " + itemStringMap.get(inventoryItem.getItemId())
-
 
376
										+ " against invoiceNumber "
372
									+ " against invoiceNumber " + inventoryItem.getPurchase().getPurchaseReference(),
377
										+ inventoryItem.getPurchase().getPurchaseReference(),
373
							cashback);
378
								cashback);
-
 
379
					}
374
				}
380
				}
375
			}
381
			}
376
		}
382
		}
377
 
383
 
378
	}
384
	}
Line 426... Line 432...
426
				itemIds, false);
432
				itemIds, false);
427
 
433
 
428
		if (scheme.isRetailerAll()) {
434
		if (scheme.isRetailerAll()) {
429
			for (InventoryItem inventoryItem : completedInventoryItems) {
435
			for (InventoryItem inventoryItem : completedInventoryItems) {
430
				float cashback = this.createSchemeInOut(scheme, inventoryItem);
436
				float cashback = this.createSchemeInOut(scheme, inventoryItem);
-
 
437
				if (cashback > 0) {
431
				walletService.addAmountToWallet(inventoryItem.getFofoId(), inventoryItem.getPurchaseId(),
438
					walletService.addAmountToWallet(inventoryItem.getFofoId(), inventoryItem.getPurchaseId(),
432
						WalletReferenceType.SCHEME_OUT, "Added for SCHEME_OUT", cashback);
439
							WalletReferenceType.SCHEME_OUT, "Added for SCHEME_OUT", cashback);
-
 
440
				}
433
			}
441
			}
434
		} else {
442
		} else {
435
			List<Integer> retailerIds = retailerSchemeRepository.selectRetailerIdsBySchemeId(scheme.getId());
443
			List<Integer> retailerIds = retailerSchemeRepository.selectRetailerIdsBySchemeId(scheme.getId());
436
			for (InventoryItem inventoryItem : completedInventoryItems) {
444
			for (InventoryItem inventoryItem : completedInventoryItems) {
437
				if (retailerIds.contains(inventoryItem.getFofoId())) {
445
				if (retailerIds.contains(inventoryItem.getFofoId())) {
438
					float cashback = this.createSchemeInOut(scheme, inventoryItem);
446
					float cashback = this.createSchemeInOut(scheme, inventoryItem);
-
 
447
					if (cashback > 0) {
439
					walletService.addAmountToWallet(inventoryItem.getFofoId(),
448
						walletService.addAmountToWallet(inventoryItem.getFofoId(),
440
							inventoryItemIdFofoOrderIdMap.get(inventoryItem.getId()), WalletReferenceType.SCHEME_OUT,
449
								inventoryItemIdFofoOrderIdMap.get(inventoryItem.getId()),
441
							"Added for SCHEME_OUT", cashback);
450
								WalletReferenceType.SCHEME_OUT, "Added for SCHEME_OUT", cashback);
-
 
451
					}
442
				}
452
				}
443
			}
453
			}
444
		}
454
		}
445
	}
455
	}
446
 
456
 
Line 672... Line 682...
672
			}
682
			}
673
		}
683
		}
674
	}
684
	}
675
 
685
 
676
	private float createSchemeInOut(Scheme scheme, InventoryItem inventoryItem) {
686
	private float createSchemeInOut(Scheme scheme, InventoryItem inventoryItem) {
677
		SchemeInOut schemeInOut = schemeInOutRepository.selectByScheme(scheme.getId(), inventoryItem.getId());
687
		List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectByScheme(scheme.getId(), inventoryItem.getId());
678
		float amount = 0;
688
		float amount = 0;
679
		if (schemeInOut == null || schemeInOut.getRolledBackTimestamp() != null) {
689
		if (schemeInOuts.stream().filter(x -> x.getRolledBackTimestamp() != null).collect(Collectors.toList())
-
 
690
				.size() == 0) {
680
			schemeInOut = new SchemeInOut();
691
			SchemeInOut schemeInOut = new SchemeInOut();
681
			amount = this.getAmount(inventoryItem, scheme);
692
			amount = this.getAmount(inventoryItem, scheme);
682
			schemeInOut.setSchemeId(scheme.getId());
693
			schemeInOut.setSchemeId(scheme.getId());
683
			schemeInOut.setInventoryItemId(inventoryItem.getId());
694
			schemeInOut.setInventoryItemId(inventoryItem.getId());
684
			schemeInOut.setAmount(amount);
695
			schemeInOut.setAmount(amount);
685
			schemeInOutRepository.persist(schemeInOut);
696
			schemeInOutRepository.persist(schemeInOut);
Line 689... Line 700...
689
 
700
 
690
	private float getAmount(InventoryItem inventoryItem, Scheme scheme) {
701
	private float getAmount(InventoryItem inventoryItem, Scheme scheme) {
691
		float amount = 0;
702
		float amount = 0;
692
		float totalTaxRate = inventoryItem.getIgstRate() + inventoryItem.getSgstRate() + inventoryItem.getCgstRate();
703
		float totalTaxRate = inventoryItem.getIgstRate() + inventoryItem.getSgstRate() + inventoryItem.getCgstRate();
693
		if (scheme.getAmountType() == AmountType.PERCENTAGE) {
704
		if (scheme.getAmountType() == AmountType.PERCENTAGE) {
694
			if(scheme.getType().equals(SchemeType.IN)) {
705
			if (scheme.getType().equals(SchemeType.IN)) {
695
				amount = inventoryItem.getUnitPrice() - inventoryItem.getPriceDropAmount();
706
				amount = inventoryItem.getUnitPrice() - inventoryItem.getPriceDropAmount();
696
			} else {
707
			} else {
697
				try {
708
				try {
698
					amount = tagListingRepository.selectByItemId(inventoryItem.getItemId()).getSellingPrice();
709
					amount = tagListingRepository.selectByItemId(inventoryItem.getItemId()).getSellingPrice();
699
				} catch(Exception e) {
710
				} catch (Exception e) {
700
					LOGGER.info("Could not find tag Listing entry in {}", inventoryItem.getItemId());
711
					LOGGER.info("Could not find tag Listing entry in {}", inventoryItem.getItemId());
701
					e.printStackTrace();
712
					e.printStackTrace();
702
				}
713
				}
703
			}
714
			}
704
			float taxableSellingPrice = amount / (1 + totalTaxRate / 100);
715
			float taxableSellingPrice = amount / (1 + totalTaxRate / 100);
Line 895... Line 906...
895
			InventoryItem ii = inventoryItemsMap.get(schemeInOut.getInventoryItemId());
906
			InventoryItem ii = inventoryItemsMap.get(schemeInOut.getInventoryItemId());
896
			Scheme scheme = schemesMap.get(schemeInOut.getSchemeId());
907
			Scheme scheme = schemesMap.get(schemeInOut.getSchemeId());
897
			if (scheme.getAmountType().equals(AmountType.FIXED)) {
908
			if (scheme.getAmountType().equals(AmountType.FIXED)) {
898
				continue;
909
				continue;
899
			}
910
			}
900
			if(schemeInOut.getRolledBackTimestamp() == null) {
911
			if (schemeInOut.getRolledBackTimestamp() == null) {
901
				float newAmount = getAmount(ii, scheme);
912
				float newAmount = getAmount(ii, scheme);
902
				if(schemeInOut.getAmount() - newAmount >= 0.01f) {
913
				if (schemeInOut.getAmount() - newAmount >= 0.01f) {
903
					schemeInOut.setRolledBackTimestamp(LocalDateTime.now());
914
					schemeInOut.setRolledBackTimestamp(LocalDateTime.now());
904
					schemeInOutRepository.persist(schemeInOut);
915
					schemeInOutRepository.persist(schemeInOut);
905
					SchemeInOut sioNew = new SchemeInOut();
916
					SchemeInOut sioNew = new SchemeInOut();
906
					sioNew.setAmount(newAmount);
917
					sioNew.setAmount(newAmount);
907
					sioNew.setInventoryItemId(schemeInOut.getInventoryItemId());
918
					sioNew.setInventoryItemId(schemeInOut.getInventoryItemId());
908
					sioNew.setSchemeId(schemeInOut.getSchemeId());
919
					sioNew.setSchemeId(schemeInOut.getSchemeId());
909
					schemeInOutRepository.persist(sioNew);
920
					schemeInOutRepository.persist(sioNew);
910
					amountToCredit += sioNew.getAmount();
921
					amountToCredit += sioNew.getAmount();
911
					amountToDebit += schemeInOut.getAmount();
922
					amountToDebit += schemeInOut.getAmount();
912
				}
923
				}
913
				
924
 
914
			}
925
			}
915
		}
926
		}
916
		int fofoId = inventoryItems.get(0).getFofoId();
927
		int fofoId = inventoryItems.get(0).getFofoId();
917
		if (amountToDebit > 0) {
928
		if (amountToDebit > 0) {
918
			walletService.addAmountToWallet(fofoId, reversalReference, WalletReferenceType.PRICE_DROP, reversalReason,
929
			walletService.addAmountToWallet(fofoId, reversalReference, WalletReferenceType.PRICE_DROP, reversalReason,
919
					-amountToDebit);
930
					-amountToDebit);
920
		}
931
		}
921
		if (amountToCredit > 0) {
932
		if (amountToCredit > 0) {
922
		walletService.addAmountToWallet(fofoId, reversalReference, WalletReferenceType.PRICE_DROP, reversalReason,
933
			walletService.addAmountToWallet(fofoId, reversalReference, WalletReferenceType.PRICE_DROP, reversalReason,
923
				amountToCredit);
934
					amountToCredit);
924
		}
935
		}
925
	}
936
	}
-
 
937
 
926
	@Override
938
	@Override
927
	public void reverseSchemes(List<InventoryItem> inventoryItems, int reversalReference, String reversalReason, SchemeType schemeType) throws ProfitMandiBusinessException{
939
	public void reverseSchemes(List<InventoryItem> inventoryItems, int reversalReference, String reversalReason,
-
 
940
			SchemeType schemeType) throws ProfitMandiBusinessException {
928
		Map<Integer, InventoryItem> inventoryItemsMap = inventoryItems.stream()
941
		Map<Integer, InventoryItem> inventoryItemsMap = inventoryItems.stream()
929
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
942
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
930
		List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectByInventoryItemIds(inventoryItemsMap.keySet());
943
		List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectByInventoryItemIds(inventoryItemsMap.keySet());
931
		List<Integer> schemeIds = schemeInOuts.stream().map(x -> x.getSchemeId()).collect(Collectors.toList());
944
		List<Integer> schemeIds = schemeInOuts.stream().map(x -> x.getSchemeId()).collect(Collectors.toList());
932
		float amount = 0;
945
		float amount = 0;
933
		Map<Integer, Scheme> schemesMap = schemeRepository.selectBySchemeIds(schemeIds, 0, schemeIds.size()).stream()
946
		Map<Integer, Scheme> schemesMap = schemeRepository.selectBySchemeIds(schemeIds, 0, schemeIds.size()).stream()
934
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
947
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
935
		for (SchemeInOut schemeInOut : schemeInOuts) {
948
		for (SchemeInOut schemeInOut : schemeInOuts) {
936
			Scheme scheme = schemesMap.get(schemeInOut.getSchemeId());
949
			Scheme scheme = schemesMap.get(schemeInOut.getSchemeId());
937
			if(scheme.getType().equals(schemeType)) {
950
			if (scheme.getType().equals(schemeType)) {
938
				if(schemeInOut.getRolledBackTimestamp() == null) {
951
				if (schemeInOut.getRolledBackTimestamp() == null) {
939
					schemeInOut.setRolledBackTimestamp(LocalDateTime.now());
952
					schemeInOut.setRolledBackTimestamp(LocalDateTime.now());
940
					schemeInOutRepository.persist(schemeInOut);
953
					schemeInOutRepository.persist(schemeInOut);
941
					amount += schemeInOut.getAmount();
954
					amount += schemeInOut.getAmount();
942
				}
955
				}
943
			}
956
			}
944
		}
957
		}
945
		int fofoId = inventoryItems.get(0).getFofoId();
958
		int fofoId = inventoryItems.get(0).getFofoId();
946
		WalletReferenceType walletReferenceType = schemeType.equals(SchemeType.OUT)?WalletReferenceType.SCHEME_OUT:WalletReferenceType.SCHEME_IN;
959
		WalletReferenceType walletReferenceType = schemeType.equals(SchemeType.OUT) ? WalletReferenceType.SCHEME_OUT
-
 
960
				: WalletReferenceType.SCHEME_IN;
947
		if(amount > 0) {
961
		if (amount > 0) {
948
			walletService.rollbackAmountFromWallet(fofoId, amount, reversalReference, walletReferenceType, reversalReason);
962
			walletService.rollbackAmountFromWallet(fofoId, amount, reversalReference, walletReferenceType,
-
 
963
					reversalReason);
949
		}
964
		}
950
	}
965
	}
951
 
966
 
-
 
967
	@Override
-
 
968
	public void updateSchmesForModel(int catalogId) throws ProfitMandiBusinessException {
-
 
969
		List<Item> items = itemRepository.selectAllByCatalogItemId(catalogId);
-
 
970
		Map<Integer, Scheme> schemes = schemeRepository
-
 
971
				.selectAllByItemIds(items.stream().map(x -> x.getId()).collect(Collectors.toList()));
-
 
972
 
-
 
973
	}
-
 
974
 
952
}
975
}