Class AbstractPromotionAction

All Implemented Interfaces:
Serializable, Comparable
Direct Known Subclasses:
GeneratedAbstractRuleBasedPromotionAction, GeneratedPromotionNullAction, GeneratedPromotionOrderAddFreeGiftAction, GeneratedPromotionOrderAdjustTotalAction, GeneratedPromotionOrderChangeDeliveryModeAction, GeneratedPromotionOrderEntryAdjustAction

public abstract class AbstractPromotionAction extends GeneratedAbstractPromotionAction
AbstractPromotionAction. Base class for promotion actions. Actions represent the effect that an AbstractPromotion must take to apply its promotion. If a promotion has fired then it will return as part of the PromotionResult the actions that should be applied to create the promotional behaviour. Actions can be applied and undone. A promotion may require multiple actions to be applied and therefore the PromotionResult holds a collection of actions and applied them all. Different actions are implemented in subclasses.
See Also:
  • Constructor Details

    • AbstractPromotionAction

      public AbstractPromotionAction()
  • Method Details

    • getGuid

      public String getGuid(SessionContext ctx)
      Get the Unique Identifier assigned to this action.
      Overrides:
      getGuid in class GeneratedAbstractPromotionAction
      Parameters:
      ctx - The hybris context
      Returns:
      the unique identifier
    • apply

      public final boolean apply()
      Apply the action to the order. Do not call AbstractOrder.recalculate() to update the totals as this disposes of all applied discounts and the promotions engine is unable to intercept the recalculate call to reinstate these.
      Returns:
      true if discounts have been applied and calculateTotals needs to be called, false otherwise.
    • apply

      public abstract boolean apply(SessionContext ctx)
      Apply the action to the order. Do not call AbstractOrder.recalculate() to update the totals as this disposes of all applied discounts and the promotions engine is unable to intercept the recalculate call to reinstate these.
      Parameters:
      ctx - The hybris context
      Returns:
      true if discounts have been applied and calculateTotals needs to be called, false otherwise.
    • undo

      public final boolean undo()
      Unapply the action from the order.
      Returns:
      true if discounts have been removed and calculateTotals needs to be called, false otherwise.
    • undo

      public abstract boolean undo(SessionContext ctx)
      Unapply the action from the order.
      Parameters:
      ctx - The hybris context
      Returns:
      true if discounts have been removed and calculateTotals needs to be called, false otherwise.
    • isAppliedToOrder

      public final boolean isAppliedToOrder()
      Test if this action is applied to the order. This is different from isMarkedApplied as there are many ways of removing the effect of the action other than calling the undo() method.
      Returns:
      true if the action is applied, false otherwise.
    • isAppliedToOrder

      public abstract boolean isAppliedToOrder(SessionContext ctx)
      Test if this action is applied to the order.
      Parameters:
      ctx - The hybris context
      Returns:
      true if the action is applied, false otherwise.
    • getValue

      public abstract double getValue(SessionContext ctx)
      Get the total value of this action. For actions providing a discount this should be a positive value.
      Parameters:
      ctx - The hybris context
      Returns:
      The double value that is the value of this action
    • deepClone

      protected AbstractPromotionAction deepClone(SessionContext ctx)
      Deep clone this action instance.
      Parameters:
      ctx - The hybris context
      Returns:
      a clone of this instance
    • deepCloneAttributes

      protected void deepCloneAttributes(SessionContext ctx, Map values)
      Called to deep clone attributes of this instance. The values map contains all the attributes defined on this instance. The map will be used to initialse a new instance of the Action that is a clone of this instance. This method can remove, replace or add to the Map of attributes.
      Parameters:
      ctx - The hybris context
      values - The map to write into
    • insertFirstGlobalDiscountValue

      protected static void insertFirstGlobalDiscountValue(SessionContext ctx, AbstractOrder order, DiscountValue discountValue)
      Add a global DiscountValue to the Order at the first position in the list of discounts
      Parameters:
      ctx - The hybris context
      order - The order
      discountValue - The discount to add
    • insertFirstOrderEntryDiscountValue

      protected static void insertFirstOrderEntryDiscountValue(SessionContext ctx, AbstractOrderEntry orderEntry, DiscountValue discountValue)
      Add a DiscountValue to the OrderEntry at the first position in the list of discounts
      Parameters:
      ctx - The hybris context
      orderEntry - The order
      discountValue - The discount to add