Subversion Repositories SmartDukaan

Rev

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

Rev 31610 Rev 31903
Line 8... Line 8...
8
import com.spice.profitmandi.common.model.SendNotificationModel;
8
import com.spice.profitmandi.common.model.SendNotificationModel;
9
import com.spice.profitmandi.common.services.ReporticoService;
9
import com.spice.profitmandi.common.services.ReporticoService;
10
import com.spice.profitmandi.common.util.FormattingUtils;
10
import com.spice.profitmandi.common.util.FormattingUtils;
11
import com.spice.profitmandi.common.util.StringUtils;
11
import com.spice.profitmandi.common.util.StringUtils;
12
import com.spice.profitmandi.common.util.Utils;
12
import com.spice.profitmandi.common.util.Utils;
13
import com.spice.profitmandi.dao.entity.catalog.Item;
13
import com.spice.profitmandi.dao.entity.catalog.*;
14
import com.spice.profitmandi.dao.entity.catalog.Scheme;
-
 
15
import com.spice.profitmandi.dao.entity.catalog.SchemeRegion;
-
 
16
import com.spice.profitmandi.dao.entity.catalog.SchemesImeisModel;
-
 
17
import com.spice.profitmandi.dao.entity.fofo.*;
14
import com.spice.profitmandi.dao.entity.fofo.*;
-
 
15
import com.spice.profitmandi.dao.entity.inventory.PartnerAgeingModel;
18
import com.spice.profitmandi.dao.entity.transaction.PriceDrop;
16
import com.spice.profitmandi.dao.entity.transaction.PriceDrop;
19
import com.spice.profitmandi.dao.entity.transaction.UserWalletHistory;
17
import com.spice.profitmandi.dao.entity.transaction.UserWalletHistory;
20
import com.spice.profitmandi.dao.enumuration.catalog.AmountType;
18
import com.spice.profitmandi.dao.enumuration.catalog.AmountType;
21
import com.spice.profitmandi.dao.enumuration.catalog.SchemeType;
19
import com.spice.profitmandi.dao.enumuration.catalog.SchemeType;
22
import com.spice.profitmandi.dao.enumuration.fofo.ScanType;
20
import com.spice.profitmandi.dao.enumuration.fofo.ScanType;
23
import com.spice.profitmandi.dao.enumuration.transaction.SchemePayoutStatus;
21
import com.spice.profitmandi.dao.enumuration.transaction.SchemePayoutStatus;
-
 
22
import com.spice.profitmandi.dao.model.AmountModel;
24
import com.spice.profitmandi.dao.model.CreateSchemeRequest;
23
import com.spice.profitmandi.dao.model.CreateSchemeRequest;
25
import com.spice.profitmandi.dao.repository.catalog.*;
24
import com.spice.profitmandi.dao.repository.catalog.*;
26
import com.spice.profitmandi.dao.repository.dtr.RetailerRepository;
25
import com.spice.profitmandi.dao.repository.dtr.RetailerRepository;
27
import com.spice.profitmandi.dao.repository.fofo.*;
26
import com.spice.profitmandi.dao.repository.fofo.*;
28
import com.spice.profitmandi.dao.repository.transaction.PriceDropRepository;
27
import com.spice.profitmandi.dao.repository.transaction.PriceDropRepository;
29
import com.spice.profitmandi.dao.repository.transaction.UserWalletHistoryRepository;
28
import com.spice.profitmandi.dao.repository.transaction.UserWalletHistoryRepository;
30
import com.spice.profitmandi.service.NotificationService;
29
import com.spice.profitmandi.service.NotificationService;
31
import com.spice.profitmandi.service.authentication.RoleManager;
30
import com.spice.profitmandi.service.authentication.RoleManager;
-
 
31
import com.spice.profitmandi.service.inventory.AgeingService;
32
import com.spice.profitmandi.service.inventory.PurchaseService;
32
import com.spice.profitmandi.service.inventory.PurchaseService;
-
 
33
import com.spice.profitmandi.service.pricecircular.CatalogSummaryModel;
-
 
34
import com.spice.profitmandi.service.pricecircular.SchemeSummaryModel;
33
import com.spice.profitmandi.service.wallet.WalletService;
35
import com.spice.profitmandi.service.wallet.WalletService;
34
import in.shop2020.model.v1.order.WalletReferenceType;
36
import in.shop2020.model.v1.order.WalletReferenceType;
35
import org.apache.logging.log4j.LogManager;
37
import org.apache.logging.log4j.LogManager;
36
import org.apache.logging.log4j.Logger;
38
import org.apache.logging.log4j.Logger;
37
import org.hibernate.Session;
39
import org.hibernate.Session;
Line 50... Line 52...
50
import java.text.MessageFormat;
52
import java.text.MessageFormat;
51
import java.time.LocalDate;
53
import java.time.LocalDate;
52
import java.time.LocalDateTime;
54
import java.time.LocalDateTime;
53
import java.time.YearMonth;
55
import java.time.YearMonth;
54
import java.util.*;
56
import java.util.*;
-
 
57
import java.util.function.Function;
55
import java.util.stream.Collectors;
58
import java.util.stream.Collectors;
56
 
59
 
57
@Component
60
@Component
58
public class SchemeServiceImpl implements SchemeService {
61
public class SchemeServiceImpl implements SchemeService {
59
 
62
 
Line 361... Line 364...
361
            }
364
            }
362
        }
365
        }
363
        return inventoryItemSchemesMap;
366
        return inventoryItemSchemesMap;
364
    }
367
    }
365
 
368
 
-
 
369
    @Autowired
-
 
370
    OfferTargetSlabRepository offerTargetSlabRepository;
-
 
371
 
366
    @Override
372
    /*@Override
367
    public void processSchemeIn(int purchaseId, int retailerId) throws ProfitMandiBusinessException {
373
    public void processSchemeIn(int purchaseId, int retailerId) throws ProfitMandiBusinessException {
368
        LOGGER.info("Trying to process SchemeIn with purchaseId [{}] and retailerId [{}]", purchaseId, retailerId);
374
        LOGGER.info("Trying to process SchemeIn with purchaseId [{}] and retailerId [{}]", purchaseId, retailerId);
369
        Purchase purchase = purchaseRepository.selectByIdAndFofoId(purchaseId, retailerId);
375
        Purchase purchase = purchaseRepository.selectByIdAndFofoId(purchaseId, retailerId);
-
 
376
 
-
 
377
 
370
        // TODO - SCHEME
378
        // TODO - SCHEME
371
        PartnerType partnerType = partnerTypeChangeService.getTypeOnMonth(retailerId,
379
        PartnerType partnerType = partnerTypeChangeService.getTypeOnMonth(retailerId,
372
                YearMonth.from(purchase.getCreateTimestamp()));
380
                YearMonth.from(purchase.getCreateTimestamp()));
373
        // PartnerType partnerType = partnerTypeChangeService.getTypeOnDate(retailerId,
381
        // PartnerType partnerType = partnerTypeChangeService.getTypeOnDate(retailerId,
374
        // purchase.getCreateTimestamp().toLocalDate());
382
        // purchase.getCreateTimestamp().toLocalDate());
Line 423... Line 431...
423
        for (Map.Entry<InventoryItem, Set<Scheme>> allInventoryItemSchemesEntry : allInventoryItemSchemesMap
431
        for (Map.Entry<InventoryItem, Set<Scheme>> allInventoryItemSchemesEntry : allInventoryItemSchemesMap
424
                .entrySet()) {
432
                .entrySet()) {
425
            float inventoryItemCashback = 0;
433
            float inventoryItemCashback = 0;
426
            for (Scheme scheme : allInventoryItemSchemesEntry.getValue()) {
434
            for (Scheme scheme : allInventoryItemSchemesEntry.getValue()) {
427
                InventoryItem inventoryItem = allInventoryItemSchemesEntry.getKey();
435
                InventoryItem inventoryItem = allInventoryItemSchemesEntry.getKey();
428
                float cashback = this.createSchemeInOut(scheme, inventoryItem, partnerType);
436
                float cashback = this.createSchemeInOut(null, inventoryItem, partnerType);
429
                inventoryItemCashback += cashback;
437
                inventoryItemCashback += cashback;
430
            }
438
            }
431
            if (inventoryItemCashback > 0) {
439
            if (inventoryItemCashback > 0) {
432
                totalCashback += inventoryItemCashback;
440
                totalCashback += inventoryItemCashback;
433
                itemsCount++;
441
                itemsCount++;
Line 443... Line 451...
443
            LOGGER.info("Added Rs.{} for SCHEME IN against invoice {} total pcs({}) {}", totalCashback,
451
            LOGGER.info("Added Rs.{} for SCHEME IN against invoice {} total pcs({}) {}", totalCashback,
444
                    purchase.getPurchaseReference(), itemsCount);
452
                    purchase.getPurchaseReference(), itemsCount);
445
            purchase.setCashback(purchase.getCashback() + totalCashback);
453
            purchase.setCashback(purchase.getCashback() + totalCashback);
446
            purchaseRepository.persist(purchase);
454
            purchaseRepository.persist(purchase);
447
        }
455
        }
448
    }
456
    }*/
449
 
457
 
450
    private Scheme toScheme(int creatorId, CreateSchemeRequest createSchemeRequest) {
458
    private Scheme toScheme(int creatorId, CreateSchemeRequest createSchemeRequest) {
451
        Scheme scheme = new Scheme();
459
        Scheme scheme = new Scheme();
452
        scheme.setName(createSchemeRequest.getName());
460
        scheme.setName(createSchemeRequest.getName());
453
        scheme.setDescription(createSchemeRequest.getDescription());
461
        scheme.setDescription(createSchemeRequest.getDescription());
Line 460... Line 468...
460
        scheme.setCreatedBy(creatorId);
468
        scheme.setCreatedBy(creatorId);
461
        scheme.setCashback(createSchemeRequest.isCashback());
469
        scheme.setCashback(createSchemeRequest.isCashback());
462
        return scheme;
470
        return scheme;
463
    }
471
    }
464
 
472
 
-
 
473
    @Autowired
-
 
474
    OfferRepository offerRepository;
-
 
475
    @Autowired
-
 
476
    OfferPayoutRepository offerPayoutRepository;
-
 
477
    @Autowired
-
 
478
    AgeingService ageingService;
465
 
479
 
-
 
480
    public void processSchemeIn(int purchaseId, int retailerId) throws ProfitMandiBusinessException {
-
 
481
        Purchase purchase = purchaseRepository.selectByIdAndFofoId(purchaseId, retailerId);
466
    //Only in and activation margins are allowed to be rolled out more than twice
482
        PartnerType partnerType = partnerTypeChangeService.getTypeOnMonth(retailerId,
-
 
483
                YearMonth.from(purchase.getCreateTimestamp()));
467
    private float createSchemeInOut(Scheme scheme, InventoryItem inventoryItem, PartnerType partnerType) throws ProfitMandiBusinessException {
484
        List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchaseId);
468
        LOGGER.info("Scheme === {}", scheme);
485
        //Remove imeis from blocked imeis list
469
        if ((scheme.getId() == 411 || scheme.getId() == 612) && inventoryItem.getCreateTimestamp().isAfter(LocalDate.of(2021, 12, 1).atStartOfDay())) {
486
        inventoryItems = inventoryItems.stream().filter(inventoryItem -> !BLOCKED_IMEIS.contains(inventoryItem.getSerialNumber())).collect(Collectors.toList());
470
            return 0;
487
        if (inventoryItems.size() == 0) return;
471
        }
488
 
-
 
489
        Set<Integer> itemIds = inventoryItems.stream().map(x -> x.getItemId()).collect(Collectors.toSet());
472
        List<SchemeInOut> sios = schemeInOutRepository.selectAllByType(scheme.getType(), inventoryItem.getId());
490
        Map<Integer, Item> itemsMap = itemRepository.selectByIds(itemIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
-
 
491
        inventoryItems.stream().forEach(x -> x.setItem(itemsMap.get(x.getItemId())));
-
 
492
 
-
 
493
 
473
        float actualCredit = 0;
494
        LocalDateTime billingDate = purchaseService.getBillingDateOfPurchase(purchaseId);
-
 
495
        Set<Integer> itemIdsSet = tagListingRepository.selectByItemIdsAndTagIds(itemIds, tagIds).stream()
474
        if (sios.stream().filter(x -> x.getRolledBackTimestamp() == null && x.getSchemeId() == scheme.getId())
496
                .filter(x -> x.getEolDate() == null || x.getEolDate().isAfter(billingDate)).map(x -> x.getItemId())
475
                .collect(Collectors.toList()).size() == 0) {
497
                .collect(Collectors.toSet());
-
 
498
        // Only consider inventory items that were not returned and not eol
476
            sios = sios.stream().filter(x -> x.getRolledBackTimestamp() == null).collect(Collectors.toList());
499
        inventoryItems = inventoryItems.stream().filter(x -> itemIdsSet.contains(x.getItemId()))
477
            //Rejected Scheme for types INVESTMENT and ACTIVATION are considered rolledback only if the item billing is cancelled.
500
                .filter(x -> !x.getLastScanType().equals(ScanType.PURCHASE_RET_BAD))
478
            float amountCredited = (float) sios.stream().mapToDouble(e -> e.getAmount()).sum();
501
                .filter(x -> !x.getLastScanType().equals(ScanType.PURCHASE_RET)).collect(Collectors.toList());
479
 
502
 
480
            LOGGER.info("SIOS ===== {}", sios);
503
        if (inventoryItems.size() == 0) return;
-
 
504
 
481
            float amountToCredit = this.getAmount(inventoryItem, scheme);
505
        Map<Integer, List<InventoryItem>> catalogInventoryItemMap = inventoryItems.stream().collect(Collectors.groupingBy(x -> x.getItem().getCatalogItemId()));
482
            //Activation and in scheme
-
 
483
            if (!scheme.getType().equals(SchemeType.IN) && !scheme.getType().equals(SchemeType.ACTIVATION) &&
506
        Map<CatalogSummaryModel, List<SchemeSummaryModel>> catalogSchemeSummaryMap = tagListingRepository.getModelSchemesByCatalogIdsAndType(retailerId,
484
                    !scheme.getType().equals(SchemeType.SPECIAL_SUPPORT) && sios.size() > 0) {
507
                partnerType, new ArrayList<>(catalogInventoryItemMap.keySet()), purchase.getCreateTimestamp());
-
 
508
 
485
 
509
 
486
                if (sios.size() > 1) {
510
        int itemsCount = 0;
-
 
511
        float totalCashback = 0;
-
 
512
        for (Map.Entry<CatalogSummaryModel, List<SchemeSummaryModel>> catalogSummaryModelListEntry : catalogSchemeSummaryMap.entrySet()) {
-
 
513
            CatalogSummaryModel catalogSummaryModel = catalogSummaryModelListEntry.getKey();
-
 
514
            List<SchemeSummaryModel> schemeSummaryModels = catalogSummaryModelListEntry.getValue();
-
 
515
            schemeSummaryModels.stream().filter(x -> x.getSchemeType().equals(SchemeType.IN)).forEach(x -> x.setProcess(true));
-
 
516
            if (schemeSummaryModels.stream().filter(x -> x.isProcess()).count() == 0) continue;
-
 
517
            List<InventoryItem> modelInventoryItems = catalogInventoryItemMap.get(catalogSummaryModel.getCatalogId());
-
 
518
            for (InventoryItem inventoryItem : modelInventoryItems) {
487
                    LOGGER.info("SAMESCHEMETYPE has already been credited twice for inventoryItem - {}", inventoryItem.getId());
519
                float inventoryItemCashback = this.createSchemeInOut(schemeSummaryModels, inventoryItem, partnerType);
-
 
520
                if (inventoryItemCashback > 0) {
488
                    return 0;
521
                    itemsCount++;
-
 
522
                    totalCashback += inventoryItemCashback;
489
                }
523
                }
-
 
524
            }
-
 
525
        }
-
 
526
 
-
 
527
 
490
                if (amountToCredit > amountCredited + 1f) {
528
        LOGGER.info("Items count for purchase id {} is {}", purchaseId, itemsCount);
491
                    for (SchemeInOut sio : sios) {
529
        if (itemsCount > 0) {
492
                        sio.setRolledBackTimestamp(LocalDateTime.now());
530
            walletService.addAmountToWallet(
493
                        sio.setStatus(SchemePayoutStatus.REJECTED);
531
                    retailerId, purchaseId, WalletReferenceType.SCHEME_IN, "Added for SCHEME IN against invoice "
494
                        sio.setStatusDescription("Partner Category upgraded to " + scheme.getPartnerType() + ", new entry for margin added");
532
                            + purchase.getPurchaseReference() + " (total " + itemsCount + " pcs)",
495
                    }
533
                    totalCashback, purchase.getCreateTimestamp());
-
 
534
            LOGGER.info("Added Rs.{} for SCHEME IN against invoice {} total pcs({}) {}", totalCashback,
496
                    actualCredit = amountToCredit - amountCredited;
535
                    purchase.getPurchaseReference(), itemsCount);
497
                } else {
536
        }
498
                    return 0;            //Rejected Scheme for types INVESTMENT and ACTIVATION are considered rolledback only if the item billing is cancelled.
-
 
-
 
537
 
-
 
538
    }
499
 
539
 
-
 
540
    public InventoryPayoutModel getPayouts(InventoryItem inventoryItem) {
-
 
541
        double paidPercentage = 0d;
-
 
542
        double paidFixed = 0d;
-
 
543
        double totalPaid = 0d;
-
 
544
 
-
 
545
        List<SchemeInOut> sios = schemeInOutRepository.selectAll(inventoryItem.getId());
-
 
546
        List<SchemeInOut> paidSios = sios.stream().filter(x -> x.getRolledBackTimestamp() == null).filter(x -> x.getStatus().equals(SchemePayoutStatus.CREDITED)).collect(Collectors.toList());
-
 
547
        if (paidSios.size() > 0) {
-
 
548
            List<Integer> schemeIds = sios.stream().map(x -> x.getSchemeId()).collect(Collectors.toList());
-
 
549
            Map<Integer, Scheme> schemesMap = schemeRepository.selectBySchemeIds(schemeIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
-
 
550
            for (SchemeInOut paidSio : paidSios) {
-
 
551
                Scheme scheme = schemesMap.get(paidSio.getSchemeId());
-
 
552
                paidSio.setScheme(scheme);
-
 
553
                if (scheme.getAmountType().equals(AmountType.PERCENTAGE)) {
-
 
554
                    paidPercentage += scheme.getAmount();
-
 
555
                } else {
-
 
556
                    paidFixed += scheme.getAmount();
500
                }
557
                }
501
            } else {
-
 
502
                actualCredit = amountToCredit;
558
                totalPaid += paidSio.getAmount();
503
            }
559
            }
504
            LOGGER.info("Actual Credit ==== {}", actualCredit);
560
        }
505
 
561
 
506
            SchemeInOut schemeInOut = new SchemeInOut();
-
 
507
            schemeInOut.setSchemeId(scheme.getId());
-
 
508
            schemeInOut.setInventoryItemId(inventoryItem.getId());
562
        List<OfferPayout> offerPayouts = offerPayoutRepository.selectAllBySerialNumber(inventoryItem.getFofoId(), inventoryItem.getSerialNumber())
509
            schemeInOut.setAmount(amountToCredit);
563
                .stream().filter(x -> x.getStatus().equals(SchemePayoutStatus.CREDITED)).collect(Collectors.toList());
510
            schemeInOutRepository.persist(schemeInOut);
564
        if (offerPayouts.size() > 0) {
511
 
-
 
512
            if (scheme.getType().equals(SchemeType.ACTIVATION)) {
565
            Map<Integer, List<OfferPayout>> offerPayoutMap = offerPayouts.stream().collect(Collectors.groupingBy(x -> (int) x.getOfferId()));
513
                schemeInOut.setStatus(SchemePayoutStatus.PENDING);
566
            Map<Integer, Integer> offerCriteriaMap = offerPayouts.stream().collect(Collectors.toMap(x -> (int) x.getOfferId(), x -> (int) x.getCriteriaId(), (u, v) -> u));
514
                schemeInOut.setStatusDescription("Activation pending for IMEI#" + inventoryItem.getSerialNumber());
567
            List<TargetSlabEntity> targetSlabEntities = offerTargetSlabRepository.selectByOfferIds(new ArrayList<>(offerPayoutMap.keySet()));
515
                return 0;
-
 
516
            } else if (scheme.getType().equals(SchemeType.INVESTMENT) && !PartnerType.BRONZE.equals(partnerType)) {
568
            Map<Integer, TargetSlabEntity> offerIdTargetSlabMap = targetSlabEntities.stream().filter(x -> offerCriteriaMap.get(x.getOfferId()) == x.getItemCriteriaId())
517
                schemeInOut.setStatus(SchemePayoutStatus.PENDING);
569
                    .collect(Collectors.toMap(x -> x.getOfferId(), x -> x, (u, v) -> u));
518
                schemeInOut.setStatusDescription("Subject to investment days maintained");
570
            for (Map.Entry<Integer, TargetSlabEntity> offerIdTargetSlabEntityEntry : offerIdTargetSlabMap.entrySet()) {
519
                return 0;
571
                int offerId = offerIdTargetSlabEntityEntry.getKey();
520
            } else {
-
 
521
                schemeInOut.setStatus(SchemePayoutStatus.CREDITED);
572
                TargetSlabEntity targetSlabEntity = offerIdTargetSlabEntityEntry.getValue();
522
                schemeInOut.setCreditTimestamp(LocalDateTime.now());
573
                List<OfferPayout> payouts = offerPayoutMap.get(offerId);
523
                if (scheme.getType().equals(SchemeType.IN)) {
574
                if (targetSlabEntity.getAmountType().equals(AmountType.PERCENTAGE)) {
524
                    schemeInOut.setStatusDescription("Credited for GRN of IMEI#" + inventoryItem.getSerialNumber());
575
                    paidPercentage += payouts.stream().map(x -> x.getSlabAmount()).max(Comparator.comparing(Function.identity())).get();
525
                } else if (SchemeType.INVESTMENT.equals(scheme.getType()) || SchemeService.OUT_SCHEME_TYPES.contains(scheme.getType())) {
576
                } else {
526
                    schemeInOut.setStatusDescription("Credited for sale of IMEI#" + inventoryItem.getSerialNumber());
577
                    paidFixed += payouts.stream().collect(Collectors.summingDouble(x -> x.getSlabAmount()));
527
                }
578
                }
-
 
579
                totalPaid += payouts.stream().collect(Collectors.summingDouble(x -> x.getAmount()));
-
 
580
 
528
            }
581
            }
529
        }
582
        }
-
 
583
 
-
 
584
        InventoryPayoutModel inventoryPayoutModel = new InventoryPayoutModel(inventoryItem.getId(), paidSios, offerPayouts);
-
 
585
        inventoryPayoutModel.setFixedAmount(paidFixed);
-
 
586
        inventoryPayoutModel.setPaidAmount(totalPaid);
-
 
587
        inventoryPayoutModel.setPercentageAmount(paidPercentage);
530
        return actualCredit;
588
        return inventoryPayoutModel;
531
    }
589
    }
532
 
590
 
533
    // We are maintaining price drop after grn
591
    // We are maintaining price drop after grn
534
    private float getAmount(InventoryItem inventoryItem, Scheme scheme) throws ProfitMandiBusinessException {
592
    private float getAmount(InventoryItem inventoryItem, Scheme scheme) throws ProfitMandiBusinessException {
535
        if (BLOCKED_IMEIS.contains(inventoryItem.getSerialNumber())) {
593
        if (BLOCKED_IMEIS.contains(inventoryItem.getSerialNumber())) {
Line 564... Line 622...
564
            amount = scheme.getAmount();
622
            amount = scheme.getAmount();
565
        }
623
        }
566
        return amount;
624
        return amount;
567
    }
625
    }
568
 
626
 
-
 
627
    //Only in and activation margins are allowed to be rolled out more than twice
-
 
628
    private float createSchemeInOut(List<SchemeSummaryModel> schemeSummaryModels, InventoryItem inventoryItem, PartnerType partnerType) throws ProfitMandiBusinessException {
-
 
629
 
-
 
630
        InventoryPayoutModel inventoryPayoutModel = this.getPayouts(inventoryItem);
-
 
631
        //Get all schemes
-
 
632
        List<SchemeSummaryModel> inventoryPayoutModelToProcess = schemeSummaryModels.stream().filter(x -> x.isProcess()).collect(Collectors.toList());
-
 
633
        float actualCredit = 0;
-
 
634
 
-
 
635
        List<SchemeInOut> sios = inventoryPayoutModel.getSchemePayouts();
-
 
636
        Map<SchemeType, List<SchemeInOut>> paidSchemeTypesMap = inventoryPayoutModel.getSchemePayouts().stream().collect(Collectors.groupingBy(x -> x.getScheme().getType()));
-
 
637
        Map<Integer, SchemeInOut> paidSchemesMap = sios.stream().collect(Collectors.toMap(x -> x.getSchemeId(), x -> x));
-
 
638
 
-
 
639
        double percentageToPay = 0d;
-
 
640
        double fixedToPay = 0d;
-
 
641
        Map<SchemeSummaryModel, AmountModel> payoutSchemeSummaryModelMap = new HashMap<>();
-
 
642
        for (SchemeSummaryModel schemeSummaryModelToProcess : inventoryPayoutModelToProcess) {
-
 
643
            if (paidSchemesMap.containsKey(schemeSummaryModelToProcess.getSchemeId())) continue;
-
 
644
            //If different type but on higher side provide the higher margin
-
 
645
            if (Arrays.asList(SchemeType.ACTIVATION, SchemeType.SPECIAL_SUPPORT).contains(schemeSummaryModelToProcess.getSchemeType())) {
-
 
646
                SchemeInOut sio = new SchemeInOut();
-
 
647
                sio.setAmount(0);
-
 
648
                sio.setInventoryItemId(inventoryItem.getId());
-
 
649
                sio.setSchemeId(schemeSummaryModelToProcess.getSchemeId());
-
 
650
                sio.setStatusDescription("Activation pending for IMEI#" + inventoryItem.getSerialNumber());
-
 
651
                sio.setStatus(SchemePayoutStatus.PENDING);
-
 
652
                schemeInOutRepository.persist(sio);
-
 
653
            } else if (!SchemeType.IN.equals(schemeSummaryModelToProcess.getSchemeType())) {
-
 
654
                //We have got non repeating scheme type
-
 
655
                if (paidSchemeTypesMap.containsKey(schemeSummaryModelToProcess.getSchemeType())) {
-
 
656
                    SchemeInOut sio = paidSchemeTypesMap.get(schemeSummaryModelToProcess.getSchemeType()).get(0);
-
 
657
                    Scheme paidScheme = sio.getScheme();
-
 
658
                    //Don't entertain if amount types do not match for same type
-
 
659
                    if (paidScheme.getAmountType().equals(schemeSummaryModelToProcess.getAmountType()) &&
-
 
660
                            schemeSummaryModelToProcess.getAmount() > paidScheme.getAmount() + Utils.DOUBLE_EPSILON) {
-
 
661
                        sio.setRolledBackTimestamp(LocalDateTime.now());
-
 
662
                        sio.setStatus(SchemePayoutStatus.REJECTED);
-
 
663
                        sio.setStatusDescription("Eligible for higher margin for " + sio.getSchemeType() + " new entry added");
-
 
664
                        if (paidScheme.getAmountType().equals(AmountType.PERCENTAGE)) {
-
 
665
                            percentageToPay += schemeSummaryModelToProcess.getAmount() - paidScheme.getAmount();
-
 
666
                        } else {
-
 
667
                            fixedToPay += schemeSummaryModelToProcess.getAmount() - paidScheme.getAmount();
-
 
668
                        }
-
 
669
                        payoutSchemeSummaryModelMap.put(schemeSummaryModelToProcess, new AmountModel(schemeSummaryModelToProcess.getAmount() - paidScheme.getAmount(), schemeSummaryModelToProcess.getAmountType()));
-
 
670
                    }
-
 
671
                } else {
-
 
672
                    if (schemeSummaryModelToProcess.getAmountType().equals(AmountType.PERCENTAGE)) {
-
 
673
                        percentageToPay += schemeSummaryModelToProcess.getAmount();
-
 
674
                    } else {
-
 
675
                        fixedToPay += schemeSummaryModelToProcess.getAmount();
-
 
676
                    }
-
 
677
                    payoutSchemeSummaryModelMap.put(schemeSummaryModelToProcess, new AmountModel(schemeSummaryModelToProcess.getAmount(), schemeSummaryModelToProcess.getAmountType()));
-
 
678
                }
-
 
679
            } else {
-
 
680
                if (schemeSummaryModelToProcess.getAmountType().equals(AmountType.PERCENTAGE)) {
-
 
681
                    percentageToPay += schemeSummaryModelToProcess.getAmount();
-
 
682
                } else {
-
 
683
                    fixedToPay += schemeSummaryModelToProcess.getAmount();
-
 
684
                }
-
 
685
                payoutSchemeSummaryModelMap.put(schemeSummaryModelToProcess, new AmountModel(schemeSummaryModelToProcess.getAmount(), schemeSummaryModelToProcess.getAmountType()));
-
 
686
            }
-
 
687
        }
-
 
688
        double walletCredit = 0d;
-
 
689
        if (fixedToPay > 0) {
-
 
690
            double fixedRollout = fixedToPay * (1 - inventoryPayoutModel.getPercentageAmount()) / (100 + inventoryPayoutModel.getPercentageAmount());
-
 
691
            for (Map.Entry<SchemeSummaryModel, AmountModel> schemeSummaryModelAmountModelEntry : payoutSchemeSummaryModelMap.entrySet()) {
-
 
692
                SchemeSummaryModel schemeSummaryModel = schemeSummaryModelAmountModelEntry.getKey();
-
 
693
                AmountModel amountModel = schemeSummaryModelAmountModelEntry.getValue();
-
 
694
                if (amountModel.getAmountType().equals(AmountType.FIXED)) {
-
 
695
                    SchemeInOut sio = new SchemeInOut();
-
 
696
                    sio.setSchemeId(schemeSummaryModel.getSchemeId());
-
 
697
                    sio.setInventoryItemId(inventoryItem.getId());
-
 
698
                    sio.setStatus(SchemePayoutStatus.CREDITED);
-
 
699
                    sio.setCreditTimestamp(LocalDateTime.now());
-
 
700
                    sio.setAmount((float) (fixedRollout * amountModel.getAmount() / fixedToPay));
-
 
701
                    if (schemeSummaryModel.getSchemeType().equals(SchemeType.IN))
-
 
702
                        sio.setStatusDescription("Credited for GRN of IMEI-" + inventoryItem.getSerialNumber());
-
 
703
                    else
-
 
704
                        sio.setStatusDescription("Credited for Sale of IMEI-" + inventoryItem.getSerialNumber());
-
 
705
                    schemeInOutRepository.persist(sio);
-
 
706
                }
-
 
707
            }
-
 
708
            walletCredit += fixedRollout;
-
 
709
        }
-
 
710
 
-
 
711
        if (percentageToPay > 0) {
-
 
712
            double effectiveDP = inventoryItem.getUnitPrice() - Math.max(0, inventoryItem.getPriceDropAmount()) - (inventoryPayoutModel.getFixedAmount() + fixedToPay);
-
 
713
            double totalPercentage = inventoryPayoutModel.getPercentageAmount() + percentageToPay;
-
 
714
            double percentageRollout = effectiveDP * (totalPercentage / (100 + totalPercentage) - (inventoryPayoutModel.getPercentageAmount() / (100 + inventoryPayoutModel.getPercentageAmount())));
-
 
715
            for (Map.Entry<SchemeSummaryModel, AmountModel> schemeSummaryModelAmountModelEntry : payoutSchemeSummaryModelMap.entrySet()) {
-
 
716
                SchemeSummaryModel schemeSummaryModel = schemeSummaryModelAmountModelEntry.getKey();
-
 
717
                AmountModel amountModel = schemeSummaryModelAmountModelEntry.getValue();
-
 
718
                if (amountModel.getAmountType().equals(AmountType.PERCENTAGE)) {
-
 
719
                    SchemeInOut sio = new SchemeInOut();
-
 
720
                    sio.setInventoryItemId(inventoryItem.getId());
-
 
721
                    sio.setSchemeId(schemeSummaryModel.getSchemeId());
-
 
722
                    sio.setStatus(SchemePayoutStatus.CREDITED);
-
 
723
                    sio.setCreditTimestamp(LocalDateTime.now());
-
 
724
                    sio.setAmount((float) (percentageRollout * amountModel.getAmount() / percentageToPay));
-
 
725
                    if (schemeSummaryModel.getSchemeType().equals(SchemeType.IN))
-
 
726
                        sio.setStatusDescription("Credited for GRN of IMEI-" + inventoryItem.getSerialNumber());
-
 
727
                    else
-
 
728
                        sio.setStatusDescription("Credited for Sale of IMEI-" + inventoryItem.getSerialNumber());
-
 
729
                    schemeInOutRepository.persist(sio);
-
 
730
                }
-
 
731
            }
-
 
732
            walletCredit += percentageRollout;
-
 
733
        }
-
 
734
 
-
 
735
        return (float) walletCredit;
-
 
736
    }
-
 
737
 
-
 
738
    private Set<Integer> filterImeisByAgeing(Set<Integer> inventoryItemIds, FofoOrder fofoOrder) {
-
 
739
        Set<Integer> filteredInventoryIds = new HashSet<>();
-
 
740
        List<PartnerAgeingModel> partnerAgeingModels = ageingService.filterAgedInventory(inventoryItemIds);
-
 
741
        for (PartnerAgeingModel partnerAgeingModel : partnerAgeingModels) {
-
 
742
            LOGGER.info("Serial Number - {}", partnerAgeingModel.getSerialNumber());
-
 
743
            if (partnerAgeingModel.getBrand().equalsIgnoreCase("Samsung")) {
-
 
744
                ActivatedImei activatedImei = activatedImeiRepository.selectBySerialNumber(partnerAgeingModel.getSerialNumber());
-
 
745
                if (activatedImei != null && activatedImei.getActivationTimestamp().toLocalDate()
-
 
746
                        .isBefore(partnerAgeingModel.getBillingDate().plusDays(partnerAgeingModel.getMaxAgeingDays()))) {
-
 
747
                    //Lets give money if activation is there and is before the ageing limit of that brand.
-
 
748
                    filteredInventoryIds.add(partnerAgeingModel.getInventoryItemId());
-
 
749
                } else {
-
 
750
                    //If billing happens before ageing expiry
-
 
751
                    if (fofoOrder.getCreateTimestamp().toLocalDate().isBefore(partnerAgeingModel.getBillingDate().plusDays(partnerAgeingModel.getMaxAgeingDays()))) {
-
 
752
                        filteredInventoryIds.add(partnerAgeingModel.getInventoryItemId());
-
 
753
                    }
-
 
754
                }
-
 
755
            } else {
-
 
756
                filteredInventoryIds.add(partnerAgeingModel.getInventoryItemId());
-
 
757
            }
-
 
758
        }
-
 
759
        return filteredInventoryIds;
-
 
760
    }
-
 
761
 
569
    @Override
762
    @Override
570
    public float processSchemeOut(int fofoOrderId, int retailerId) throws ProfitMandiBusinessException {
763
    public float processSchemeOut(int fofoOrderId, int retailerId) throws ProfitMandiBusinessException {
571
        float totalCashback = 0;
764
        float totalCashback = 0;
572
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(retailerId, fofoOrderId);
765
        FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(retailerId, fofoOrderId);
573
        // Process only if order is not cancelled
766
        // Process only if order is not cancelled
Line 580... Line 773...
580
 
773
 
581
            List<ScanRecord> scanRecords = scanRecordRepository.selectAllByOrderId(fofoOrderId);
774
            List<ScanRecord> scanRecords = scanRecordRepository.selectAllByOrderId(fofoOrderId);
582
            if (scanRecords.size() == 0) return 0;
775
            if (scanRecords.size() == 0) return 0;
583
            Set<Integer> inventoryItemIds = scanRecords.stream().map(x -> x.getInventoryItemId())
776
            Set<Integer> inventoryItemIds = scanRecords.stream().map(x -> x.getInventoryItemId())
584
                    .collect(Collectors.toSet());
777
                    .collect(Collectors.toSet());
-
 
778
            //Check for ageing
-
 
779
            inventoryItemIds = this.filterImeisByAgeing(inventoryItemIds, fofoOrder);
-
 
780
            //ageingService.filterAgedInventory(inventoryItemIds);
585
            LOGGER.info("fofoOrderId --- {}", fofoOrderId);
781
            LOGGER.info("fofoOrderId --- {}", fofoOrderId);
586
            LOGGER.info("scanRecords --- {}", scanRecords);
782
            LOGGER.info("scanRecords --- {}", scanRecords);
587
            LOGGER.info("inventoryItemIds --- {}", inventoryItemIds);
783
            LOGGER.info("inventoryItemIds --- {}", inventoryItemIds);
-
 
784
 
-
 
785
            if (inventoryItemIds.size() == 0) return 0;
-
 
786
 
588
            Set<InventoryItem> inventoryItems = inventoryItemRepository.selectByIds(inventoryItemIds).stream()
787
            Set<InventoryItem> inventoryItems = inventoryItemRepository.selectByIds(inventoryItemIds).stream()
589
                    .filter(x -> x.getSerialNumber() != null && !x.getSerialNumber().equals(""))
788
                    .filter(x -> x.getSerialNumber() != null && !x.getSerialNumber().equals(""))
590
                    .collect(Collectors.toSet());
789
                    .collect(Collectors.toSet());
591
            inventoryItems = inventoryItems.stream().filter(inventoryItem -> !BLOCKED_IMEIS.contains(inventoryItem.getSerialNumber())).collect(Collectors.toSet());
790
            inventoryItems = inventoryItems.stream().filter(inventoryItem -> !BLOCKED_IMEIS.contains(inventoryItem.getSerialNumber())).collect(Collectors.toSet());
592
            if (inventoryItems.size() == 0) {
-
 
593
                return 0;
-
 
594
            }
-
 
595
            Set<Integer> itemIds = inventoryItems.stream().map(x -> x.getItemId()).collect(Collectors.toSet());
-
 
596
 
791
 
597
            // Remove Items that are eol now.
-
 
598
            Set<Integer> itemIdsSet = tagListingRepository.selectByItemIdsAndTagIds(itemIds, tagIds).stream()
-
 
599
                    .filter(x -> x.getEolDate() == null || x.getEolDate().isAfter(fofoOrder.getCreateTimestamp()))
-
 
600
                    .map(x -> x.getItemId()).collect(Collectors.toSet());
-
 
601
            // Only consider inventory items that were not returned
792
            if (inventoryItems.size() == 0) return 0;
602
            //ItemCriteria itemCriteria = new ItemCriteria();
-
 
603
            //itemCriteria.setItemIds(new ArrayList<>(itemIdsSet));
-
 
604
            //List<Integer> catalogIds = itemRepository.getCatalogIds(itemCriteria);
-
 
605
            inventoryItems = inventoryItems.stream().filter(x -> itemIdsSet.contains(x.getItemId()))
-
 
606
                    .collect(Collectors.toSet());
-
 
607
 
793
 
608
            if (inventoryItems.size() == 0) {
794
            Map<Integer, List<InventoryItem>> catalogInventoryItemMap = inventoryItems.stream().collect(Collectors.groupingBy(x -> x.getItem().getCatalogItemId()));
-
 
795
            Map<CatalogSummaryModel, List<SchemeSummaryModel>> catalogSchemeSummaryMap = tagListingRepository.getModelSchemesByCatalogIdsAndType(retailerId,
609
                return 0;
796
                    partnerType, new ArrayList<>(catalogInventoryItemMap.keySet()), fofoOrder.getCreateTimestamp());
610
            }
-
 
611
 
797
 
612
            int count = 0;
-
 
613
 
798
 
614
            List<SchemeType> allOutSchemeTypes = new ArrayList<>();
799
            int count = 0;
615
            allOutSchemeTypes.addAll(Arrays.asList(SchemeType.ACTIVATION, SchemeType.INVESTMENT, SchemeType.SPECIAL_SUPPORT, SchemeType.SELLOUT));
800
            for (Map.Entry<CatalogSummaryModel, List<SchemeSummaryModel>> catalogSummaryModelListEntry : catalogSchemeSummaryMap.entrySet()) {
616
            allOutSchemeTypes.addAll(OUT_SCHEME_TYPES);
801
                CatalogSummaryModel catalogSummaryModel = catalogSummaryModelListEntry.getKey();
617
            List<Scheme> allActiveSchemes = schemeRepository.selectActiveAll(allOutSchemeTypes, partnerType,
802
                List<SchemeSummaryModel> schemeSummaryModels = catalogSummaryModelListEntry.getValue();
618
                    fofoOrder.getCreateTimestamp().toLocalDate(), false);
803
                List<SchemeType> allOutSchemeTypes = new ArrayList<>();
619
            List<Integer> validSchemeIds = schemeRepository.selectSchemesByRetailerIdsSchemeIds(retailerId, allActiveSchemes.stream().map(x -> x.getId()).collect(Collectors.toList()));
-
 
620
            allActiveSchemes = allActiveSchemes.stream().filter(x -> validSchemeIds.contains(x.getId())).collect(Collectors.toList());
804
                allOutSchemeTypes.addAll(Arrays.asList(SchemeType.ACTIVATION, SchemeType.INVESTMENT, SchemeType.SPECIAL_SUPPORT, SchemeType.SELLOUT));
621
            for (InventoryItem inventoryItem : inventoryItems) {
-
 
622
                float itemCashback = 0;
-
 
623
                Set<Integer> schemeIds = new HashSet<>(
805
                allOutSchemeTypes.addAll(OUT_SCHEME_TYPES);
624
                        schemeItemRepository.selectSchemeIdByCatalogId(inventoryItem.getItem().getCatalogItemId()));
806
                schemeSummaryModels.stream().filter(x -> allOutSchemeTypes.contains(x.getSchemeType())).forEach(x -> x.setProcess(true));
625
                List<Scheme> itemActiveSchemes = allActiveSchemes.stream().filter(x -> schemeIds.contains(x.getId()))
807
                if (schemeSummaryModels.stream().filter(x -> x.isProcess()).count() == 0) continue;
626
                        .collect(Collectors.toList());
-
 
-
 
808
 
627
                List<Scheme> supportSchemes = itemActiveSchemes.stream().filter(x -> Arrays.asList(SchemeType.SPECIAL_SUPPORT, SchemeType.ACTIVATION, SchemeType.SELLOUT).contains(x.getType())).collect(Collectors.toList());
809
                List<InventoryItem> modelInventoryItems = catalogInventoryItemMap.get(catalogSummaryModel.getCatalogId());
628
                itemActiveSchemes = itemActiveSchemes.stream().filter(x -> !Arrays.asList(SchemeType.SPECIAL_SUPPORT, SchemeType.ACTIVATION, SchemeType.SELLOUT).contains(x.getType())).collect(Collectors.toList());
-
 
629
                for (Scheme scheme : itemActiveSchemes) {
810
                for (InventoryItem inventoryItem : modelInventoryItems) {
630
                    LOGGER.info("Scheme ==== {}", scheme);
-
 
631
                    itemCashback += this.createSchemeInOut(scheme, inventoryItem, partnerType);
811
                    float inventoryItemCashback = this.createSchemeInOut(schemeSummaryModels, inventoryItem, partnerType);
632
                }
-
 
633
                if (supportSchemes.size() > 0) {
812
                    if (inventoryItemCashback > 0) {
634
                    this.processSpecialSupport(fofoOrder, supportSchemes, inventoryItem, partnerType, fofoOrder.getCreateTimestamp());
-
 
635
                }
813
                        count++;
636
                LOGGER.info("itemCashback ==== {}", itemCashback);
814
                        totalCashback += inventoryItemCashback;
637
                if (itemCashback > 0) {
-
 
638
                    count++;
815
                    }
639
                    totalCashback += itemCashback;
-
 
640
                }
816
                }
641
            }
817
            }
-
 
818
 
642
            if (count > 0) {
819
            if (count > 0) {
643
                walletService.addAmountToWallet(
820
                walletService.addAmountToWallet(
644
                        retailerId, fofoOrderId, WalletReferenceType.SCHEME_OUT, "Sales margin for invoice number "
821
                        retailerId, fofoOrderId, WalletReferenceType.SCHEME_OUT, "Sales margin for invoice number "
645
                                + fofoOrder.getInvoiceNumber() + ". Total " + count + " pc(s)",
822
                                + fofoOrder.getInvoiceNumber() + ". Total " + count + " pc(s)",
646
                        totalCashback, fofoOrder.getCreateTimestamp());
823
                        totalCashback, fofoOrder.getCreateTimestamp());
Line 676... Line 853...
676
            float amountToCredit = scheme.getAmount() * (1 - (totalMargin / 100));
853
            float amountToCredit = scheme.getAmount() * (1 - (totalMargin / 100));
677
            List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectByScheme(scheme.getId(), inventoryItem.getId());
854
            List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectByScheme(scheme.getId(), inventoryItem.getId());
678
            SchemeInOut schemeInOut = schemeInOuts.stream().filter(x -> x.getRolledBackTimestamp() == null).findFirst().orElse(null);
855
            SchemeInOut schemeInOut = schemeInOuts.stream().filter(x -> x.getRolledBackTimestamp() == null).findFirst().orElse(null);
679
            if (schemeInOut == null) {
856
            if (schemeInOut == null) {
680
                schemeInOut = new SchemeInOut();
857
                schemeInOut = new SchemeInOut();
-
 
858
                schemeInOut.setInventoryItemId(inventoryItem.getId());
681
                schemeInOut.setSchemeId(scheme.getId());
859
                schemeInOut.setSchemeId(scheme.getId());
682
                schemeInOut.setInventoryItemId(inventoryItem.getId());
860
                schemeInOut.setInventoryItemId(inventoryItem.getId());
683
                schemeInOut.setCreateTimestamp(LocalDateTime.now());
861
                schemeInOut.setCreateTimestamp(LocalDateTime.now());
684
                if (SchemeType.SELLOUT.equals(scheme.getType())) {
862
                if (SchemeType.SELLOUT.equals(scheme.getType())) {
685
                    schemeInOut.setStatus(SchemePayoutStatus.CREDITED);
863
                    schemeInOut.setStatus(SchemePayoutStatus.CREDITED);
Line 912... Line 1090...
912
                                .parseInt(FormattingUtils.getYearMonth(schemeTypeMap.get(SchemeType.INVESTMENT).getCreditTimestamp().minusMonths(1)));
1090
                                .parseInt(FormattingUtils.getYearMonth(schemeTypeMap.get(SchemeType.INVESTMENT).getCreditTimestamp().minusMonths(1)));
913
                    }
1091
                    }
914
 
1092
 
915
                }
1093
                }
916
                walletService.rollbackAmountFromWallet(fofoId, amountToRollback, reversalReference, walletReferenceType,
1094
                walletService.rollbackAmountFromWallet(fofoId, amountToRollback, reversalReference, walletReferenceType,
917
                    reversalReason, LocalDateTime.now());
1095
                        reversalReason, LocalDateTime.now());
918
        }
1096
            }
919
    }
1097
    }
920
 
1098
 
921
    @Override
1099
    @Override
922
    public double getTotalMargin(int itemId, PartnerType partnerType, LocalDateTime dateTime) {
1100
    public double getTotalMargin(int itemId, PartnerType partnerType, LocalDateTime dateTime) {
923
        Session session = sessionFactory.getCurrentSession();
1101
        Session session = sessionFactory.getCurrentSession();
Line 965... Line 1143...
965
        itemCashbackMap.remove(30756);
1143
        itemCashbackMap.remove(30756);
966
        return itemCashbackMap;
1144
        return itemCashbackMap;
967
    }
1145
    }
968
 
1146
 
969
    @Override
1147
    @Override
970
    public List<Scheme> selectSchemeByPartnerTypeFofoId(PartnerType partnerType, LocalDate onDate, int catalogId, int fofoId, int offset, int limit) throws ProfitMandiBusinessException {
1148
    public List<Scheme> selectSchemeByPartnerTypeFofoId(PartnerType partnerType, LocalDate onDate, int catalogId,
-
 
1149
                                                        int fofoId, int offset, int limit) throws ProfitMandiBusinessException {
971
        Session session = sessionFactory.getCurrentSession();
1150
        Session session = sessionFactory.getCurrentSession();
972
        final TypedQuery<Scheme> typedQuery = session.createNamedQuery(
1151
        final TypedQuery<Scheme> typedQuery = session.createNamedQuery(
973
                "Scheme.selectSchemeByModelsPartnerTypeFofoId", Scheme.class);
1152
                "Scheme.selectSchemeByModelsPartnerTypeFofoId", Scheme.class);
974
        typedQuery.setParameter("catalogIds", Arrays.asList(catalogId));
1153
        typedQuery.setParameter("catalogIds", Arrays.asList(catalogId));
975
        typedQuery.setParameter("fofoIds", Arrays.asList(fofoId, 0));
1154
        typedQuery.setParameter("fofoIds", Arrays.asList(fofoId, 0));
Line 1114... Line 1293...
1114
                FofoOrder fofoOrder = validOrdersMap.get(schemesImeisModel.getOrderId());
1293
                FofoOrder fofoOrder = validOrdersMap.get(schemesImeisModel.getOrderId());
1115
                PartnerType partnerType = partnerTypeChangeService.getTypeOnMonth(fofoOrder.getFofoId(),
1294
                PartnerType partnerType = partnerTypeChangeService.getTypeOnMonth(fofoOrder.getFofoId(),
1116
                        YearMonth.from(fofoOrder.getCreateTimestamp()));
1295
                        YearMonth.from(fofoOrder.getCreateTimestamp()));
1117
                this.processSpecialSupport(fofoOrder, supportSchemes, inventoryItem, partnerType, fofoOrder.getCreateTimestamp());
1296
                this.processSpecialSupport(fofoOrder, supportSchemes, inventoryItem, partnerType, fofoOrder.getCreateTimestamp());
1118
            }
1297
            }
1119
 
-
 
1120
        }
1298
        }
1121
 
-
 
1122
    }
1299
    }
1123
 
-
 
1124
}
1300
}