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)
      • 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
      • 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)
      • 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)
      • setConsumptionSupport

        public void setConsumptionSupport​(RAOConsumptionSupport consumptionSupport)