Subversion Repositories SmartDukaan

Rev

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

Rev 35861 Rev 35885
Line 9... Line 9...
9
import com.spice.profitmandi.common.util.FileUtil;
9
import com.spice.profitmandi.common.util.FileUtil;
10
import com.spice.profitmandi.common.util.FormattingUtils;
10
import com.spice.profitmandi.common.util.FormattingUtils;
11
import com.spice.profitmandi.common.util.Utils;
11
import com.spice.profitmandi.common.util.Utils;
12
import com.spice.profitmandi.dao.entity.catalog.ItemCriteria;
12
import com.spice.profitmandi.dao.entity.catalog.ItemCriteria;
13
import com.spice.profitmandi.dao.entity.catalog.Offer;
13
import com.spice.profitmandi.dao.entity.catalog.Offer;
-
 
14
import com.spice.profitmandi.dao.entity.catalog.OfferPartner;
14
import com.spice.profitmandi.dao.entity.catalog.TagListing;
15
import com.spice.profitmandi.dao.entity.catalog.TagListing;
15
import com.spice.profitmandi.dao.entity.catalog.TargetSlabEntity;
16
import com.spice.profitmandi.dao.entity.catalog.TargetSlabEntity;
16
import com.spice.profitmandi.dao.entity.fofo.FofoLineItem;
17
import com.spice.profitmandi.dao.entity.fofo.FofoLineItem;
17
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
18
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
18
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
19
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
Line 27... Line 28...
27
import com.spice.profitmandi.dao.enumuration.catalog.OfferSchemeType;
28
import com.spice.profitmandi.dao.enumuration.catalog.OfferSchemeType;
28
import com.spice.profitmandi.dao.enumuration.transaction.SchemePayoutStatus;
29
import com.spice.profitmandi.dao.enumuration.transaction.SchemePayoutStatus;
29
import com.spice.profitmandi.dao.model.*;
30
import com.spice.profitmandi.dao.model.*;
30
import com.spice.profitmandi.dao.repository.GenericRepository;
31
import com.spice.profitmandi.dao.repository.GenericRepository;
31
import com.spice.profitmandi.dao.repository.catalog.*;
32
import com.spice.profitmandi.dao.repository.catalog.*;
-
 
33
import com.spice.profitmandi.dao.repository.catalog.OfferPartnerRepository;
32
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
34
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
33
import com.spice.profitmandi.dao.repository.fofo.ActivatedImeiRepository;
35
import com.spice.profitmandi.dao.repository.fofo.ActivatedImeiRepository;
34
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
36
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
35
import com.spice.profitmandi.dao.repository.fofo.OfferPayoutRepository;
37
import com.spice.profitmandi.dao.repository.fofo.OfferPayoutRepository;
36
import com.spice.profitmandi.dao.repository.transaction.LineItemImeisRepository;
38
import com.spice.profitmandi.dao.repository.transaction.LineItemImeisRepository;
Line 95... Line 97...
95
 
97
 
96
    @Autowired
98
    @Autowired
97
    private OfferTargetSlabRepository offerTargetSlabRepository;
99
    private OfferTargetSlabRepository offerTargetSlabRepository;
98
 
100
 
99
    @Autowired
101
    @Autowired
-
 
102
    private OfferPartnerRepository offerPartnerRepository;
-
 
103
 
-
 
104
    @Autowired
100
    private ItemCriteriaRepository itemCriteriaRepository;
105
    private ItemCriteriaRepository itemCriteriaRepository;
101
 
106
 
102
    @Autowired
107
    @Autowired
103
    private ItemRepository itemRepository;
108
    private ItemRepository itemRepository;
104
 
109
 
Line 294... Line 299...
294
        List<com.spice.profitmandi.dao.model.TargetSlab> targetSlabs = offerTargetSlabRepository
299
        List<com.spice.profitmandi.dao.model.TargetSlab> targetSlabs = offerTargetSlabRepository
295
                .getByOfferId(fromOffer.getId());
300
                .getByOfferId(fromOffer.getId());
296
        createOfferRequest.setPartnerCriteriaString(
301
        createOfferRequest.setPartnerCriteriaString(
297
                this.getPartnerCriteriaString(createOfferRequest.getPartnerCriteria()));
302
                this.getPartnerCriteriaString(createOfferRequest.getPartnerCriteria()));
298
        createOfferRequest.setTargetSlabs(targetSlabs);
303
        createOfferRequest.setTargetSlabs(targetSlabs);
-
 
304
        if (!targetSlabs.isEmpty() && !targetSlabs.get(0).getItemCriteriaPayouts().isEmpty()) {
299
        for (com.spice.profitmandi.dao.model.ItemCriteriaPayout itemCriteriaPayout : createOfferRequest.getTargetSlabs()
305
            for (com.spice.profitmandi.dao.model.ItemCriteriaPayout itemCriteriaPayout : targetSlabs.get(0).getItemCriteriaPayouts()) {
300
                .get(0).getItemCriteriaPayouts()) {
306
                if (!itemCriteriaPayout.getPayoutSlabs().isEmpty()) {
301
            itemCriteriaPayout.setNextSlab(itemCriteriaPayout.getPayoutSlabs().get(0));
307
                    itemCriteriaPayout.setNextSlab(itemCriteriaPayout.getPayoutSlabs().get(0));
-
 
308
                }
-
 
309
            }
302
        }
310
        }
303
        return createOfferRequest;
311
        return createOfferRequest;
304
    }
312
    }
305
 
313
 
306
    @Override
314
    @Override
Line 348... Line 356...
348
                    for (ItemCriteriaPayout itemCriteriaPayout : itemCriteriaPayouts) {
356
                    for (ItemCriteriaPayout itemCriteriaPayout : itemCriteriaPayouts) {
349
                        ItemCriteria itemCriteria = itemCriteriaRepository.selectById(itemCriteriaPayout.getItemCriteria().getId());
357
                        ItemCriteria itemCriteria = itemCriteriaRepository.selectById(itemCriteriaPayout.getItemCriteria().getId());
350
                        if (itemCriteriaPayout.getItemCriteria().getId() > 0) {
358
                        if (itemCriteriaPayout.getItemCriteria().getId() > 0) {
351
                            itemCriteriaPayout.getItemCriteria().setId(0);
359
                            itemCriteriaPayout.getItemCriteria().setId(0);
352
                        } else {
360
                        } else {
353
 
-
 
354
                            String itemCriteriaJson = gson.toJson(itemCriteriaPayout.getItemCriteria());
361
                            String itemCriteriaJson = gson.toJson(itemCriteriaPayout.getItemCriteria());
355
                            itemCriteria = itemCriteriaRepository.selectByCriteria(itemCriteriaJson);
362
                            itemCriteria = itemCriteriaRepository.selectByCriteria(itemCriteriaJson);
356
                            // ItemCriteria Only once
363
                            // ItemCriteria Only once
357
                            if (itemCriteria == null) {
364
                            if (itemCriteria == null) {
358
                                itemCriteria = new ItemCriteria();
365
                                itemCriteria = new ItemCriteria();
Line 1537... Line 1544...
1537
            offer.setActive(true);
1544
            offer.setActive(true);
1538
        }
1545
        }
1539
        LOGGER.info("Published {} unpublished offers for {}", unpublished.size(), yearMonth);
1546
        LOGGER.info("Published {} unpublished offers for {}", unpublished.size(), yearMonth);
1540
        return unpublished;
1547
        return unpublished;
1541
    }
1548
    }
-
 
1549
 
-
 
1550
    @Override
-
 
1551
    public void removePartnersFromOffer(int offerId, List<Integer> fofoIds) throws ProfitMandiBusinessException {
-
 
1552
        Offer offer = offerRepository.selectById(offerId);
-
 
1553
        if (offer == null) {
-
 
1554
            throw new ProfitMandiBusinessException("Offer not found", "Offer not found", "");
-
 
1555
        }
-
 
1556
        PartnerCriteria partnerCriteria = gson.fromJson(offer.getPartnerCriteria(), PartnerCriteria.class);
-
 
1557
        if (partnerCriteria.getFofoIds() != null) {
-
 
1558
            partnerCriteria.getFofoIds().removeAll(fofoIds);
-
 
1559
        }
-
 
1560
        offer.setPartnerCriteria(gson.toJson(partnerCriteria));
-
 
1561
        genericRepository.persist(offer);
-
 
1562
        offerPartnerRepository.deleteByOfferIdAndFofoIds(offerId, fofoIds);
-
 
1563
        LOGGER.info("Removed partners {} from offer {}", fofoIds, offerId);
-
 
1564
    }
-
 
1565
 
-
 
1566
    @Override
-
 
1567
    public void addPartnersToOffer(int offerId, List<Integer> fofoIds) throws ProfitMandiBusinessException {
-
 
1568
        Offer offer = offerRepository.selectById(offerId);
-
 
1569
        if (offer == null) {
-
 
1570
            throw new ProfitMandiBusinessException("Offer not found", "Offer not found", "");
-
 
1571
        }
-
 
1572
        PartnerCriteria partnerCriteria = gson.fromJson(offer.getPartnerCriteria(), PartnerCriteria.class);
-
 
1573
        List<Integer> existingFofoIds = partnerCriteria.getFofoIds();
-
 
1574
        if (existingFofoIds == null) {
-
 
1575
            existingFofoIds = new ArrayList<>();
-
 
1576
        }
-
 
1577
        for (int fofoId : fofoIds) {
-
 
1578
            if (!existingFofoIds.contains(fofoId)) {
-
 
1579
                existingFofoIds.add(fofoId);
-
 
1580
                OfferPartner offerPartner = new OfferPartner();
-
 
1581
                offerPartner.setOfferId(offerId);
-
 
1582
                offerPartner.setFofoId(fofoId);
-
 
1583
                offerPartnerRepository.persist(offerPartner);
-
 
1584
            }
-
 
1585
        }
-
 
1586
        partnerCriteria.setFofoIds(existingFofoIds);
-
 
1587
        offer.setPartnerCriteria(gson.toJson(partnerCriteria));
-
 
1588
        genericRepository.persist(offer);
-
 
1589
        LOGGER.info("Added partners {} to offer {}", fofoIds, offerId);
-
 
1590
    }
-
 
1591
 
-
 
1592
    @Override
-
 
1593
    public int cloneOfferForPartners(int sourceOfferId, List<Integer> fofoIds, List<Integer> targets) throws ProfitMandiBusinessException {
-
 
1594
        Offer sourceOffer = offerRepository.selectById(sourceOfferId);
-
 
1595
        if (sourceOffer == null) {
-
 
1596
            throw new ProfitMandiBusinessException("Source offer not found", "Source offer not found", "");
-
 
1597
        }
-
 
1598
        CreateOfferRequest clonedRequest = this.getCreateOfferRequest(sourceOffer);
-
 
1599
        clonedRequest.setId(0);
-
 
1600
        clonedRequest.setActive(false);
-
 
1601
 
-
 
1602
        PartnerCriteria newPartnerCriteria = new PartnerCriteria();
-
 
1603
        newPartnerCriteria.setFofoIds(new ArrayList<>(fofoIds));
-
 
1604
        newPartnerCriteria.setExcludeFofoIds(new ArrayList<>());
-
 
1605
        newPartnerCriteria.setRegionIds(clonedRequest.getPartnerCriteria().getRegionIds() != null
-
 
1606
                ? new ArrayList<>(clonedRequest.getPartnerCriteria().getRegionIds()) : new ArrayList<>());
-
 
1607
        newPartnerCriteria.setPartnerTypes(clonedRequest.getPartnerCriteria().getPartnerTypes() != null
-
 
1608
                ? new ArrayList<>(clonedRequest.getPartnerCriteria().getPartnerTypes()) : new ArrayList<>());
-
 
1609
        clonedRequest.setPartnerCriteria(newPartnerCriteria);
-
 
1610
 
-
 
1611
        if (targets != null && !targets.isEmpty() && !clonedRequest.getTargetSlabs().isEmpty()) {
-
 
1612
            List<PayoutSlab> payoutSlabs = clonedRequest.getTargetSlabs().get(0).getItemCriteriaPayouts()
-
 
1613
                    .stream().flatMap(x -> x.getPayoutSlabs().stream()).collect(Collectors.toList());
-
 
1614
            int counter = 0;
-
 
1615
            for (PayoutSlab payoutSlab : payoutSlabs) {
-
 
1616
                if (counter < targets.size()) {
-
 
1617
                    payoutSlab.setOnwardsAmount(targets.get(counter));
-
 
1618
                    counter++;
-
 
1619
                }
-
 
1620
            }
-
 
1621
        }
-
 
1622
 
-
 
1623
        this.addOfferService(clonedRequest);
-
 
1624
        LOGGER.info("Cloned offer {} to new offer {} for partners {}", sourceOfferId, clonedRequest.getId(), fofoIds);
-
 
1625
        return clonedRequest.getId();
-
 
1626
    }
-
 
1627
 
-
 
1628
    @Override
-
 
1629
    public void updateOfferTargets(int offerId, List<Integer> newTargets) throws ProfitMandiBusinessException {
-
 
1630
        Offer offer = offerRepository.selectById(offerId);
-
 
1631
        if (offer == null) {
-
 
1632
            throw new ProfitMandiBusinessException("Offer not found", "Offer not found", "");
-
 
1633
        }
-
 
1634
        List<TargetSlabEntity> targetSlabs = offerTargetSlabRepository.selectEntitiesByOfferId(offerId);
-
 
1635
        targetSlabs.sort(Comparator.comparing(TargetSlabEntity::getPayoutTarget));
-
 
1636
 
-
 
1637
        if (newTargets.size() != targetSlabs.size()) {
-
 
1638
            throw new ProfitMandiBusinessException(
-
 
1639
                    "Target count mismatch. Expected " + targetSlabs.size() + " but got " + newTargets.size(),
-
 
1640
                    "Target count mismatch", "");
-
 
1641
        }
-
 
1642
        for (int i = 0; i < targetSlabs.size(); i++) {
-
 
1643
            targetSlabs.get(i).setPayoutTarget(newTargets.get(i));
-
 
1644
            genericRepository.persist(targetSlabs.get(i));
-
 
1645
        }
-
 
1646
        LOGGER.info("Updated targets for offer {} to {}", offerId, newTargets);
-
 
1647
    }
1542
}
1648
}