Subversion Repositories SmartDukaan

Rev

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

Rev 36103 Rev 36305
Line 55... Line 55...
55
import org.apache.poi.xssf.usermodel.XSSFSheet;
55
import org.apache.poi.xssf.usermodel.XSSFSheet;
56
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
56
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
57
import org.springframework.beans.factory.annotation.Autowired;
57
import org.springframework.beans.factory.annotation.Autowired;
58
import org.springframework.cache.CacheManager;
58
import org.springframework.cache.CacheManager;
59
import org.springframework.cache.annotation.Cacheable;
59
import org.springframework.cache.annotation.Cacheable;
-
 
60
import org.springframework.transaction.annotation.Transactional;
60
import org.springframework.stereotype.Component;
61
import org.springframework.stereotype.Component;
61
 
62
 
62
import java.io.IOException;
63
import java.io.IOException;
63
import java.io.InputStream;
64
import java.io.InputStream;
64
import java.time.LocalDate;
65
import java.time.LocalDate;
Line 1196... Line 1197...
1196
        Offer offer = offerRepository.selectById(createOfferRequest.getId());
1197
        Offer offer = offerRepository.selectById(createOfferRequest.getId());
1197
        offer.setProcessedTimestamp(LocalDateTime.now());
1198
        offer.setProcessedTimestamp(LocalDateTime.now());
1198
    }
1199
    }
1199
 
1200
 
1200
    @Override
1201
    @Override
-
 
1202
    @Transactional(readOnly = true)
-
 
1203
    public List<OfferPartnerPayoutData> calculateOfferPayouts(CreateOfferRequest createOfferRequest) throws ProfitMandiBusinessException {
-
 
1204
        List<OfferPartnerPayoutData> result = new ArrayList<>();
-
 
1205
 
-
 
1206
        List<OfferPayout> offerPayouts = offerPayoutRepository.selectAllByOfferId(createOfferRequest.getId());
-
 
1207
        List<ItemCriteriaPayout> itemCriteriaPayouts = createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts();
-
 
1208
        Map<Integer, ItemCriteriaPayout> itemCriteriaPayoutMap = itemCriteriaPayouts.stream().collect(Collectors.toMap(x -> x.getItemCriteria().getId(), x -> x));
-
 
1209
 
-
 
1210
        Map<Integer, Map<Integer, Double>> fixedSlabCriteriaPartnerMap = offerPayouts.stream()
-
 
1211
                .filter(x -> itemCriteriaPayoutMap.containsKey((int) x.getCriteriaId()) &&
-
 
1212
                        itemCriteriaPayoutMap.get((int) x.getCriteriaId()).getAmountType().equals(AmountType.SLAB_FIXED))
-
 
1213
                .collect(Collectors.groupingBy(x -> (int) x.getCriteriaId(),
-
 
1214
                        Collectors.groupingBy(x -> (int) x.getFofoId(), Collectors.summingDouble(x -> x.getSlabAmount()))));
-
 
1215
 
-
 
1216
        Map<String, Double> serialNumberPaid = offerPayouts.stream()
-
 
1217
                .filter(x -> x.getRejectTimestamp() == null)
-
 
1218
                .collect(Collectors.groupingBy(x -> x.getSerialNumber(), Collectors.summingDouble(x -> x.getSlabAmount())));
-
 
1219
 
-
 
1220
        Map<Integer, Map<Integer, List<FofoOrderItem>>> criteriaPartnerwiseTertiary = offerRepository.getCriteriaWisePartnerTertiary(createOfferRequest);
-
 
1221
 
-
 
1222
        Map<String, AgeingSummaryModel> ageingSummaryModelsMap = null;
-
 
1223
        final Map<String, LocalDateTime> activatedImeisActivationDateMap;
-
 
1224
        List<String> imeisAllowedManually = offerEligibleImeiRepository.selectEligibleImeisByOfferId(createOfferRequest.getId());
-
 
1225
 
-
 
1226
        if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
-
 
1227
            List<String> serialNumbers = criteriaPartnerwiseTertiary.entrySet().stream()
-
 
1228
                    .flatMap(x -> x.getValue().entrySet().stream().flatMap(foiList -> foiList.getValue().stream()))
-
 
1229
                    .flatMap(y -> y.getFofoLineItems().stream()).filter(fli -> fli.getSerialNumber() != null)
-
 
1230
                    .map(x -> x.getSerialNumber()).collect(Collectors.toList());
-
 
1231
            if (serialNumbers.size() > 0) {
-
 
1232
                if (imeisAllowedManually != null) {
-
 
1233
                    serialNumbers = serialNumbers.stream().filter(x -> imeisAllowedManually.contains(x)).collect(Collectors.toList());
-
 
1234
                }
-
 
1235
                activatedImeisActivationDateMap = activatedImeiRepository.selectBySerialNumbers(serialNumbers).stream()
-
 
1236
                        .filter(x -> createOfferRequest.isWithinRange(x.getActivationTimestamp()))
-
 
1237
                        .collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x.getActivationTimestamp()));
-
 
1238
                ageingSummaryModelsMap = warehouseInventoryItemRepository.findStockAgeingByFofoIdSerialNumbers(0, serialNumbers)
-
 
1239
                        .stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x, (u, v) -> v));
-
 
1240
            } else {
-
 
1241
                activatedImeisActivationDateMap = null;
-
 
1242
            }
-
 
1243
        } else {
-
 
1244
            activatedImeisActivationDateMap = null;
-
 
1245
        }
-
 
1246
 
-
 
1247
        Map<Integer, Integer> userBaseQtyMap = new HashMap<>();
-
 
1248
        Map<Integer, Integer> userBaseValueMap = new HashMap<>();
-
 
1249
        Map<Integer, Integer> calcEligibleBaseQtyMap = new HashMap<>();
-
 
1250
        Map<Integer, Integer> calcEligibleBaseValueMap = new HashMap<>();
-
 
1251
 
-
 
1252
        if (createOfferRequest.isBaseCriteria()) {
-
 
1253
            Map<Integer, List<FofoOrderItem>> foiMap = criteriaPartnerwiseTertiary.get(0);
-
 
1254
            if (foiMap != null) {
-
 
1255
                for (Map.Entry<Integer, List<FofoOrderItem>> orderEntry : foiMap.entrySet()) {
-
 
1256
                    int fofoId = orderEntry.getKey();
-
 
1257
                    List<FofoOrderItem> fofoOrderItems = orderEntry.getValue();
-
 
1258
                    int totalBaseQty = fofoOrderItems.stream().collect(Collectors.summingInt(x -> (x.getQuantity())));
-
 
1259
                    int totalBaseValue = fofoOrderItems.stream().collect(Collectors.summingInt(x -> (Math.round(x.getDp())) * x.getQuantity()));
-
 
1260
                    userBaseQtyMap.put(fofoId, totalBaseQty);
-
 
1261
                    userBaseValueMap.put(fofoId, totalBaseValue);
-
 
1262
                    if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
-
 
1263
                        Map<Integer, Integer> inventoryItemValueMap = new HashMap<>();
-
 
1264
                        for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
-
 
1265
                            fofoOrderItem.getFofoLineItems().stream().filter(x -> x.getSerialNumber() != null).forEach(
-
 
1266
                                    lineItem -> {
-
 
1267
                                        if (activatedImeisActivationDateMap == null || activatedImeisActivationDateMap.containsKey(lineItem.getSerialNumber())) {
-
 
1268
                                            inventoryItemValueMap.put(lineItem.getInventoryItemId(), (int) fofoOrderItem.getDp());
-
 
1269
                                        }
-
 
1270
                                    }
-
 
1271
                            );
-
 
1272
                        }
-
 
1273
                        calcEligibleBaseQtyMap.put(fofoId, inventoryItemValueMap.size());
-
 
1274
                        calcEligibleBaseValueMap.put(fofoId, inventoryItemValueMap.entrySet().stream().collect(Collectors.summingInt(x -> x.getValue())));
-
 
1275
                    } else {
-
 
1276
                        calcEligibleBaseQtyMap.put(fofoId, totalBaseQty);
-
 
1277
                        calcEligibleBaseValueMap.put(fofoId, totalBaseValue);
-
 
1278
                    }
-
 
1279
                }
-
 
1280
            }
-
 
1281
        }
-
 
1282
 
-
 
1283
        for (ItemCriteriaPayout itemCriteriaPayout : createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts()) {
-
 
1284
            int criteriaId = itemCriteriaPayout.getItemCriteria().getId();
-
 
1285
            Map<Integer, List<FofoOrderItem>> ordersMap = criteriaPartnerwiseTertiary.get(criteriaId);
-
 
1286
            if (ordersMap == null) continue;
-
 
1287
 
-
 
1288
            for (Map.Entry<Integer, List<FofoOrderItem>> orderEntry : ordersMap.entrySet()) {
-
 
1289
                int fofoId = orderEntry.getKey();
-
 
1290
                List<FofoOrderItem> fofoOrderItems = orderEntry.getValue();
-
 
1291
                int totalQty = fofoOrderItems.stream().collect(Collectors.summingInt(x -> (x.getQuantity())));
-
 
1292
                int totalValue = fofoOrderItems.stream().collect(Collectors.summingInt(x -> Math.round(x.getDp()) * (x.getQuantity())));
-
 
1293
                int eligibleQty = totalQty;
-
 
1294
                int eligibleValue = totalValue;
-
 
1295
                Map<FofoLineItem, Integer> lineItemValueMap = new HashMap<>();
-
 
1296
                if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
-
 
1297
                    for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
-
 
1298
                        fofoOrderItem.getFofoLineItems().stream().filter(x -> x.getSerialNumber() != null).forEach(
-
 
1299
                                lineItem -> {
-
 
1300
                                    if (activatedImeisActivationDateMap == null) {
-
 
1301
                                        lineItemValueMap.put(lineItem, (int) fofoOrderItem.getDp());
-
 
1302
                                    } else if (activatedImeisActivationDateMap.containsKey(lineItem.getSerialNumber())) {
-
 
1303
                                        if (itemCriteriaPayout.isWithinRange(activatedImeisActivationDateMap.get(lineItem.getSerialNumber()))) {
-
 
1304
                                            lineItemValueMap.put(lineItem, (int) fofoOrderItem.getDp());
-
 
1305
                                        }
-
 
1306
                                    }
-
 
1307
                                }
-
 
1308
                        );
-
 
1309
                    }
-
 
1310
                    eligibleQty = lineItemValueMap.size();
-
 
1311
                    eligibleValue = lineItemValueMap.entrySet().stream().collect(Collectors.summingInt(x -> x.getValue()));
-
 
1312
                }
-
 
1313
 
-
 
1314
                int eligibleBaseQty = eligibleQty;
-
 
1315
                int eligibleBaseValue = eligibleValue;
-
 
1316
                if (createOfferRequest.isBaseCriteria()) {
-
 
1317
                    eligibleBaseQty = calcEligibleBaseQtyMap.get(fofoId) == null ? 0 : calcEligibleBaseQtyMap.get(fofoId);
-
 
1318
                    eligibleBaseValue = calcEligibleBaseValueMap.get(fofoId) == null ? 0 : calcEligibleBaseValueMap.get(fofoId);
-
 
1319
                }
-
 
1320
 
-
 
1321
                int eligibleSale = eligibleBaseValue;
-
 
1322
                int eligibleCriteriaSaleDp = eligibleValue;
-
 
1323
                if (createOfferRequest.getTargetType().equals(AchievementType.QUANTITY)) {
-
 
1324
                    eligibleSale = eligibleBaseQty;
-
 
1325
                }
-
 
1326
 
-
 
1327
                float eligiblePayoutValue = 0;
-
 
1328
                float previousPayoutValue = 0;
-
 
1329
                double finalPayout;
-
 
1330
                for (PayoutSlab payoutSlab : itemCriteriaPayout.getPayoutSlabs()) {
-
 
1331
                    if (payoutSlab.getOnwardsAmount() <= eligibleSale) {
-
 
1332
                        eligiblePayoutValue = payoutSlab.getPayoutAmount();
-
 
1333
                        previousPayoutValue = Math.min(eligiblePayoutValue, previousPayoutValue);
-
 
1334
                    } else {
-
 
1335
                        break;
-
 
1336
                    }
-
 
1337
                }
-
 
1338
                if (AmountType.PERCENTAGE.equals(itemCriteriaPayout.getAmountType())) {
-
 
1339
                    finalPayout = (eligiblePayoutValue * eligibleCriteriaSaleDp) / 100;
-
 
1340
                } else if (AmountType.FIXED.equals(itemCriteriaPayout.getAmountType())) {
-
 
1341
                    finalPayout = eligiblePayoutValue * eligibleQty;
-
 
1342
                } else {
-
 
1343
                    Map<Integer, Double> fofoCriteriaMap = fixedSlabCriteriaPartnerMap.get(criteriaId);
-
 
1344
                    finalPayout = eligiblePayoutValue;
-
 
1345
                    if (fofoCriteriaMap != null && fofoCriteriaMap.containsKey(fofoId)) {
-
 
1346
                        finalPayout = eligiblePayoutValue - previousPayoutValue;
-
 
1347
                        if (Math.abs(finalPayout) < Utils.DOUBLE_EPSILON) {
-
 
1348
                            finalPayout = 0;
-
 
1349
                        }
-
 
1350
                    }
-
 
1351
                }
-
 
1352
 
-
 
1353
                if (finalPayout > 0) {
-
 
1354
                    result.add(new OfferPartnerPayoutData(
-
 
1355
                            fofoId, criteriaId, finalPayout, eligiblePayoutValue,
-
 
1356
                            lineItemValueMap, itemCriteriaPayout, serialNumberPaid,
-
 
1357
                            ageingSummaryModelsMap, createOfferRequest.isDiscount()));
-
 
1358
                }
-
 
1359
            }
-
 
1360
        }
-
 
1361
 
-
 
1362
        return result;
-
 
1363
    }
-
 
1364
 
-
 
1365
    @Override
1201
    public void processSellin(CreateOfferRequest createOfferRequest) throws Exception {
1366
    public void processSellin(CreateOfferRequest createOfferRequest) throws Exception {
1202
 
1367
 
1203
        //List<OfferRowModel> offerRowModels = new ArrayList<>();
1368
        //List<OfferRowModel> offerRowModels = new ArrayList<>();
1204
        List<OfferPayout> offerPayouts = offerPayoutRepository.selectAllByOfferId(createOfferRequest.getId());
1369
        List<OfferPayout> offerPayouts = offerPayoutRepository.selectAllByOfferId(createOfferRequest.getId());
1205
        Map<String, Double> serialNumberPaid = offerPayouts.stream().filter(x -> x.getRejectTimestamp() == null).collect(Collectors.groupingBy(x -> x.getSerialNumber(), Collectors.summingDouble(x -> x.getSlabAmount())));
1370
        Map<String, Double> serialNumberPaid = offerPayouts.stream().filter(x -> x.getRejectTimestamp() == null).collect(Collectors.groupingBy(x -> x.getSerialNumber(), Collectors.summingDouble(x -> x.getSlabAmount())));
Line 1380... Line 1545...
1380
        }
1545
        }
1381
        Offer offer = offerRepository.selectById(createOfferRequest.getId());
1546
        Offer offer = offerRepository.selectById(createOfferRequest.getId());
1382
        offer.setProcessedTimestamp(LocalDateTime.now());
1547
        offer.setProcessedTimestamp(LocalDateTime.now());
1383
    }
1548
    }
1384
 
1549
 
-
 
1550
    @Override
-
 
1551
    @Transactional(readOnly = true)
-
 
1552
    public List<SellinPartnerPayoutData> calculateSellinPayouts(CreateOfferRequest createOfferRequest) throws Exception {
-
 
1553
        List<SellinPartnerPayoutData> result = new ArrayList<>();
-
 
1554
 
-
 
1555
        List<OfferPayout> offerPayouts = offerPayoutRepository.selectAllByOfferId(createOfferRequest.getId());
-
 
1556
        Map<String, Double> serialNumberPaid = offerPayouts.stream()
-
 
1557
                .filter(x -> x.getRejectTimestamp() == null)
-
 
1558
                .collect(Collectors.groupingBy(x -> x.getSerialNumber(), Collectors.summingDouble(x -> x.getSlabAmount())));
-
 
1559
 
-
 
1560
        List<ItemCriteriaPayout> itemCriteriaPayouts = createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts();
-
 
1561
        Map<Integer, ItemCriteriaPayout> itemCriteriaPayoutMap = itemCriteriaPayouts.stream()
-
 
1562
                .collect(Collectors.toMap(x -> x.getItemCriteria().getId(), x -> x));
-
 
1563
        Map<Integer, Map<Integer, Double>> fixedSlabCriteriaPartnerMap = offerPayouts.stream()
-
 
1564
                .filter(x -> itemCriteriaPayoutMap.containsKey((int) x.getCriteriaId()) &&
-
 
1565
                        itemCriteriaPayoutMap.get((int) x.getCriteriaId()).getAmountType().equals(AmountType.SLAB_FIXED))
-
 
1566
                .collect(Collectors.groupingBy(x -> (int) x.getCriteriaId(),
-
 
1567
                        Collectors.groupingBy(x -> (int) x.getFofoId(), Collectors.summingDouble(x -> x.getSlabAmount()))));
-
 
1568
        Set<Long> fofoIds = offerPayouts.stream().map(x -> x.getFofoId()).collect(Collectors.toSet());
-
 
1569
 
-
 
1570
        Map<Integer, Map<Integer, List<Order>>> criteriaOrdersMap = offerRepository.getPartnerWiseSellin(createOfferRequest, true);
-
 
1571
 
-
 
1572
        Map<Integer, List<Order>> userBaseCriteriaOrdersMap = null;
-
 
1573
        if (criteriaOrdersMap.get(0) != null && criteriaOrdersMap.get(0).size() > 0) {
-
 
1574
            userBaseCriteriaOrdersMap = criteriaOrdersMap.get(0).entrySet().stream()
-
 
1575
                    .filter(x -> !fofoIds.contains(x.getKey())).collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
-
 
1576
        }
-
 
1577
 
-
 
1578
        Map<Integer, Integer> userBaseQtyMap = null;
-
 
1579
        Map<Integer, Integer> userBaseValueMap = null;
-
 
1580
        if (userBaseCriteriaOrdersMap != null) {
-
 
1581
            userBaseQtyMap = new HashMap<>();
-
 
1582
            userBaseValueMap = new HashMap<>();
-
 
1583
            for (Map.Entry<Integer, List<Order>> orderEntry : userBaseCriteriaOrdersMap.entrySet()) {
-
 
1584
                int fofoId = orderEntry.getKey();
-
 
1585
                List<Order> orders = orderEntry.getValue();
-
 
1586
                int totalBaseQty = orders.stream().collect(Collectors.summingInt(x -> (x.getLineItem().getQuantity() - x.getLineItem().getReturnQty())));
-
 
1587
                int totalBaseValue = orders.stream().collect(Collectors.summingInt(x ->
-
 
1588
                        Math.round(x.getLineItem().getUnitPrice() * (x.getLineItem().getQuantity() - x.getLineItem().getReturnQty()))
-
 
1589
                ));
-
 
1590
                userBaseQtyMap.put(fofoId, totalBaseQty);
-
 
1591
                userBaseValueMap.put(fofoId, totalBaseValue);
-
 
1592
            }
-
 
1593
        }
-
 
1594
 
-
 
1595
        for (ItemCriteriaPayout itemCriteriaPayout : createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts()) {
-
 
1596
            int criteriaId = itemCriteriaPayout.getItemCriteria().getId();
-
 
1597
            if (criteriaOrdersMap.get(criteriaId) == null) continue;
-
 
1598
            Map<Integer, List<Order>> ordersMap = criteriaOrdersMap.get(criteriaId).entrySet().stream()
-
 
1599
                    .filter(x -> !fofoIds.contains(x.getKey())).collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
-
 
1600
 
-
 
1601
            for (Map.Entry<Integer, List<Order>> orderEntry : ordersMap.entrySet()) {
-
 
1602
                int fofoId = orderEntry.getKey();
-
 
1603
                List<Order> orders = orderEntry.getValue();
-
 
1604
                int totalQty = orders.stream().collect(Collectors.summingInt(x -> (x.getLineItem().getQuantity() - x.getLineItem().getReturnQty())));
-
 
1605
                int totalValue = orders.stream().collect(Collectors.summingInt(x -> Math.round(x.getLineItem().
-
 
1606
                        getUnitPrice() * (x.getLineItem().getQuantity() - x.getLineItem().getReturnQty()))));
-
 
1607
                int totalBaseQty = totalQty;
-
 
1608
                int totalBaseValue = totalValue;
-
 
1609
                if (userBaseCriteriaOrdersMap != null) {
-
 
1610
                    if (userBaseQtyMap.containsKey(fofoId)) {
-
 
1611
                        totalBaseQty = userBaseQtyMap.get(fofoId);
-
 
1612
                        totalBaseValue = userBaseValueMap.get(fofoId);
-
 
1613
                    } else {
-
 
1614
                        continue;
-
 
1615
                    }
-
 
1616
                }
-
 
1617
 
-
 
1618
                int purchasedValue;
-
 
1619
                if (createOfferRequest.getTargetType().equals(AchievementType.VALUE)) {
-
 
1620
                    purchasedValue = totalBaseValue;
-
 
1621
                } else {
-
 
1622
                    purchasedValue = totalBaseQty;
-
 
1623
                }
-
 
1624
 
-
 
1625
                PayoutSlab eligibleSlab = null;
-
 
1626
                for (PayoutSlab payoutSlab : itemCriteriaPayout.getPayoutSlabs()) {
-
 
1627
                    if (payoutSlab.getOnwardsAmount() <= purchasedValue) {
-
 
1628
                        eligibleSlab = payoutSlab;
-
 
1629
                    } else {
-
 
1630
                        break;
-
 
1631
                    }
-
 
1632
                }
-
 
1633
                if (eligibleSlab == null) continue;
-
 
1634
 
-
 
1635
                List<Integer> orderIds = orders.stream().map(x -> x.getId()).collect(Collectors.toList());
-
 
1636
                Map<Integer, LineItem> lineItemMap = orders.stream().collect(Collectors.toMap(x -> x.getLineItem().getId(), x -> x.getLineItem()));
-
 
1637
                List<WarehouseScan> warehouseScans = warehouseScanRepository.selectAllByOrderIds(orderIds);
-
 
1638
                List<Integer> warehouseInventoryItemIds = warehouseScans.stream().collect(Collectors.groupingBy(x -> x.getInventoryItemId())).entrySet()
-
 
1639
                        .stream().filter(x -> x.getValue().size() == 1).map(x -> x.getKey()).collect(Collectors.toList());
-
 
1640
 
-
 
1641
                List<OfferPayout> partnerPayouts = offerPayouts.stream().filter(x -> x.getFofoId() == fofoId).collect(Collectors.toList());
-
 
1642
                Set<String> serialNumbersRejected = partnerPayouts.stream().filter(x -> x.getStatus().equals(SchemePayoutStatus.REJECTED)).map(x -> x.getSerialNumber()).collect(Collectors.toSet());
-
 
1643
 
-
 
1644
                Set<String> billedNotCancelledSerialNumbers;
-
 
1645
                if (warehouseInventoryItemIds.size() > 0) {
-
 
1646
                    List<WarehouseInventoryItem> warehouseInventoryItems = warehouseInventoryItemRepository.selectAllByIds(warehouseInventoryItemIds);
-
 
1647
                    billedNotCancelledSerialNumbers = warehouseInventoryItems.stream().map(x -> x.getSerialNumber()).collect(Collectors.toSet());
-
 
1648
                } else {
-
 
1649
                    billedNotCancelledSerialNumbers = new HashSet<>();
-
 
1650
                }
-
 
1651
 
-
 
1652
                Map<String, LineItem> serialNumberMap = lineItemImeisRepository.selectByLineItemIds(new ArrayList<>(lineItemMap.keySet()))
-
 
1653
                        .stream().filter(x -> !serialNumbersRejected.contains(x.getSerialNumber()))
-
 
1654
                        .collect(Collectors.toMap(x -> x.getSerialNumber(), x -> lineItemMap.get(x.getLineItemId()), (x1, x2) -> x1.getId() > x2.getId() ? x1 : x2));
-
 
1655
 
-
 
1656
                List<String> manuallyEligibleImeis = offerEligibleImeiRepository.selectEligibleImeisByOfferId(createOfferRequest.getId());
-
 
1657
 
-
 
1658
                serialNumberMap = serialNumberMap.entrySet().stream().filter(x -> billedNotCancelledSerialNumbers.contains(x.getKey()))
-
 
1659
                        .collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
-
 
1660
 
-
 
1661
                Map<String, InventoryItem> serialNumberInventoryItemMap = this.getInventoryItemMap(fofoId, serialNumberMap);
-
 
1662
                if (serialNumberInventoryItemMap.size() < billedNotCancelledSerialNumbers.size()) continue;
-
 
1663
 
-
 
1664
                if (manuallyEligibleImeis != null) {
-
 
1665
                    serialNumberMap = serialNumberMap.entrySet().stream().filter(x -> manuallyEligibleImeis.contains(x.getKey()))
-
 
1666
                            .collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
-
 
1667
                    if (serialNumberMap.size() == 0) continue;
-
 
1668
                    serialNumberInventoryItemMap = this.getInventoryItemMap(fofoId, serialNumberMap);
-
 
1669
                }
-
 
1670
                if (serialNumberMap.size() == 0) continue;
-
 
1671
 
-
 
1672
                float eligiblePayoutValue = eligibleSlab.getPayoutAmount();
-
 
1673
                double finalPayout;
-
 
1674
                if (AmountType.PERCENTAGE.equals(itemCriteriaPayout.getAmountType())) {
-
 
1675
                    finalPayout = (eligiblePayoutValue * purchasedValue) / 100;
-
 
1676
                } else if (AmountType.FIXED.equals(itemCriteriaPayout.getAmountType())) {
-
 
1677
                    finalPayout = eligiblePayoutValue * totalQty;
-
 
1678
                } else {
-
 
1679
                    Map<Integer, Double> fofoCriteriaPayoutMap = fixedSlabCriteriaPartnerMap.get(criteriaId);
-
 
1680
                    finalPayout = eligiblePayoutValue;
-
 
1681
                    if (fofoCriteriaPayoutMap != null && fofoCriteriaPayoutMap.containsKey(fofoId)) {
-
 
1682
                        finalPayout = eligiblePayoutValue - fofoCriteriaPayoutMap.get(fofoId);
-
 
1683
                        if (Math.abs(finalPayout) < Utils.DOUBLE_EPSILON) {
-
 
1684
                            finalPayout = 0;
-
 
1685
                        }
-
 
1686
                    }
-
 
1687
                }
-
 
1688
 
-
 
1689
                if (finalPayout > 0) {
-
 
1690
                    result.add(new SellinPartnerPayoutData(
-
 
1691
                            fofoId, criteriaId, finalPayout, eligiblePayoutValue,
-
 
1692
                            serialNumberInventoryItemMap, itemCriteriaPayout,
-
 
1693
                            serialNumberPaid, createOfferRequest.isDiscount()));
-
 
1694
                }
-
 
1695
            }
-
 
1696
        }
-
 
1697
 
-
 
1698
        return result;
-
 
1699
    }
-
 
1700
 
1385
    private void rollbackPayout(int fofoId, int offerId, List<
1701
    private void rollbackPayout(int fofoId, int offerId, List<
1386
            OfferPayout> partnerPayouts, Set<String> returnedSerialNumbers) throws ProfitMandiBusinessException {
1702
            OfferPayout> partnerPayouts, Set<String> returnedSerialNumbers) throws ProfitMandiBusinessException {
1387
        LOGGER.info("Rollback payout called for offerId {}", offerId);
1703
        LOGGER.info("Rollback payout called for offerId {}", offerId);
1388
        float amountToRollback = 0;
1704
        float amountToRollback = 0;
1389
        int totalImeis = 0;
1705
        int totalImeis = 0;