Subversion Repositories SmartDukaan

Rev

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

Rev 33248 Rev 33432
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