Class DefaultPotentialSavingsCalculator
java.lang.Object
com.broadleafcommerce.promotion.offer.service.engine.application.processor.helper.item.DefaultPotentialSavingsCalculator
- All Implemented Interfaces:
PotentialSavingsCalculator
- Author:
- Nathan Moore (nathanmoore).
-
Constructor Summary
ConstructorDescriptionDefaultPotentialSavingsCalculator
(com.broadleafcommerce.common.extension.TypeFactory offerFactory) -
Method Summary
Modifier and TypeMethodDescriptionprotected void
assertCandidateOfferNotNull
(CandidateItemOffer candidateOffer) protected void
assertCommonParamsNotNull
(EnhancedOrder order, CandidateItemOffer candidateOffer) protected void
assertOfferNotNull
(Offer offer) javax.money.MonetaryAmount
calculateDiscountForItem
(CandidateItemOffer itemOffer, EnhancedLineItem item, int quantityToReceiveDiscount) Calculates the potential discount of aCandidateItemOffer
for anEnhancedLineItem
.calculatePotentialSavingsForOffer
(EnhancedOrder order, CandidateItemOffer itemOffer, boolean isForFulfillment) Calculates theTotalPotentialSavings
for all of the givenEnhancedOrder.getOrderLineItems()
order's order line items} if the givenCandidateItemOffer
was applied.protected BigDecimal
calculateSimplePercent
(javax.money.MonetaryAmount itemSubTotal, javax.money.MonetaryAmount itemSavings) protected BigDecimal
calculateWeightedPercent
(EnhancedLineItem item, javax.money.MonetaryAmount itemSavings, boolean useSalePrice) javax.money.MonetaryAmount
computeAdjustmentValue
(javax.money.MonetaryAmount currentPrice, CandidateItemOffer itemOffer) CallsPotentialSavingsCalculator.computeAdjustmentValue(javax.money.MonetaryAmount, com.broadleafcommerce.promotion.offer.service.dto.CandidateItemOffer, double)
with a proration amount of 1 meaning no proration.}javax.money.MonetaryAmount
computeAdjustmentValue
(javax.money.MonetaryAmount currentPrice, CandidateItemOffer itemOffer, double prorationAmount) Computes the adjustment value of aCandidateItemOffer
for a targetedEnhancedLineItem
.protected Optional<DiscountTier>
determineMaxTier
(CandidateItemOffer itemOffer, List<DiscountTier> discountTiers) protected DiscountParameters
Determines thediscount method type
and discount amount for thecandidate offer
, accounting forOffer.getDiscountTiers()
.void
finalizePotentialSavingsOnOffer
(CandidateItemOffer itemOffer, TotalPotentialSavings totalPotentialSavings) Saves the finalBaseCandidateOffer.getPotentialSavings()
andCandidateItemOffer.getWeightedPercentSaved()
for all of anEnhancedOrder.getOrderLineItems()
order's order items} if the givenCandidateItemOffer
was applied.protected DiscountTier
getMaxTierForTieredItemQty
(CandidateItemOffer itemOffer, List<DiscountTier> discountTiers, int quantityForTierOffer) protected DiscountTier
getMaxTierForTieredItemSubtotal
(CandidateItemOffer itemOffer, List<DiscountTier> discountTiers, BigDecimal amountForTierOffer) protected com.broadleafcommerce.common.extension.TypeFactory
protected boolean
isPercentOffOffer
(Offer offer) protected void
setPotentialSavings
(CandidateItemOffer itemOffer, javax.money.MonetaryAmount potentialSavings) protected void
setWeightedDiscountPercent
(CandidateItemOffer itemOffer, BigDecimal weightedDiscountPercent) protected boolean
protected boolean
usePercentOffValue
(Offer offer)
-
Constructor Details
-
DefaultPotentialSavingsCalculator
public DefaultPotentialSavingsCalculator(com.broadleafcommerce.common.extension.TypeFactory offerFactory)
-
-
Method Details
-
calculatePotentialSavingsForOffer
@NonNull public TotalPotentialSavings calculatePotentialSavingsForOffer(@NonNull EnhancedOrder order, @NonNull CandidateItemOffer itemOffer, boolean isForFulfillment) Description copied from interface:PotentialSavingsCalculator
Calculates theTotalPotentialSavings
for all of the givenEnhancedOrder.getOrderLineItems()
order's order line items} if the givenCandidateItemOffer
was applied.- Specified by:
calculatePotentialSavingsForOffer
in interfacePotentialSavingsCalculator
- Parameters:
order
- TheEnhancedOrder
for whose items to calculate potential savings provided byCandidateItemOffer
itemOffer
- TheCandidateItemOffer
whose discount will be used to calculate potential savingsisForFulfillment
- whether this calculation should useEnhancedOrder.getFulfillmentLineItems()
instead ofEnhancedOrder.getOrderLineItems()
- Returns:
TotalPotentialSavings
DTO containing the total savings info for all of theEnhancedOrder.getOrderLineItems()
order's order items}
-
finalizePotentialSavingsOnOffer
public void finalizePotentialSavingsOnOffer(@NonNull CandidateItemOffer itemOffer, @NonNull TotalPotentialSavings totalPotentialSavings) Description copied from interface:PotentialSavingsCalculator
Saves the finalBaseCandidateOffer.getPotentialSavings()
andCandidateItemOffer.getWeightedPercentSaved()
for all of anEnhancedOrder.getOrderLineItems()
order's order items} if the givenCandidateItemOffer
was applied.- Specified by:
finalizePotentialSavingsOnOffer
in interfacePotentialSavingsCalculator
- Parameters:
itemOffer
- TheCandidateItemOffer
whose discount was used to calculate the potential savingstotalPotentialSavings
-TotalPotentialSavings
DTO containing the total savings info for all of anEnhancedOrder.getOrderLineItems()
order's order items}
-
calculateDiscountForItem
@NonNull public javax.money.MonetaryAmount calculateDiscountForItem(@NonNull CandidateItemOffer itemOffer, @NonNull EnhancedLineItem item, int quantityToReceiveDiscount) Description copied from interface:PotentialSavingsCalculator
Calculates the potential discount of aCandidateItemOffer
for anEnhancedLineItem
.- Specified by:
calculateDiscountForItem
in interfacePotentialSavingsCalculator
- Parameters:
itemOffer
- TheCandidateItemOffer
for which to find a potential discount.item
- TheEnhancedLineItem
to discount.quantityToReceiveDiscount
- The quantity of items in theEnhancedLineItem
that can receive a discount from the offer- Returns:
- the discount amount of a
CandidateItemOffer
for anEnhancedLineItem
.
-
computeAdjustmentValue
@NonNull public javax.money.MonetaryAmount computeAdjustmentValue(@NonNull javax.money.MonetaryAmount currentPrice, @NonNull CandidateItemOffer itemOffer) Description copied from interface:PotentialSavingsCalculator
CallsPotentialSavingsCalculator.computeAdjustmentValue(javax.money.MonetaryAmount, com.broadleafcommerce.promotion.offer.service.dto.CandidateItemOffer, double)
with a proration amount of 1 meaning no proration.}- Specified by:
computeAdjustmentValue
in interfacePotentialSavingsCalculator
- Returns:
- the adjustment value of a
CandidateItemOffer
for a targetedEnhancedLineItem
-
computeAdjustmentValue
@NonNull public javax.money.MonetaryAmount computeAdjustmentValue(@NonNull javax.money.MonetaryAmount currentPrice, @NonNull CandidateItemOffer itemOffer, double prorationAmount) Description copied from interface:PotentialSavingsCalculator
Computes the adjustment value of aCandidateItemOffer
for a targetedEnhancedLineItem
. If the adjusted value is greater than the targetorder item's current price
, then the current price is returned.- Specified by:
computeAdjustmentValue
in interfacePotentialSavingsCalculator
- Parameters:
currentPrice
- Current price of theEnhancedLineItem
(may include previous orderAdjustments)itemOffer
- TheCandidateItemOffer
for which to find an adjustment value.prorationAmount
- For Offers withOffer.isDistributeOfferAmountToTargets()
, the relative amount for the item being priced.- Returns:
- the adjustment value of a
CandidateItemOffer
for a targetedEnhancedLineItem
-
determineOfferDiscountParameters
Determines thediscount method type
and discount amount for thecandidate offer
, accounting forOffer.getDiscountTiers()
.- Parameters:
itemOffer
-CandidateItemOffer
from which to retrieve discount parameters- Returns:
- the
discount method type
and discount amount for thecandidate offer
-
determineMaxTier
protected Optional<DiscountTier> determineMaxTier(CandidateItemOffer itemOffer, List<DiscountTier> discountTiers) - Parameters:
itemOffer
-discountTiers
-- Returns:
- The maximum tier that is eligible.
-
getMaxTierForTieredItemSubtotal
@Nullable protected DiscountTier getMaxTierForTieredItemSubtotal(CandidateItemOffer itemOffer, List<DiscountTier> discountTiers, BigDecimal amountForTierOffer) -
getMaxTierForTieredItemQty
@Nullable protected DiscountTier getMaxTierForTieredItemQty(CandidateItemOffer itemOffer, List<DiscountTier> discountTiers, int quantityForTierOffer) -
calculateSimplePercent
protected BigDecimal calculateSimplePercent(javax.money.MonetaryAmount itemSubTotal, javax.money.MonetaryAmount itemSavings) -
calculateWeightedPercent
protected BigDecimal calculateWeightedPercent(EnhancedLineItem item, javax.money.MonetaryAmount itemSavings, boolean useSalePrice) -
shouldCalculateSimplePercent
-
assertOfferNotNull
-
isPercentOffOffer
-
usePercentOffValue
-
setWeightedDiscountPercent
protected void setWeightedDiscountPercent(CandidateItemOffer itemOffer, BigDecimal weightedDiscountPercent) -
setPotentialSavings
protected void setPotentialSavings(CandidateItemOffer itemOffer, javax.money.MonetaryAmount potentialSavings) -
assertCommonParamsNotNull
-
assertCandidateOfferNotNull
-
getOfferFactory
protected com.broadleafcommerce.common.extension.TypeFactory getOfferFactory()
-