| 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 |
}
|