Class 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 Detail

      • DefaultRuleEngineCalculationService

        public DefaultRuleEngineCalculationService()
    • 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:
        addOrderLevelDiscount in interface RuleEngineCalculationService
        Parameters:
        cartRao - the cartRAO
        absolute - whether the discount is absolute or a percentage discount
        amount - 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: RuleEngineCalculationService
        Calculates current price of the set of Order Entries using only specified quantity of units for every Order Entry.
        Specified by:
        getCurrentPrice in interface RuleEngineCalculationService
        Parameters:
        orderEntryForDiscounts - set with Order Entries which price need to be calculated
        discountedOrderEntryMap - 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:
        addOrderEntryLevelDiscount in interface RuleEngineCalculationService
        Parameters:
        orderEntryRao - the orderEntryRao
        absolute - whether the discount is absolute or a percentage discount
        amount - the amount
        Returns:
        the created and linked DiscountRAO
      • addOrderEntryLevelDiscount

        protected DiscountRAO addOrderEntryLevelDiscount​(OrderEntryRAO orderEntryRao,
                                                         boolean absolute,
                                                         java.math.BigDecimal amount,
                                                         int consumedQty)
      • getConsumedQuantityForAllDiscounts

        @Deprecated(since="1905",
                    forRemoval=true)
        protected int getConsumedQuantityForAllDiscounts​(java.util.Set<AbstractRuleActionRAO> actions)
        Deprecated, for removal: This API element is subject to removal in a future version.
        since 1905
      • getConsumedQuantityForOrderEntry

        @Deprecated(since="1905",
                    forRemoval=true)
        protected int getConsumedQuantityForOrderEntry​(OrderEntryRAO orderEntryRao,
                                                       java.util.Set<AbstractRuleActionRAO> actions)
        Deprecated, for removal: This API element is subject to removal in a future version.
        since 1905
      • addFixedPriceEntryDiscount

        public DiscountRAO addFixedPriceEntryDiscount​(OrderEntryRAO orderEntryRao,
                                                      java.math.BigDecimal fixedPrice)
        Description copied from interface: RuleEngineCalculationService
        Creates a new order entry level discount such that the order entry's price will be equal to the given fixedPrice multiplied by quantity.
        Specified by:
        addFixedPriceEntryDiscount in interface RuleEngineCalculationService
        Parameters:
        orderEntryRao - the orderEntryRao to add the discount to
        fixedPrice - the target unit price
        Returns:
        the created DiscountRAO
      • ensureOrderEntryRAOEntryNumbers

        protected void ensureOrderEntryRAOEntryNumbers​(AbstractOrderRAO abstractOrderRao)
        for the given AbstractOrderRAO this method ensures that each of the AbstractOrderRAO.getEntries() has a entry number set. Note: This method only sets OrderEntryRAO#setEntryNumber(Integer) if it is not yet set, it does not check for duplicates or any other inconsistencies.
        Parameters:
        abstractOrderRao - the AbstractOrderRAO to check
      • findLineItem

        @Deprecated(since="1905",
                    forRemoval=true)
        protected NumberedLineItem findLineItem​(Order cart,
                                                OrderEntryRAO entryRao)
        Deprecated, for removal: This API element is subject to removal in a future version.
        returns the corresponding NumberedLineItem for the given entryRao. The lookup is based on both having the same entryNumber.
        Parameters:
        cart - the cart to look up the line item from
        entryRao - the entry rao
        Returns:
        the corresponding NumberedLineItem
        Throws:
        java.lang.IllegalArgumentException - if no corresponding NumberedLineItem can be found
      • findOrderEntryRAO

        protected OrderEntryRAO findOrderEntryRAO​(AbstractOrderRAO order,
                                                  NumberedLineItem lineItem)
        returns the corresponding OrderEntryRAO for the given lineItem. The lookup is based on both having the same entryNumber.
        Parameters:
        order - the order to look up the order entry rao from
        lineItem - the line item
        Returns:
        the corresponding OrderEntryRAP or null if none is found
      • recalculateTotals

        protected void recalculateTotals​(AbstractOrderRAO cartRao,
                                         Order cart)
        Uses the given cart to recalculate the totals of the given cartRao.
        Parameters:
        cartRao - the cartRao to update
        cart - 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 given cart.
        Parameters:
        cart - the cart to add the order discount to
        absolute - whether the discount is absolute or percentage based
        amount - 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 given lineItem. Sets perUnit value for partial line discounts
        Parameters:
        lineItem - the line item to add the order discount to
        absolute - whether the discount is absolute or percentage based
        amount - the amount
        perUnit - 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)
      • 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 given lineItem.
        Parameters:
        lineItem - the line item to add the order discount to
        absolute - whether the discount is absolute or percentage based
        amount - the amount
        Returns:
        the created OrderDiscount
      • removeShippingCharges

        protected void removeShippingCharges​(Order cart)
        Returns all Shipping charges from the Order.
        Parameters:
        cart - instance of Order
      • createShippingCharge

        protected OrderCharge createShippingCharge​(Order cart,
                                                   boolean absolute,
                                                   java.math.BigDecimal value)
        creates an OrderCharge of AbstractCharge.ChargeType.SHIPPING for the given values and adds it to the given cart.
        Parameters:
        cart - the given cart to apply the shipping charge to
        absolute - 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.
      • setAbstractOrderRaoToOrderConverter

        public void setAbstractOrderRaoToOrderConverter​(Converter<AbstractOrderRAO,​Order> abstractOrderRaoToOrderConverter)
      • calculateSubTotals

        public java.math.BigDecimal calculateSubTotals​(CartRAO cartRao,
                                                       java.util.Collection<ProductRAO> excludedProducts)
        Description copied from interface: RuleEngineCalculationService
        Runs cart calculation for cart not including the excluded products. CartRao argument is not modified by this process.
        Specified by:
        calculateSubTotals in interface RuleEngineCalculationService
        Parameters:
        cartRao - Cart to be calculated
        excludedProducts - 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
      • getAdjustedUnitPrice

        @Deprecated(since="1905",
                    forRemoval=true)
        public java.math.BigDecimal getAdjustedUnitPrice​(int quantity,
                                                         OrderEntryRAO orderEntryRao)
        Deprecated, for removal: This API element is subject to removal in a future version.
        Description copied from interface: RuleEngineCalculationService
        Gets the total discount for line item and recalculates the discounted unit price.
        Specified by:
        getAdjustedUnitPrice in interface RuleEngineCalculationService
        Parameters:
        quantity - quantity of line item
        orderEntryRao - orderEntryRao to get discounted unit price for
        Returns:
        adjusted unit price
      • 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: RuleEngineCalculationService
        Creates order entry level discounts for the cart cartRao, with the fixedPrice given as parameter and for the products from entries in selectedOrderEntryRaos and related quantities given in selectedOrderEntryMap.
        Specified by:
        addFixedPriceEntriesDiscount in interface RuleEngineCalculationService
        Parameters:
        cartRao - Cart RAO used for totals calculations
        selectedOrderEntryMap - Map having orderEntry.entryNumber as keys and unit quantity to be consumed as values
        selectedOrderEntryRaos - Order entries to be discounted
        fixedPrice - 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: RuleEngineCalculationService
        Creates order entry level discounts for the cart cartRao, adds it to the cartRao and updates the cartRao totals. Discounts are applied to entries contained within the selectedOrderEntryMap selectedOrderEntryRaos based on strategy.
        Specified by:
        addOrderEntryLevelDiscount in interface RuleEngineCalculationService
        Parameters:
        selectedOrderEntryMap - Map having orderEntry.entryNumber as keys and unit quantity to be consumed as values
        selectedOrderEntryRaos - Order entries to be discounted
        absolute - boolean value true is discount is absolute currency amount
        amount - 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)
      • getOrderUtils

        protected OrderUtils getOrderUtils()
      • setOrderUtils

        public void setOrderUtils​(OrderUtils orderUtils)
      • setCurrencyUtils

        public void setCurrencyUtils​(CurrencyUtils currencyUtils)
      • getRaoUtils

        protected RaoUtils getRaoUtils()
      • setRaoUtils

        public void setRaoUtils​(RaoUtils raoUtils)
      • isConsumptionEnabled

        @Deprecated(since="1905",
                    forRemoval=true)
        protected boolean isConsumptionEnabled()
        Deprecated, for removal: This API element is subject to removal in a future version.
        since 1905, please use RAOConsumptionSupport.isConsumptionEnabled() instead
      • setConsumptionEnabled

        @Deprecated(since="1905",
                    forRemoval=true)
        public void setConsumptionEnabled​(boolean consumptionEnabled)
        Deprecated, for removal: This API element is subject to removal in a future version.
        since 1905
      • setConsumptionSupport

        public void setConsumptionSupport​(RAOConsumptionSupport consumptionSupport)
      • getPriceAdjustmentStrategy

        @Deprecated(since="1905",
                    forRemoval=true)
        protected PriceAdjustmentStrategy<OrderEntryRAO> getPriceAdjustmentStrategy()
        Deprecated, for removal: This API element is subject to removal in a future version.
        since 1905
      • setPriceAdjustmentStrategy

        @Deprecated(since="1905",
                    forRemoval=true)
        public void setPriceAdjustmentStrategy​(PriceAdjustmentStrategy<OrderEntryRAO> priceAdjustmentStrategy)
        Deprecated, for removal: This API element is subject to removal in a future version.
        since 1905