| Line 409... |
Line 409... |
| 409 |
@Autowired
|
409 |
@Autowired
|
| 410 |
OfferPayoutRepository offerPayoutRepository;
|
410 |
OfferPayoutRepository offerPayoutRepository;
|
| 411 |
@Autowired
|
411 |
@Autowired
|
| 412 |
AgeingService ageingService;
|
412 |
AgeingService ageingService;
|
| 413 |
|
413 |
|
| - |
|
414 |
|
| 414 |
public void processSchemeIn(int purchaseId, int retailerId) throws ProfitMandiBusinessException {
|
415 |
public void processSchemeIn(int purchaseId, int retailerId) throws ProfitMandiBusinessException {
|
| 415 |
LOGGER.info("Processing scheme in for purchaseId - {}", purchaseId);
|
416 |
LOGGER.info("Processing scheme in for purchaseId - {}", purchaseId);
|
| 416 |
Purchase purchase = purchaseRepository.selectByIdAndFofoId(purchaseId, retailerId);
|
417 |
Purchase purchase = purchaseRepository.selectByIdAndFofoId(purchaseId, retailerId);
|
| 417 |
PartnerType partnerType = partnerTypeChangeService.getTypeOnMonth(retailerId,
|
- |
|
| 418 |
YearMonth.from(purchase.getCreateTimestamp()));
|
- |
|
| 419 |
List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchaseId);
|
418 |
List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchaseId);
|
| - |
|
419 |
processSchemeIn(purchase, inventoryItems);
|
| - |
|
420 |
|
| - |
|
421 |
}
|
| - |
|
422 |
|
| - |
|
423 |
private void processSchemeIn(Purchase purchase, List<InventoryItem> inventoryItems) throws ProfitMandiBusinessException {
|
| - |
|
424 |
if (inventoryItems.stream().filter(x -> x.getPurchaseId() != purchase.getId()).collect(Collectors.toList()).size() > 0) {
|
| - |
|
425 |
throw new ProfitMandiBusinessException("", "Invalid purchase id for inventory item", "SCHM_1009");
|
| - |
|
426 |
}
|
| - |
|
427 |
PartnerType partnerType = partnerTypeChangeService.getTypeOnMonth(purchase.getFofoId(),
|
| - |
|
428 |
YearMonth.from(purchase.getCreateTimestamp()));
|
| 420 |
//Remove imeis from blocked imeis list
|
429 |
//Remove imeis from blocked imeis list
|
| 421 |
inventoryItems = inventoryItems.stream().filter(inventoryItem -> !BLOCKED_IMEIS.contains(inventoryItem.getSerialNumber())).collect(Collectors.toList());
|
430 |
inventoryItems = inventoryItems.stream().filter(inventoryItem -> !BLOCKED_IMEIS.contains(inventoryItem.getSerialNumber())).collect(Collectors.toList());
|
| 422 |
if (inventoryItems.size() == 0) return;
|
431 |
if (inventoryItems.size() == 0) return;
|
| 423 |
|
432 |
|
| 424 |
Set<Integer> itemIds = inventoryItems.stream().map(x -> x.getItemId()).collect(Collectors.toSet());
|
433 |
Set<Integer> itemIds = inventoryItems.stream().map(x -> x.getItemId()).collect(Collectors.toSet());
|
| 425 |
Map<Integer, Item> itemsMap = itemRepository.selectByIds(itemIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
|
434 |
Map<Integer, Item> itemsMap = itemRepository.selectByIds(itemIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
|
| 426 |
inventoryItems.stream().forEach(x -> x.setItem(itemsMap.get(x.getItemId())));
|
435 |
inventoryItems.stream().forEach(x -> x.setItem(itemsMap.get(x.getItemId())));
|
| 427 |
|
436 |
|
| 428 |
|
437 |
|
| 429 |
LocalDateTime billingDate = purchaseService.getBillingDateOfPurchase(purchaseId);
|
438 |
LocalDateTime billingDate = purchaseService.getBillingDateOfPurchase(purchase.getId());
|
| 430 |
Set<Integer> itemIdsSet = tagListingRepository.selectByItemIdsAndTagIds(itemIds, tagIds).stream()
|
439 |
Set<Integer> itemIdsSet = tagListingRepository.selectByItemIdsAndTagIds(itemIds, tagIds).stream()
|
| 431 |
.filter(x -> x.getEolDate() == null || x.getEolDate().isAfter(billingDate)).map(x -> x.getItemId())
|
440 |
.filter(x -> x.getEolDate() == null || x.getEolDate().isAfter(billingDate)).map(x -> x.getItemId())
|
| 432 |
.collect(Collectors.toSet());
|
441 |
.collect(Collectors.toSet());
|
| 433 |
// Only consider inventory items that were not returned and not eol
|
442 |
// Only consider inventory items that were not returned and not eol
|
| 434 |
inventoryItems = inventoryItems.stream().filter(x -> itemIdsSet.contains(x.getItemId()))
|
443 |
inventoryItems = inventoryItems.stream().filter(x -> itemIdsSet.contains(x.getItemId()))
|
| Line 436... |
Line 445... |
| 436 |
.filter(x -> !x.getLastScanType().equals(ScanType.PURCHASE_RET)).collect(Collectors.toList());
|
445 |
.filter(x -> !x.getLastScanType().equals(ScanType.PURCHASE_RET)).collect(Collectors.toList());
|
| 437 |
|
446 |
|
| 438 |
if (inventoryItems.size() == 0) return;
|
447 |
if (inventoryItems.size() == 0) return;
|
| 439 |
|
448 |
|
| 440 |
Map<Integer, List<InventoryItem>> catalogInventoryItemMap = inventoryItems.stream().collect(Collectors.groupingBy(x -> x.getItem().getCatalogItemId()));
|
449 |
Map<Integer, List<InventoryItem>> catalogInventoryItemMap = inventoryItems.stream().collect(Collectors.groupingBy(x -> x.getItem().getCatalogItemId()));
|
| 441 |
Map<CatalogSummaryModel, List<SchemeSummaryModel>> catalogSchemeSummaryMap = tagListingRepository.getModelSchemesByCatalogIdsAndType(retailerId,
|
450 |
Map<CatalogSummaryModel, List<SchemeSummaryModel>> catalogSchemeSummaryMap = tagListingRepository.getModelSchemesByCatalogIdsAndType(purchase.getFofoId(),
|
| 442 |
partnerType, new ArrayList<>(catalogInventoryItemMap.keySet()), billingDate);
|
451 |
partnerType, new ArrayList<>(catalogInventoryItemMap.keySet()), billingDate);
|
| 443 |
|
452 |
|
| 444 |
|
453 |
|
| 445 |
int itemsCount = 0;
|
454 |
int itemsCount = 0;
|
| 446 |
float totalCashback = 0;
|
455 |
float totalCashback = 0;
|
| Line 458... |
Line 467... |
| 458 |
}
|
467 |
}
|
| 459 |
}
|
468 |
}
|
| 460 |
}
|
469 |
}
|
| 461 |
|
470 |
|
| 462 |
|
471 |
|
| 463 |
LOGGER.info("Items count for purchase id {} is {}", purchaseId, itemsCount);
|
472 |
LOGGER.info("Items count for purchase id {} is {}", purchase.getId(), itemsCount);
|
| 464 |
if (itemsCount > 0) {
|
473 |
if (itemsCount > 0) {
|
| 465 |
walletService.addAmountToWallet(
|
474 |
walletService.addAmountToWallet(
|
| 466 |
retailerId, purchaseId, WalletReferenceType.SCHEME_IN, "Added for SCHEME IN against invoice "
|
475 |
purchase.getFofoId(), purchase.getId(), WalletReferenceType.SCHEME_IN, "Added for SCHEME IN against invoice "
|
| 467 |
+ purchase.getPurchaseReference() + " (total " + itemsCount + " pcs)",
|
476 |
+ purchase.getPurchaseReference() + " (total " + itemsCount + " pcs)",
|
| 468 |
totalCashback, purchase.getCreateTimestamp());
|
477 |
totalCashback, purchase.getCreateTimestamp());
|
| 469 |
LOGGER.info("Added Rs.{} for SCHEME IN against invoice {} total pcs({}) {}", totalCashback,
|
478 |
LOGGER.info("Added Rs.{} for SCHEME IN against invoice {} total pcs({}) {}", totalCashback,
|
| 470 |
purchase.getPurchaseReference(), itemsCount);
|
479 |
purchase.getPurchaseReference(), itemsCount);
|
| 471 |
}
|
480 |
}
|
| 472 |
|
- |
|
| 473 |
}
|
481 |
}
|
| 474 |
|
482 |
|
| 475 |
|
483 |
|
| 476 |
// We are maintaining price drop after grn
|
484 |
// We are maintaining price drop after grn
|
| 477 |
private float getAmount(InventoryItem inventoryItem, Scheme scheme) throws ProfitMandiBusinessException {
|
485 |
private float getAmount(InventoryItem inventoryItem, Scheme scheme) throws ProfitMandiBusinessException {
|
| Line 764... |
Line 772... |
| 764 |
Map<Integer, Integer> purchasePartnerMap = inventoryItems.stream().collect(Collectors.toMap(x -> x.getPurchaseId(), x -> x.getFofoId(), (u, v) -> u));
|
772 |
Map<Integer, Integer> purchasePartnerMap = inventoryItems.stream().collect(Collectors.toMap(x -> x.getPurchaseId(), x -> x.getFofoId(), (u, v) -> u));
|
| 765 |
|
773 |
|
| 766 |
LOGGER.info("inventoryItemIds - {}", inventoryItemIds);
|
774 |
LOGGER.info("inventoryItemIds - {}", inventoryItemIds);
|
| 767 |
List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectByInventoryItemIds(new HashSet<>(inventoryItemIds));
|
775 |
List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectByInventoryItemIds(new HashSet<>(inventoryItemIds));
|
| 768 |
List<Integer> schemeIds = schemeInOuts.stream().map(x -> x.getSchemeId()).distinct().collect(Collectors.toList());
|
776 |
List<Integer> schemeIds = schemeInOuts.stream().map(x -> x.getSchemeId()).distinct().collect(Collectors.toList());
|
| 769 |
if(schemeIds.size() == 0) return;
|
777 |
if (schemeIds.size() == 0) return;
|
| 770 |
List<Scheme> schemes = schemeRepository.selectBySchemeIds(schemeIds);
|
778 |
List<Scheme> schemes = schemeRepository.selectBySchemeIds(schemeIds);
|
| 771 |
Map<Integer, Float> inSchemesMap = new HashMap<>();
|
779 |
Map<Integer, Float> inSchemesMap = new HashMap<>();
|
| 772 |
Map<Integer, Float> outSchemesMap = new HashMap<>();
|
780 |
Map<Integer, Float> outSchemesMap = new HashMap<>();
|
| 773 |
Map<Integer, Scheme> schemesMap = schemes.stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
|
781 |
Map<Integer, Scheme> schemesMap = schemes.stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
|
| 774 |
for (SchemeInOut schemeInOut : schemeInOuts) {
|
782 |
for (SchemeInOut schemeInOut : schemeInOuts) {
|
| Line 784... |
Line 792... |
| 784 |
schemePayoutMap = outSchemesMap;
|
792 |
schemePayoutMap = outSchemesMap;
|
| 785 |
}
|
793 |
}
|
| 786 |
if (!schemePayoutMap.containsKey(inventoryItemId)) {
|
794 |
if (!schemePayoutMap.containsKey(inventoryItemId)) {
|
| 787 |
schemePayoutMap.put(inventoryItemId, 0f);
|
795 |
schemePayoutMap.put(inventoryItemId, 0f);
|
| 788 |
}
|
796 |
}
|
| 789 |
schemePayoutMap.put(inventoryItemId, inSchemesMap.get(inventoryItemId)==null?0:inSchemesMap.get(inventoryItemId) + schemeInOut.getAmount());
|
797 |
schemePayoutMap.put(inventoryItemId, inSchemesMap.get(inventoryItemId) == null ? 0 : inSchemesMap.get(inventoryItemId) + schemeInOut.getAmount());
|
| 790 |
}
|
798 |
}
|
| 791 |
schemeInOut.setStatus(SchemePayoutStatus.REJECTED);
|
799 |
schemeInOut.setStatus(SchemePayoutStatus.REJECTED);
|
| 792 |
schemeInOut.setStatusDescription(rollbackReason);
|
800 |
schemeInOut.setStatusDescription(rollbackReason);
|
| 793 |
}
|
801 |
}
|
| 794 |
}
|
802 |
}
|
| Line 1040... |
Line 1048... |
| 1040 |
|
1048 |
|
| 1041 |
@Override
|
1049 |
@Override
|
| 1042 |
public void processSchemeIn(List<InventoryItem> inventoryItems) throws ProfitMandiBusinessException {
|
1050 |
public void processSchemeIn(List<InventoryItem> inventoryItems) throws ProfitMandiBusinessException {
|
| 1043 |
Map<Integer, List<InventoryItem>> purchaseIdInventoryItemsMap = inventoryItems.stream().collect(Collectors.groupingBy(x -> x.getPurchaseId()));
|
1051 |
Map<Integer, List<InventoryItem>> purchaseIdInventoryItemsMap = inventoryItems.stream().collect(Collectors.groupingBy(x -> x.getPurchaseId()));
|
| 1044 |
for (Map.Entry<Integer, List<InventoryItem>> purchaseIdInventoryItemEntry : purchaseIdInventoryItemsMap.entrySet()) {
|
1052 |
for (Map.Entry<Integer, List<InventoryItem>> purchaseIdInventoryItemEntry : purchaseIdInventoryItemsMap.entrySet()) {
|
| 1045 |
int retailerId = purchaseIdInventoryItemEntry.getValue().get(0).getFofoId();
|
1053 |
Purchase purchase = purchaseRepository.selectById(purchaseIdInventoryItemEntry.getKey());
|
| 1046 |
this.processSchemeIn(purchaseIdInventoryItemEntry.getKey(), retailerId);
|
1054 |
this.processSchemeIn(purchase, purchaseIdInventoryItemEntry.getValue());
|
| 1047 |
}
|
1055 |
}
|
| 1048 |
}
|
1056 |
}
|
| 1049 |
|
1057 |
|
| 1050 |
@Autowired
|
1058 |
@Autowired
|
| 1051 |
FofoStoreRepository fofoStoreRepository;
|
1059 |
FofoStoreRepository fofoStoreRepository;
|