| 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 |
}
|