Class DefaultRuleEngineCalculationService
- java.lang.Object
-
- de.hybris.platform.ruleengineservices.calculation.impl.DefaultRuleEngineCalculationService
-
- All Implemented Interfaces:
RuleEngineCalculationService
public class DefaultRuleEngineCalculationService extends java.lang.Object implements RuleEngineCalculationService
The DefaultRuleEngineCalculationService uses the order calculation facilities to calculate the order and cart.
-
-
Constructor Summary
Constructors Constructor Description DefaultRuleEngineCalculationService()
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description java.util.List<DiscountRAO>addFixedPriceEntriesDiscount(CartRAO cartRao, java.util.Map<java.lang.Integer,java.lang.Integer> selectedOrderEntryMap, java.util.Set<OrderEntryRAO> selectedOrderEntryRaos, java.math.BigDecimal fixedPrice)Creates order entry level discounts for the cartcartRao, with thefixedPricegiven as parameter and for the products from entries inselectedOrderEntryRaosand related quantities given inselectedOrderEntryMap.DiscountRAOaddFixedPriceEntryDiscount(OrderEntryRAO orderEntryRao, java.math.BigDecimal fixedPrice)Creates a new order entry level discount such that the order entry's price will be equal to the givenfixedPricemultiplied by quantity.FreeProductRAOaddFreeProductsToCart(CartRAO cartRao, ProductModel product, int quantity)Adds free product items to the cart.DiscountRAOaddOrderEntryLevelDiscount(OrderEntryRAO orderEntryRao, boolean absolute, java.math.BigDecimal amount)creates a DiscountRAO for the given OrderEntryRAO based on the input.protected DiscountRAOaddOrderEntryLevelDiscount(OrderEntryRAO orderEntryRao, boolean absolute, java.math.BigDecimal amount, int consumedQty)java.util.List<DiscountRAO>addOrderEntryLevelDiscount(java.util.Map<java.lang.Integer,java.lang.Integer> selectedOrderEntryMap, java.util.Set<OrderEntryRAO> selectedOrderEntryRaos, boolean absolute, java.math.BigDecimal amount)Creates order entry level discounts for the cartcartRao, adds it to the cartRao and updates the cartRao totals.DiscountRAOaddOrderLevelDiscount(CartRAO cartRao, boolean absolute, java.math.BigDecimal amount)creates a DiscountRAO for the given CartRAO based on the input.java.math.BigDecimalcalculateSubTotals(CartRAO cartRao, java.util.Collection<ProductRAO> excludedProducts)Deprecated, for removal: This API element is subject to removal in a future version.since 2005voidcalculateTotals(AbstractOrderRAO cartRao)performs a (re)calculation on the given abstractOrderRao and updates these properties:AbstractOrderRAO.getTotal()AbstractOrderRAO.getSubTotal()AbstractOrderRAO.getDeliveryCost()AbstractOrderRAO.getPaymentCost()ShipmentRAOchangeDeliveryMode(CartRAO cartRao, DeliveryModeRAO mode)Changes the current delivery mode to the given values, adds it to the cartRao and updates the carRao totals.protected java.math.BigDecimalconvertPercentageDiscountToAbsoluteDiscount(java.math.BigDecimal percentageAmount, int quantityToConsume, NumberedLineItem orderLineItem)protected java.math.BigDecimalconvertPercentageDiscountToAbsoluteDiscount(java.math.BigDecimal percentageAmount, Order cart)protected DiscountRAOcreateAbsoluteDiscountRAO(LineItem lineItem, java.math.BigDecimal amount, int applicableUnits, boolean perUnit)protected DiscountRAOcreateDiscountRAO(AbstractDiscount discount)Creates a new DiscountRAO based on the given AbstractDiscount.protected LineItemDiscountcreateLineItemDiscount(LineItem lineItem, boolean absolute, java.math.BigDecimal amount)Creates an LineItemDiscount based on the given values and adds it to the givenlineItem.protected LineItemDiscountcreateLineItemDiscount(LineItem lineItem, boolean absolute, java.math.BigDecimal amount, boolean perUnit)Creates an LineItemDiscount based on the given values and adds it to the givenlineItem.protected LineItemDiscountcreateLineItemDiscount(LineItem lineItem, boolean absolute, java.math.BigDecimal amount, boolean perUnit, int applicableUnits)protected OrderDiscountcreateOrderDiscount(Order cart, boolean absolute, java.math.BigDecimal amount)Creates an OrderDiscount based on the given values and adds it to the givencart.protected ShipmentRAOcreateShipmentRAO(DeliveryModeRAO mode)Creates a new ShipmentRAO based on the given Delivery Mode.protected OrderChargecreateShippingCharge(Order cart, boolean absolute, java.math.BigDecimal value)creates anOrderChargeofAbstractCharge.ChargeType.SHIPPINGfor the given values and adds it to the given cart.protected voidensureOrderEntryRAOEntryNumbers(AbstractOrderRAO abstractOrderRao)for the givenAbstractOrderRAOthis method ensures that each of theAbstractOrderRAO.getEntries()has a entry number set.protected OrderEntryRAOfindOrderEntryRAO(AbstractOrderRAO order, NumberedLineItem lineItem)returns the corresponding OrderEntryRAO for the givenlineItem.protected Converter<AbstractOrderRAO,Order>getAbstractOrderRaoToOrderConverter()protected RAOConsumptionSupportgetConsumptionSupport()protected CurrencyUtilsgetCurrencyUtils()java.math.BigDecimalgetCurrentPrice(java.util.Set<OrderEntryRAO> orderEntryForDiscounts, java.util.Map<java.lang.Integer,java.lang.Integer> discountedOrderEntryMap)Calculates current price of the set of Order Entries using only specified quantity of units for every Order Entry.protected NumberedLineItemLookupStrategygetLineItemLookupStrategy()protected MinimumAmountValidationStrategygetMinimumAmountValidationStrategy()protected Populator<ProductModel,OrderEntryRAO>getOrderEntryRaoProductPopulator()protected OrderUtilsgetOrderUtils()protected Converter<ProductModel,ProductRAO>getProductConverter()Deprecated, for removal: This API element is subject to removal in a future version.since 2005protected RaoUtilsgetRaoUtils()protected voidrecalculateTotals(AbstractOrderRAO cartRao, Order cart)Uses the givencartto recalculate the totals of the givencartRao.protected voidremoveShippingCharges(Order cart)Returns all Shipping charges from the Order.voidsetAbstractOrderRaoToOrderConverter(Converter<AbstractOrderRAO,Order> abstractOrderRaoToOrderConverter)voidsetConsumptionSupport(RAOConsumptionSupport consumptionSupport)voidsetCurrencyUtils(CurrencyUtils currencyUtils)voidsetLineItemLookupStrategy(NumberedLineItemLookupStrategy lineItemLookupStrategy)voidsetMinimumAmountValidationStrategy(MinimumAmountValidationStrategy minimumAmountValidationStrategy)voidsetOrderEntryRaoProductPopulator(Populator<ProductModel,OrderEntryRAO> orderEntryRaoProductPopulator)voidsetOrderUtils(OrderUtils orderUtils)voidsetProductConverter(Converter<ProductModel,ProductRAO> productConverter)Deprecated, for removal: This API element is subject to removal in a future version.since 2005voidsetRaoUtils(RaoUtils raoUtils)protected LineItemDiscountvalidateLineItemDiscount(LineItem lineItem, boolean absolute, Currency currency, LineItemDiscount discount)
-
-
-
Method Detail
-
addOrderLevelDiscount
public DiscountRAO addOrderLevelDiscount(CartRAO cartRao, boolean absolute, java.math.BigDecimal amount)
creates a DiscountRAO for the given CartRAO based on the input. Adds the discount to the cart RAO and recalculates the totals of the given CartRAO. The absolute parameter determines if the discount is an absolute one or a percentage based one. If absolute is set to false, the amount is read as an percent value, e.g. 10 for 10% (and not 0.1 for 10%)- Specified by:
addOrderLevelDiscountin interfaceRuleEngineCalculationService- Parameters:
cartRao- the cartRAOabsolute- whether the discount is absolute or a percentage discountamount- the amount- Returns:
- the created and linked DiscountRAO
-
getCurrentPrice
public java.math.BigDecimal getCurrentPrice(java.util.Set<OrderEntryRAO> orderEntryForDiscounts, java.util.Map<java.lang.Integer,java.lang.Integer> discountedOrderEntryMap)
Description copied from interface:RuleEngineCalculationServiceCalculates current price of the set of Order Entries using only specified quantity of units for every Order Entry.- Specified by:
getCurrentPricein interfaceRuleEngineCalculationService- Parameters:
orderEntryForDiscounts- set with Order Entries which price need to be calculateddiscountedOrderEntryMap- Map having orderEntry.entryNumber as keys and Unit Quantity To Be Consumed as values- Returns:
- BigDecimal current price
-
addOrderEntryLevelDiscount
public DiscountRAO addOrderEntryLevelDiscount(OrderEntryRAO orderEntryRao, boolean absolute, java.math.BigDecimal amount)
creates a DiscountRAO for the given OrderEntryRAO based on the input. Adds the discount to the order entry RAO and recalculates the totals of the corresponding CartRAO. The absolute parameter determines if the discount is an absolute one or a percentage based one. If absolute is set to false, the amount is read as an percent value, e.g. 10 for 10% (and not 0.1 for 10%)- Specified by:
addOrderEntryLevelDiscountin interfaceRuleEngineCalculationService- Parameters:
orderEntryRao- the orderEntryRaoabsolute- whether the discount is absolute or a percentage discountamount- the amount- Returns:
- the created and linked DiscountRAO
-
addOrderEntryLevelDiscount
protected DiscountRAO addOrderEntryLevelDiscount(OrderEntryRAO orderEntryRao, boolean absolute, java.math.BigDecimal amount, int consumedQty)
-
addFixedPriceEntryDiscount
public DiscountRAO addFixedPriceEntryDiscount(OrderEntryRAO orderEntryRao, java.math.BigDecimal fixedPrice)
Description copied from interface:RuleEngineCalculationServiceCreates a new order entry level discount such that the order entry's price will be equal to the givenfixedPricemultiplied by quantity.- Specified by:
addFixedPriceEntryDiscountin interfaceRuleEngineCalculationService- Parameters:
orderEntryRao- the orderEntryRao to add the discount tofixedPrice- the target unit price- Returns:
- the created DiscountRAO
-
addFreeProductsToCart
public FreeProductRAO addFreeProductsToCart(CartRAO cartRao, ProductModel product, int quantity)
Description copied from interface:RuleEngineCalculationServiceAdds free product items to the cart.- Specified by:
addFreeProductsToCartin interfaceRuleEngineCalculationService- Parameters:
cartRao- cart where to add the productproduct- a product to addquantity- quantity of product items to add- Returns:
- FreeProductRAO the free product to be given
-
ensureOrderEntryRAOEntryNumbers
protected void ensureOrderEntryRAOEntryNumbers(AbstractOrderRAO abstractOrderRao)
for the givenAbstractOrderRAOthis method ensures that each of theAbstractOrderRAO.getEntries()has a entry number set. Note: This method only setsOrderEntryRAO#setEntryNumber(Integer)if it is not yet set, it does not check for duplicates or any other inconsistencies.- Parameters:
abstractOrderRao- the AbstractOrderRAO to check
-
changeDeliveryMode
public ShipmentRAO changeDeliveryMode(CartRAO cartRao, DeliveryModeRAO mode)
Description copied from interface:RuleEngineCalculationServiceChanges the current delivery mode to the given values, adds it to the cartRao and updates the carRao totals.- Specified by:
changeDeliveryModein interfaceRuleEngineCalculationService- Parameters:
cartRao- the cartRao to change the delivery mode formode- the new delivery mode- Returns:
- the ShipmentRAO
-
calculateTotals
public void calculateTotals(AbstractOrderRAO cartRao)
Description copied from interface:RuleEngineCalculationServiceperforms a (re)calculation on the given abstractOrderRao and updates these properties:- Specified by:
calculateTotalsin interfaceRuleEngineCalculationService- Parameters:
cartRao- the abstractOrderRao to calculate
-
findOrderEntryRAO
protected OrderEntryRAO findOrderEntryRAO(AbstractOrderRAO order, NumberedLineItem lineItem)
returns the corresponding OrderEntryRAO for the givenlineItem. The lookup is based on both having the sameentryNumber.- Parameters:
order- the order to look up the order entry rao fromlineItem- the line item- Returns:
- the corresponding OrderEntryRAP or null if none is found
-
recalculateTotals
protected void recalculateTotals(AbstractOrderRAO cartRao, Order cart)
Uses the givencartto recalculate the totals of the givencartRao.- Parameters:
cartRao- the cartRao to updatecart- the cart to use for calculation
-
createOrderDiscount
protected OrderDiscount createOrderDiscount(Order cart, boolean absolute, java.math.BigDecimal amount)
Creates an OrderDiscount based on the given values and adds it to the givencart.- Parameters:
cart- the cart to add the order discount toabsolute- whether the discount is absolute or percentage basedamount- the amount- Returns:
- the created OrderDiscount
-
createDiscountRAO
protected DiscountRAO createDiscountRAO(AbstractDiscount discount)
Creates a new DiscountRAO based on the given AbstractDiscount.- Parameters:
discount- the discount- Returns:
- a new DiscountRAO
-
createLineItemDiscount
protected LineItemDiscount createLineItemDiscount(LineItem lineItem, boolean absolute, java.math.BigDecimal amount, boolean perUnit)
Creates an LineItemDiscount based on the given values and adds it to the givenlineItem. Sets perUnit value for partial line discounts- Parameters:
lineItem- the line item to add the order discount toabsolute- whether the discount is absolute or percentage basedamount- the amountperUnit- true if the discount does not necessarily apply to whole line item- Returns:
- the created OrderDiscount
-
createLineItemDiscount
protected LineItemDiscount createLineItemDiscount(LineItem lineItem, boolean absolute, java.math.BigDecimal amount, boolean perUnit, int applicableUnits)
-
validateLineItemDiscount
protected LineItemDiscount validateLineItemDiscount(LineItem lineItem, boolean absolute, Currency currency, LineItemDiscount discount)
-
createLineItemDiscount
protected LineItemDiscount createLineItemDiscount(LineItem lineItem, boolean absolute, java.math.BigDecimal amount)
Creates an LineItemDiscount based on the given values and adds it to the givenlineItem.- Parameters:
lineItem- the line item to add the order discount toabsolute- whether the discount is absolute or percentage basedamount- the amount- Returns:
- the created OrderDiscount
-
removeShippingCharges
protected void removeShippingCharges(Order cart)
Returns all Shipping charges from the Order.- Parameters:
cart- instance ofOrder
-
createShippingCharge
protected OrderCharge createShippingCharge(Order cart, boolean absolute, java.math.BigDecimal value)
creates anOrderChargeofAbstractCharge.ChargeType.SHIPPINGfor the given values and adds it to the given cart.- Parameters:
cart- the given cart to apply the shipping charge toabsolute- whether the shipping charge is percentage-based or absolute.value- the value of the charge- Returns:
- the newly created OrderCharge
-
createShipmentRAO
protected ShipmentRAO createShipmentRAO(DeliveryModeRAO mode)
Creates a new ShipmentRAO based on the given Delivery Mode.
-
getProductConverter
@Deprecated(since="2005", forRemoval=true) protected Converter<ProductModel,ProductRAO> getProductConverter()Deprecated, for removal: This API element is subject to removal in a future version.since 2005
-
setProductConverter
@Deprecated(since="2005", forRemoval=true) public void setProductConverter(Converter<ProductModel,ProductRAO> productConverter)Deprecated, for removal: This API element is subject to removal in a future version.since 2005
-
getAbstractOrderRaoToOrderConverter
protected Converter<AbstractOrderRAO,Order> getAbstractOrderRaoToOrderConverter()
-
setAbstractOrderRaoToOrderConverter
public void setAbstractOrderRaoToOrderConverter(Converter<AbstractOrderRAO,Order> abstractOrderRaoToOrderConverter)
-
calculateSubTotals
@Deprecated(since="2005", forRemoval=true) public java.math.BigDecimal calculateSubTotals(CartRAO cartRao, java.util.Collection<ProductRAO> excludedProducts)Deprecated, for removal: This API element is subject to removal in a future version.since 2005Description copied from interface:RuleEngineCalculationServiceRuns cart calculation for cart not including the excluded products. CartRao argument is not modified by this process.- Specified by:
calculateSubTotalsin interfaceRuleEngineCalculationService- Parameters:
cartRao- Cart to be calculatedexcludedProducts- List of products to be excluded from the cart calculation- Returns:
- BigDecimal result of the cartSubTotals (without charges like payment or delivery) minus the excluded products
-
addFixedPriceEntriesDiscount
public java.util.List<DiscountRAO> addFixedPriceEntriesDiscount(CartRAO cartRao, java.util.Map<java.lang.Integer,java.lang.Integer> selectedOrderEntryMap, java.util.Set<OrderEntryRAO> selectedOrderEntryRaos, java.math.BigDecimal fixedPrice)
Description copied from interface:RuleEngineCalculationServiceCreates order entry level discounts for the cartcartRao, with thefixedPricegiven as parameter and for the products from entries inselectedOrderEntryRaosand related quantities given inselectedOrderEntryMap.- Specified by:
addFixedPriceEntriesDiscountin interfaceRuleEngineCalculationService- Parameters:
cartRao- Cart RAO used for totals calculationsselectedOrderEntryMap- Map having orderEntry.entryNumber as keys and unit quantity to be consumed as valuesselectedOrderEntryRaos- Order entries to be discountedfixedPrice- Target price for discounted product- Returns:
- List of discounts that are generated
-
createAbsoluteDiscountRAO
protected DiscountRAO createAbsoluteDiscountRAO(LineItem lineItem, java.math.BigDecimal amount, int applicableUnits, boolean perUnit)
-
addOrderEntryLevelDiscount
public java.util.List<DiscountRAO> addOrderEntryLevelDiscount(java.util.Map<java.lang.Integer,java.lang.Integer> selectedOrderEntryMap, java.util.Set<OrderEntryRAO> selectedOrderEntryRaos, boolean absolute, java.math.BigDecimal amount)
Description copied from interface:RuleEngineCalculationServiceCreates order entry level discounts for the cartcartRao, adds it to the cartRao and updates the cartRao totals. Discounts are applied to entries contained within the selectedOrderEntryMapselectedOrderEntryRaosbased on strategy.- Specified by:
addOrderEntryLevelDiscountin interfaceRuleEngineCalculationService- Parameters:
selectedOrderEntryMap- Map having orderEntry.entryNumber as keys and unit quantity to be consumed as valuesselectedOrderEntryRaos- Order entries to be discountedabsolute- boolean value true is discount is absolute currency amountamount- value of discount- Returns:
- List of discounts created as a result of this action
-
convertPercentageDiscountToAbsoluteDiscount
protected java.math.BigDecimal convertPercentageDiscountToAbsoluteDiscount(java.math.BigDecimal percentageAmount, int quantityToConsume, NumberedLineItem orderLineItem)
-
convertPercentageDiscountToAbsoluteDiscount
protected java.math.BigDecimal convertPercentageDiscountToAbsoluteDiscount(java.math.BigDecimal percentageAmount, Order cart)
-
getMinimumAmountValidationStrategy
protected MinimumAmountValidationStrategy getMinimumAmountValidationStrategy()
-
setMinimumAmountValidationStrategy
public void setMinimumAmountValidationStrategy(MinimumAmountValidationStrategy minimumAmountValidationStrategy)
-
getOrderUtils
protected OrderUtils getOrderUtils()
-
setOrderUtils
public void setOrderUtils(OrderUtils orderUtils)
-
getCurrencyUtils
protected CurrencyUtils getCurrencyUtils()
-
setCurrencyUtils
public void setCurrencyUtils(CurrencyUtils currencyUtils)
-
getRaoUtils
protected RaoUtils getRaoUtils()
-
setRaoUtils
public void setRaoUtils(RaoUtils raoUtils)
-
getConsumptionSupport
protected RAOConsumptionSupport getConsumptionSupport()
-
setConsumptionSupport
public void setConsumptionSupport(RAOConsumptionSupport consumptionSupport)
-
getLineItemLookupStrategy
protected NumberedLineItemLookupStrategy getLineItemLookupStrategy()
-
setLineItemLookupStrategy
public void setLineItemLookupStrategy(NumberedLineItemLookupStrategy lineItemLookupStrategy)
-
getOrderEntryRaoProductPopulator
protected Populator<ProductModel,OrderEntryRAO> getOrderEntryRaoProductPopulator()
-
setOrderEntryRaoProductPopulator
public void setOrderEntryRaoProductPopulator(Populator<ProductModel,OrderEntryRAO> orderEntryRaoProductPopulator)
-
-