Subversion Repositories SmartDukaan

Rev

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

Rev 34115 Rev 34139
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;