Subversion Repositories SmartDukaan

Rev

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

Rev 33247 Rev 33441
Line 644... Line 644...
644
 
644
 
645
        Map<String, Double> serialNumberPaid = offerPayouts.stream().filter(x -> x.getRejectTimestamp() == null).collect(Collectors.groupingBy(x -> x.getSerialNumber(), Collectors.summingDouble(x -> x.getSlabAmount())));
645
        Map<String, Double> serialNumberPaid = offerPayouts.stream().filter(x -> x.getRejectTimestamp() == null).collect(Collectors.groupingBy(x -> x.getSerialNumber(), Collectors.summingDouble(x -> x.getSlabAmount())));
646
        Map<Integer, Map<Integer, List<FofoOrderItem>>> criteriaPartnerwiseTertiary = offerRepository.getCriteriaWisePartnerTertiary(createOfferRequest);
646
        Map<Integer, Map<Integer, List<FofoOrderItem>>> criteriaPartnerwiseTertiary = offerRepository.getCriteriaWisePartnerTertiary(createOfferRequest);
647
 
647
 
648
        Map<String, AgeingSummaryModel> ageingSummaryModelsMap = null;
648
        Map<String, AgeingSummaryModel> ageingSummaryModelsMap = null;
649
        final Set<String> activatedImeis;
649
        final Map<String, LocalDateTime> activatedImeisActiovationDateMap;
650
        if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
650
        if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
651
            //All Serialnumbers for all eligible retailers
651
            //All Serialnumbers for all eligible retailers
652
            List<String> serialNumbers = criteriaPartnerwiseTertiary.entrySet().stream().flatMap(x -> x.getValue().entrySet().stream().flatMap(foiList -> foiList.getValue().stream()))
652
            List<String> serialNumbers = criteriaPartnerwiseTertiary.entrySet().stream().flatMap(x -> x.getValue().entrySet().stream().flatMap(foiList -> foiList.getValue().stream()))
653
                    .flatMap(y -> y.getFofoLineItems().stream()).filter(fli -> fli.getSerialNumber() != null)
653
                    .flatMap(y -> y.getFofoLineItems().stream()).filter(fli -> fli.getSerialNumber() != null)
654
                    .map(x -> x.getSerialNumber()).collect(Collectors.toList());
654
                    .map(x -> x.getSerialNumber()).collect(Collectors.toList());
655
            if (serialNumbers.size() > 0) {
655
            if (serialNumbers.size() > 0) {
656
                activatedImeis = activatedImeiRepository.selectBySerialNumbers(serialNumbers).stream()
656
                activatedImeisActiovationDateMap = activatedImeiRepository.selectBySerialNumbers(serialNumbers).stream()
657
                        .filter(x -> createOfferRequest.isWithinRange(x.getActivationTimestamp()))
657
                        .filter(x -> createOfferRequest.isWithinRange(x.getActivationTimestamp()))
658
                        .map(x -> x.getSerialNumber()).collect(Collectors.toSet());
658
                        .collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x.getActivationTimestamp()));
659
                ageingSummaryModelsMap = warehouseInventoryItemRepository.findStockAgeingByFofoIdSerialNumbers(0, serialNumbers).stream().collect(Collectors.toMap(x->x.getSerialNumber(), x->x));
659
                ageingSummaryModelsMap = warehouseInventoryItemRepository.findStockAgeingByFofoIdSerialNumbers(0, serialNumbers).stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x, (u,v)->v));
660
            } else {
660
            } else {
661
                activatedImeis = null;
661
                activatedImeisActiovationDateMap = null;
662
            }
662
            }
663
        } else {
663
        } else {
664
            activatedImeis = null;
664
            activatedImeisActiovationDateMap = null;
665
        }
665
        }
666
 
666
 
667
        Map<Integer, Integer> userBaseQtyMap = new HashMap<>();
667
        Map<Integer, Integer> userBaseQtyMap = new HashMap<>();
668
        Map<Integer, Integer> userBaseValueMap = new HashMap<>();
668
        Map<Integer, Integer> userBaseValueMap = new HashMap<>();
669
        Map<Integer, Integer> eligibleBaseQtyMap = new HashMap<>();
669
        Map<Integer, Integer> eligibleBaseQtyMap = new HashMap<>();
Line 681... Line 681...
681
                if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
681
                if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
682
                    Map<Integer, Integer> inventoryItemValueMap = new HashMap<>();
682
                    Map<Integer, Integer> inventoryItemValueMap = new HashMap<>();
683
                    for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
683
                    for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
684
                        fofoOrderItem.getFofoLineItems().stream().filter(x -> x.getSerialNumber() != null).forEach(
684
                        fofoOrderItem.getFofoLineItems().stream().filter(x -> x.getSerialNumber() != null).forEach(
685
                                lineItem -> {
685
                                lineItem -> {
686
                                    if (activatedImeis == null || activatedImeis.contains(lineItem.getSerialNumber())) {
686
                                    if (activatedImeisActiovationDateMap == null || activatedImeisActiovationDateMap.containsKey(lineItem.getSerialNumber())) {
687
                                        inventoryItemValueMap.put(lineItem.getInventoryItemId(), (int) fofoOrderItem.getDp());
687
                                        inventoryItemValueMap.put(lineItem.getInventoryItemId(), (int) fofoOrderItem.getDp());
688
                                    }
688
                                    }
689
                                }
689
                                }
690
                        );
690
                        );
691
                    }
691
                    }
Line 699... Line 699...
699
 
699
 
700
            }
700
            }
701
        }
701
        }
702
 
702
 
703
        //As of now eligible sale is considered to be without special criteria like brand/
703
        //As of now eligible sale is considered to be without special criteria like brand/
-
 
704
        //CriteriaPayoutWise
704
        for (ItemCriteriaPayout itemCriteriaPayout : createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts()) {
705
        for (ItemCriteriaPayout itemCriteriaPayout : createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts()) {
705
            int criteriaId = itemCriteriaPayout.getItemCriteria().getId();
706
            int criteriaId = itemCriteriaPayout.getItemCriteria().getId();
706
            Map<Integer, List<FofoOrderItem>> ordersMap = criteriaPartnerwiseTertiary.get(criteriaId);
707
            Map<Integer, List<FofoOrderItem>> ordersMap = criteriaPartnerwiseTertiary.get(criteriaId);
-
 
708
            //Partywise iteration
707
            for (Map.Entry<Integer, List<FofoOrderItem>> orderEntry : ordersMap.entrySet()) {
709
            for (Map.Entry<Integer, List<FofoOrderItem>> orderEntry : ordersMap.entrySet()) {
708
                double totalRolloutAmount = 0;
710
                double totalRolloutAmount = 0;
709
                int fofoId = orderEntry.getKey();
711
                int fofoId = orderEntry.getKey();
710
                List<FofoOrderItem> fofoOrderItems = orderEntry.getValue();
712
                List<FofoOrderItem> fofoOrderItems = orderEntry.getValue();
711
                OfferRowModel offerRowModel = new OfferRowModel();
713
                OfferRowModel offerRowModel = new OfferRowModel();
Line 716... Line 718...
716
                Map<FofoLineItem, Integer> lineItemValueMap = new HashMap<>();
718
                Map<FofoLineItem, Integer> lineItemValueMap = new HashMap<>();
717
                if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
719
                if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
718
                    for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
720
                    for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
719
                        fofoOrderItem.getFofoLineItems().stream().filter(x -> x.getSerialNumber() != null).forEach(
721
                        fofoOrderItem.getFofoLineItems().stream().filter(x -> x.getSerialNumber() != null).forEach(
720
                                lineItem -> {
722
                                lineItem -> {
721
                                    if (activatedImeis == null || activatedImeis.contains(lineItem.getSerialNumber())) {
723
                                    if (activatedImeisActiovationDateMap == null) {
722
                                        lineItemValueMap.put(lineItem, (int) fofoOrderItem.getDp());
724
                                        lineItemValueMap.put(lineItem, (int) fofoOrderItem.getDp());
-
 
725
 
-
 
726
                                    } else if (activatedImeisActiovationDateMap.containsKey(lineItem.getSerialNumber())) {
-
 
727
                                        if (itemCriteriaPayout.isWithinRange(activatedImeisActiovationDateMap.get(lineItem.getSerialNumber()))) {
-
 
728
                                            lineItemValueMap.put(lineItem, (int) fofoOrderItem.getDp());
-
 
729
                                        }
723
                                    }
730
                                    }
-
 
731
 
724
                                }
732
                                }
725
                        );
733
                        );
726
                    }
734
                    }
727
                    eligibleQty = lineItemValueMap.size();
735
                    eligibleQty = lineItemValueMap.size();
728
                    eligibleValue = lineItemValueMap.entrySet().stream().collect(Collectors.summingInt(x -> x.getValue()));
736
                    eligibleValue = lineItemValueMap.entrySet().stream().collect(Collectors.summingInt(x -> x.getValue()));
Line 790... Line 798...
790
                if (finalPayout > 0) {
798
                if (finalPayout > 0) {
791
                    List<Integer> inventoryItemIds = lineItemValueMap.keySet().stream().map(x -> x.getInventoryItemId()).collect(Collectors.toList());
799
                    List<Integer> inventoryItemIds = lineItemValueMap.keySet().stream().map(x -> x.getInventoryItemId()).collect(Collectors.toList());
792
                    Map<Integer, InventoryItem> inventoryItemsMap = inventoryItemRepository.selectAllByIds(inventoryItemIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
800
                    Map<Integer, InventoryItem> inventoryItemsMap = inventoryItemRepository.selectAllByIds(inventoryItemIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
793
                    for (Map.Entry<FofoLineItem, Integer> lineItemValueEntry : lineItemValueMap.entrySet()) {
801
                    for (Map.Entry<FofoLineItem, Integer> lineItemValueEntry : lineItemValueMap.entrySet()) {
794
                        FofoLineItem fofoLineItem = lineItemValueEntry.getKey();
802
                        FofoLineItem fofoLineItem = lineItemValueEntry.getKey();
795
                        if(ageingSummaryModelsMap.containsKey(fofoLineItem.getSerialNumber())) {
803
                        if (ageingSummaryModelsMap.containsKey(fofoLineItem.getSerialNumber())) {
796
                            if(ageingSummaryModelsMap.get(fofoLineItem.getSerialNumber()).isAgedAbove(300))  {
804
                            if (ageingSummaryModelsMap.get(fofoLineItem.getSerialNumber()).isAgedAbove(300)) {
797
                                continue;
805
                                continue;
798
                            }
806
                            }
799
                        }
807
                        }
800
                        double amount = 0;
808
                        double amount = 0;
801
                        int totalDpValue = lineItemValueMap.values().stream().collect(Collectors.summingInt(x -> x));
809
                        int totalDpValue = lineItemValueMap.values().stream().collect(Collectors.summingInt(x -> x));
Line 1007... Line 1015...
1007
        }
1015
        }
1008
        Offer offer = offerRepository.selectById(createOfferRequest.getId());
1016
        Offer offer = offerRepository.selectById(createOfferRequest.getId());
1009
        offer.setProcessedTimestamp(LocalDateTime.now());
1017
        offer.setProcessedTimestamp(LocalDateTime.now());
1010
    }
1018
    }
1011
 
1019
 
-
 
1020
    private void rollbackPayout(int fofoId, int offerId, List<
1012
    private void rollbackPayout(int fofoId, int offerId, List<OfferPayout> partnerPayouts, Set<String> returnedSerialNumbers) throws ProfitMandiBusinessException {
1021
            OfferPayout> partnerPayouts, Set<String> returnedSerialNumbers) throws ProfitMandiBusinessException {
1013
        LOGGER.info("Rollback payout called for offerId {}", offerId);
1022
        LOGGER.info("Rollback payout called for offerId {}", offerId);
1014
        float amountToRollback = 0;
1023
        float amountToRollback = 0;
1015
        int totalImeis = 0;
1024
        int totalImeis = 0;
1016
        for (OfferPayout partnerPayout : partnerPayouts) {
1025
        for (OfferPayout partnerPayout : partnerPayouts) {
1017
            LOGGER.info("serialNumberInventoryItemMap - {}", returnedSerialNumbers);
1026
            LOGGER.info("serialNumberInventoryItemMap - {}", returnedSerialNumbers);
Line 1027... Line 1036...
1027
            LOGGER.info("Amount to Rollback - {}", amountToRollback);
1036
            LOGGER.info("Amount to Rollback - {}", amountToRollback);
1028
            walletService.rollbackAmountFromWallet(fofoId, amountToRollback, offerId, WalletReferenceType.ADDITIONAL_SCHEME, "Stock Returned, total " + totalImeis + "pc(s)", LocalDateTime.now());
1037
            walletService.rollbackAmountFromWallet(fofoId, amountToRollback, offerId, WalletReferenceType.ADDITIONAL_SCHEME, "Stock Returned, total " + totalImeis + "pc(s)", LocalDateTime.now());
1029
        }
1038
        }
1030
    }
1039
    }
1031
 
1040
 
1032
    private Map<String, InventoryItem> getInventoryItemMap(int fofoId, Map<String, LineItem> serialNumberMap) throws ProfitMandiBusinessException {
1041
    private Map<String, InventoryItem> getInventoryItemMap(int fofoId, Map<String, LineItem> serialNumberMap) throws
-
 
1042
            ProfitMandiBusinessException {
1033
        List<InventoryItem> inventoryItems = inventoryItemRepository.selectBySerialNumbers(serialNumberMap.keySet());
1043
        List<InventoryItem> inventoryItems = inventoryItemRepository.selectBySerialNumbers(serialNumberMap.keySet());
1034
        inventoryItems = inventoryItems.stream().filter(x -> x.getFofoId() == fofoId).collect(Collectors.toList());
1044
        inventoryItems = inventoryItems.stream().filter(x -> x.getFofoId() == fofoId).collect(Collectors.toList());
1035
        Map<String, InventoryItem> inventoryItemMap = inventoryItems.stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x, (u, v) -> v.getCreateTimestamp().isAfter(u.getCreateTimestamp()) ? v : u));
1045
        Map<String, InventoryItem> inventoryItemMap = inventoryItems.stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x, (u, v) -> v.getCreateTimestamp().isAfter(u.getCreateTimestamp()) ? v : u));
1036
        return inventoryItemMap;
1046
        return inventoryItemMap;
1037
    }
1047
    }