| Line 379... |
Line 379... |
| 379 |
}
|
379 |
}
|
| 380 |
|
380 |
|
| 381 |
@Autowired
|
381 |
@Autowired
|
| 382 |
OfferTargetSlabRepository offerTargetSlabRepository;
|
382 |
OfferTargetSlabRepository offerTargetSlabRepository;
|
| 383 |
|
383 |
|
| 384 |
/*@Override
|
- |
|
| 385 |
public void processSchemeIn(int purchaseId, int retailerId) throws ProfitMandiBusinessException {
|
- |
|
| 386 |
LOGGER.info("Trying to process SchemeIn with purchaseId [{}] and retailerId [{}]", purchaseId, retailerId);
|
- |
|
| 387 |
Purchase purchase = purchaseRepository.selectByIdAndFofoId(purchaseId, retailerId);
|
- |
|
| 388 |
|
- |
|
| 389 |
|
- |
|
| 390 |
// TODO - SCHEME
|
- |
|
| 391 |
PartnerType partnerType = partnerTypeChangeService.getTypeOnMonth(retailerId,
|
- |
|
| 392 |
YearMonth.from(purchase.getCreateTimestamp()));
|
- |
|
| 393 |
// PartnerType partnerType = partnerTypeChangeService.getTypeOnDate(retailerId,
|
- |
|
| 394 |
// purchase.getCreateTimestamp().toLocalDate());
|
- |
|
| 395 |
|
- |
|
| 396 |
List<Scheme> schemes = schemeRepository.selectActiveAll(Arrays.asList(SchemeType.IN), partnerType,
|
- |
|
| 397 |
purchase.getCreateTimestamp().toLocalDate(), false);
|
- |
|
| 398 |
List<Integer> validSchemeIds = schemeRepository.selectSchemesByRetailerIdsSchemeIds(retailerId, schemes.stream().map(x -> x.getId()).collect(Collectors.toList()));
|
- |
|
| 399 |
schemes = schemes.stream().filter(x -> validSchemeIds.contains(x.getId())).collect(Collectors.toList());
|
- |
|
| 400 |
float totalCashback = 0;
|
- |
|
| 401 |
|
- |
|
| 402 |
if (schemes.isEmpty()) {
|
- |
|
| 403 |
return;
|
- |
|
| 404 |
}
|
- |
|
| 405 |
List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchaseId);
|
- |
|
| 406 |
//Remove imeis from blocked imeis list
|
- |
|
| 407 |
inventoryItems = inventoryItems.stream().filter(inventoryItem -> !BLOCKED_IMEIS.contains(inventoryItem.getSerialNumber())).collect(Collectors.toList());
|
- |
|
| 408 |
if (inventoryItems.size() == 0) return;
|
- |
|
| 409 |
Set<Integer> itemIds = inventoryItems.stream().map(x -> x.getItemId()).collect(Collectors.toSet());
|
- |
|
| 410 |
Map<Integer, Item> itemsMap = itemRepository.selectByIds(itemIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
|
- |
|
| 411 |
inventoryItems.stream().forEach(x -> x.setItem(itemsMap.get(x.getItemId())));
|
- |
|
| 412 |
|
- |
|
| 413 |
LocalDateTime billingDate = purchaseService.getBillingDateOfPurchase(purchaseId);
|
- |
|
| 414 |
Set<Integer> itemIdsSet = tagListingRepository.selectByItemIdsAndTagIds(itemIds, tagIds).stream()
|
- |
|
| 415 |
.filter(x -> x.getEolDate() == null || x.getEolDate().isAfter(billingDate)).map(x -> x.getItemId())
|
- |
|
| 416 |
.collect(Collectors.toSet());
|
- |
|
| 417 |
// Only consider inventory items that were not returned
|
- |
|
| 418 |
inventoryItems = inventoryItems.stream().filter(x -> itemIdsSet.contains(x.getItemId()))
|
- |
|
| 419 |
.filter(x -> !x.getLastScanType().equals(ScanType.PURCHASE_RET_BAD))
|
- |
|
| 420 |
.filter(x -> !x.getLastScanType().equals(ScanType.PURCHASE_RET)).collect(Collectors.toList());
|
- |
|
| 421 |
LOGGER.info(inventoryItems);
|
- |
|
| 422 |
if (inventoryItems.size() == 0)
|
- |
|
| 423 |
return;
|
- |
|
| 424 |
Map<InventoryItem, Set<Scheme>> inventoryItemSchemesMap = this.toInventoryItemSchemesMap(schemes,
|
- |
|
| 425 |
inventoryItems);
|
- |
|
| 426 |
|
- |
|
| 427 |
if (inventoryItemSchemesMap.isEmpty()) {
|
- |
|
| 428 |
return;
|
- |
|
| 429 |
}
|
- |
|
| 430 |
Map<InventoryItem, Set<Scheme>> allInventoryItemSchemesMap = new HashMap<>();
|
- |
|
| 431 |
|
- |
|
| 432 |
for (Map.Entry<InventoryItem, Set<Scheme>> inventoryItemSchemesEntry : inventoryItemSchemesMap.entrySet()) {
|
- |
|
| 433 |
Set<Scheme> allSchemes = new HashSet<>();
|
- |
|
| 434 |
for (Scheme scheme : inventoryItemSchemesEntry.getValue()) {
|
- |
|
| 435 |
allSchemes.add(scheme);
|
- |
|
| 436 |
}
|
- |
|
| 437 |
allInventoryItemSchemesMap.put(inventoryItemSchemesEntry.getKey(), allSchemes);
|
- |
|
| 438 |
}
|
- |
|
| 439 |
|
- |
|
| 440 |
//
|
- |
|
| 441 |
|
- |
|
| 442 |
int itemsCount = 0;
|
- |
|
| 443 |
for (Map.Entry<InventoryItem, Set<Scheme>> allInventoryItemSchemesEntry : allInventoryItemSchemesMap
|
- |
|
| 444 |
.entrySet()) {
|
- |
|
| 445 |
float inventoryItemCashback = 0;
|
- |
|
| 446 |
for (Scheme scheme : allInventoryItemSchemesEntry.getValue()) {
|
- |
|
| 447 |
InventoryItem inventoryItem = allInventoryItemSchemesEntry.getKey();
|
- |
|
| 448 |
float cashback = this.createSchemeInOut(null, inventoryItem, partnerType);
|
- |
|
| 449 |
inventoryItemCashback += cashback;
|
- |
|
| 450 |
}
|
- |
|
| 451 |
if (inventoryItemCashback > 0) {
|
- |
|
| 452 |
totalCashback += inventoryItemCashback;
|
- |
|
| 453 |
itemsCount++;
|
- |
|
| 454 |
}
|
- |
|
| 455 |
}
|
- |
|
| 456 |
|
- |
|
| 457 |
LOGGER.info("Items count for purchase id {} is {}", purchaseId, itemsCount);
|
- |
|
| 458 |
if (itemsCount > 0) {
|
- |
|
| 459 |
walletService.addAmountToWallet(
|
- |
|
| 460 |
retailerId, purchaseId, WalletReferenceType.SCHEME_IN, "Added for SCHEME IN against invoice "
|
- |
|
| 461 |
+ purchase.getPurchaseReference() + " (total " + itemsCount + " pcs)",
|
- |
|
| 462 |
totalCashback, purchase.getCreateTimestamp());
|
- |
|
| 463 |
LOGGER.info("Added Rs.{} for SCHEME IN against invoice {} total pcs({}) {}", totalCashback,
|
- |
|
| 464 |
purchase.getPurchaseReference(), itemsCount);
|
- |
|
| 465 |
purchase.setCashback(purchase.getCashback() + totalCashback);
|
- |
|
| 466 |
purchaseRepository.persist(purchase);
|
- |
|
| 467 |
}
|
- |
|
| 468 |
}*/
|
- |
|
| 469 |
|
- |
|
| 470 |
private Scheme toScheme(int creatorId, CreateSchemeRequest createSchemeRequest) {
|
384 |
private Scheme toScheme(int creatorId, CreateSchemeRequest createSchemeRequest) {
|
| 471 |
Scheme scheme = new Scheme();
|
385 |
Scheme scheme = new Scheme();
|
| 472 |
scheme.setName(createSchemeRequest.getName());
|
386 |
scheme.setName(createSchemeRequest.getName());
|
| 473 |
scheme.setDescription(createSchemeRequest.getDescription());
|
387 |
scheme.setDescription(createSchemeRequest.getDescription());
|
| 474 |
scheme.setType(createSchemeRequest.getType());
|
388 |
scheme.setType(createSchemeRequest.getType());
|
| Line 488... |
Line 402... |
| 488 |
OfferPayoutRepository offerPayoutRepository;
|
402 |
OfferPayoutRepository offerPayoutRepository;
|
| 489 |
@Autowired
|
403 |
@Autowired
|
| 490 |
AgeingService ageingService;
|
404 |
AgeingService ageingService;
|
| 491 |
|
405 |
|
| 492 |
public void processSchemeIn(int purchaseId, int retailerId) throws ProfitMandiBusinessException {
|
406 |
public void processSchemeIn(int purchaseId, int retailerId) throws ProfitMandiBusinessException {
|
| - |
|
407 |
LOGGER.info("Processing scheme in for purchaseId - {}", purchaseId);
|
| 493 |
Purchase purchase = purchaseRepository.selectByIdAndFofoId(purchaseId, retailerId);
|
408 |
Purchase purchase = purchaseRepository.selectByIdAndFofoId(purchaseId, retailerId);
|
| 494 |
PartnerType partnerType = partnerTypeChangeService.getTypeOnMonth(retailerId,
|
409 |
PartnerType partnerType = partnerTypeChangeService.getTypeOnMonth(retailerId,
|
| 495 |
YearMonth.from(purchase.getCreateTimestamp()));
|
410 |
YearMonth.from(purchase.getCreateTimestamp()));
|
| 496 |
List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchaseId);
|
411 |
List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchaseId);
|
| 497 |
//Remove imeis from blocked imeis list
|
412 |
//Remove imeis from blocked imeis list
|
| Line 764... |
Line 679... |
| 764 |
.filter(x -> x.getSerialNumber() != null && !x.getSerialNumber().equals(""))
|
679 |
.filter(x -> x.getSerialNumber() != null && !x.getSerialNumber().equals(""))
|
| 765 |
.collect(Collectors.toSet());
|
680 |
.collect(Collectors.toSet());
|
| 766 |
inventoryItems = inventoryItems.stream().filter(inventoryItem -> !BLOCKED_IMEIS.contains(inventoryItem.getSerialNumber())).collect(Collectors.toSet());
|
681 |
inventoryItems = inventoryItems.stream().filter(inventoryItem -> !BLOCKED_IMEIS.contains(inventoryItem.getSerialNumber())).collect(Collectors.toSet());
|
| 767 |
|
682 |
|
| 768 |
//Do not consider imei above 90 days for samsung
|
683 |
//Do not consider imei above 90 days for samsung
|
| 769 |
List<String> samsungSerialNumbers = inventoryItems.stream().filter(x->x.getItem().getBrand().equalsIgnoreCase("samsung")).map(x->x.getSerialNumber()).collect(Collectors.toList());
|
684 |
List<String> samsungSerialNumbers = inventoryItems.stream().filter(x -> x.getItem().getBrand().equalsIgnoreCase("samsung")).map(x -> x.getSerialNumber()).collect(Collectors.toList());
|
| 770 |
if(samsungSerialNumbers.size() > 0) {
|
685 |
if (samsungSerialNumbers.size() > 0) {
|
| 771 |
List<AgeingSummaryModel> billedImeiModels = warehouseInventoryItemRepository.findStockAgeingByFofoIdSerialNumbers(retailerId, samsungSerialNumbers);
|
686 |
List<AgeingSummaryModel> billedImeiModels = warehouseInventoryItemRepository.findStockAgeingByFofoIdSerialNumbers(retailerId, samsungSerialNumbers);
|
| 772 |
Set<String> agedSerialNumbers = billedImeiModels.stream().filter(x->x.isAgedAbove(300)).map(x->x.getSerialNumber()).collect(Collectors.toSet());
|
687 |
Set<String> agedSerialNumbers = billedImeiModels.stream().filter(x -> x.isAgedAbove(300)).map(x -> x.getSerialNumber()).collect(Collectors.toSet());
|
| 773 |
inventoryItems = inventoryItems.stream().filter(x->!agedSerialNumbers.contains(x.getSerialNumber())).collect(Collectors.toSet());
|
688 |
inventoryItems = inventoryItems.stream().filter(x -> !agedSerialNumbers.contains(x.getSerialNumber())).collect(Collectors.toSet());
|
| 774 |
}
|
689 |
}
|
| 775 |
|
690 |
|
| 776 |
if (inventoryItems.size() == 0) return 0;
|
691 |
if (inventoryItems.size() == 0) return 0;
|
| 777 |
|
692 |
|
| 778 |
Map<Integer, List<InventoryItem>> catalogInventoryItemMap = inventoryItems.stream().collect(Collectors.groupingBy(x -> x.getItem().getCatalogItemId()));
|
693 |
Map<Integer, List<InventoryItem>> catalogInventoryItemMap = inventoryItems.stream().collect(Collectors.groupingBy(x -> x.getItem().getCatalogItemId()));
|
| Line 922... |
Line 837... |
| 922 |
Scheme scheme = schemesMap.get(schemeInOut.getSchemeId());
|
837 |
Scheme scheme = schemesMap.get(schemeInOut.getSchemeId());
|
| 923 |
if (scheme.getAmountType().equals(AmountType.FIXED)) {
|
838 |
if (scheme.getAmountType().equals(AmountType.FIXED)) {
|
| 924 |
continue;
|
839 |
continue;
|
| 925 |
}
|
840 |
}
|
| 926 |
if (scheme.getType().equals(SchemeType.IN) && schemeInOut.getRolledBackTimestamp() == null) {
|
841 |
if (scheme.getType().equals(SchemeType.IN) && schemeInOut.getRolledBackTimestamp() == null) {
|
| 927 |
float newAmount = getAmount(ii, scheme);
|
- |
|
| 928 |
if (Math.abs(schemeInOut.getAmount() - newAmount) >= 0.01f) {
|
- |
|
| 929 |
schemeInOut.setRolledBackTimestamp(LocalDateTime.now());
|
842 |
schemeInOut.setRolledBackTimestamp(LocalDateTime.now());
|
| 930 |
|
- |
|
| 931 |
SchemeInOut sioNew = new SchemeInOut();
|
- |
|
| 932 |
sioNew.setAmount(newAmount);
|
- |
|
| 933 |
sioNew.setStatus(schemeInOut.getStatus());
|
- |
|
| 934 |
sioNew.setStatusDescription(schemeInOut.getStatusDescription());
|
- |
|
| 935 |
sioNew.setInventoryItemId(schemeInOut.getInventoryItemId());
|
- |
|
| 936 |
sioNew.setSchemeId(schemeInOut.getSchemeId());
|
- |
|
| 937 |
sioNew.setCreditTimestamp(LocalDateTime.now());
|
- |
|
| 938 |
schemeInOutRepository.persist(sioNew);
|
- |
|
| 939 |
|
- |
|
| 940 |
schemeInOut.setStatus(SchemePayoutStatus.REJECTED);
|
843 |
schemeInOut.setStatus(SchemePayoutStatus.REJECTED);
|
| 941 |
schemeInOut.setStatusDescription("Change in margins due to price drop");
|
844 |
schemeInOut.setStatusDescription("Margin reversed due to price drop");
|
| 942 |
// IF not credited then dont consider any credit/debit for that sio entry
|
845 |
// IF not credited then dont consider any credit/debit for that sio entry
|
| 943 |
if (schemeInOut.getCreditTimestamp() != null) {
|
846 |
if (schemeInOut.getCreditTimestamp() != null) {
|
| 944 |
amountToCredit += sioNew.getAmount();
|
- |
|
| 945 |
amountToDebit += schemeInOut.getAmount();
|
847 |
amountToDebit += schemeInOut.getAmount();
|
| 946 |
}
|
- |
|
| 947 |
}
|
848 |
}
|
| 948 |
|
- |
|
| 949 |
}
|
849 |
}
|
| 950 |
}
|
850 |
}
|
| 951 |
int fofoId = inventoryItems.get(0).getFofoId();
|
851 |
int fofoId = inventoryItems.get(0).getFofoId();
|
| 952 |
if (amountToDebit > 0) {
|
852 |
if (amountToDebit > 0) {
|
| 953 |
walletService.addAmountToWallet(fofoId, purchaseId, WalletReferenceType.SCHEME_IN,
|
853 |
walletService.addAmountToWallet(fofoId, purchaseId, WalletReferenceType.SCHEME_IN,
|
| 954 |
MessageFormat.format(reversalReason, purchaseInventoryItemList.size()), -amountToDebit,
|
854 |
MessageFormat.format(reversalReason, purchaseInventoryItemList.size()), -amountToDebit,
|
| 955 |
priceDrop.getAffectedOn());
|
855 |
priceDrop.getAffectedOn());
|
| 956 |
}
|
856 |
}
|
| 957 |
if (amountToCredit > 0) {
|
- |
|
| 958 |
walletService.addAmountToWallet(fofoId, purchaseId, WalletReferenceType.SCHEME_IN,
|
- |
|
| 959 |
MessageFormat.format(reversalReason, purchaseInventoryItemList.size()), amountToCredit,
|
- |
|
| 960 |
priceDrop.getAffectedOn());
|
- |
|
| 961 |
}
|
- |
|
| 962 |
}
|
857 |
}
|
| 963 |
}
|
858 |
}
|
| 964 |
|
859 |
|
| 965 |
@Autowired
|
860 |
@Autowired
|
| 966 |
UserWalletRepository userWalletRepository;
|
861 |
UserWalletRepository userWalletRepository;
|
| Line 1106... |
Line 1001... |
| 1106 |
typedQuery.setMaxResults(limit);
|
1001 |
typedQuery.setMaxResults(limit);
|
| 1107 |
}
|
1002 |
}
|
| 1108 |
return typedQuery.getResultList();
|
1003 |
return typedQuery.getResultList();
|
| 1109 |
}
|
1004 |
}
|
| 1110 |
|
1005 |
|
| - |
|
1006 |
@Override
|
| - |
|
1007 |
public void processSchemeIn(List<InventoryItem> inventoryItems) throws ProfitMandiBusinessException {
|
| - |
|
1008 |
Map<Integer, List<InventoryItem>> purchaseIdInventoryItemsMap = inventoryItems.stream().collect(Collectors.groupingBy(x -> x.getPurchaseId()));
|
| - |
|
1009 |
for (Map.Entry<Integer, List<InventoryItem>> purchaseIdInventoryItemEntry : purchaseIdInventoryItemsMap.entrySet()) {
|
| - |
|
1010 |
int retailerId = purchaseIdInventoryItemEntry.getValue().get(0).getFofoId();
|
| - |
|
1011 |
this.processSchemeIn(purchaseIdInventoryItemEntry.getKey(), retailerId);
|
| - |
|
1012 |
}
|
| - |
|
1013 |
}
|
| - |
|
1014 |
|
| 1111 |
@Autowired
|
1015 |
@Autowired
|
| 1112 |
FofoStoreRepository fofoStoreRepository;
|
1016 |
FofoStoreRepository fofoStoreRepository;
|
| 1113 |
|
1017 |
|
| 1114 |
|
1018 |
|
| 1115 |
@Override
|
1019 |
@Override
|