Concept - Promotion Priority and Combination

1 Introduction

More than one promotion can be active at the same time. It is possible to choose whether a promotion should be applied:

  • On the base cart price (not discounted) or
  • On an already discounted price.

The order of appliance is important. If two promotions are defined, the appliance order will always be the same for each consumer.

This document explains the different promotion discounts available and their priorities.

2 Promotion Action Types and Priority

2.1 Action Types

A promotion action type is the kind of discount or rebate. There are four different groups:

  • Order level:
    • Order Percentage Off: reduces the order value by a percentage value
    • Order Value Off: reduces the order value by a fixed value
  • Item level:
    • Item Percentage Off: reduces the item price by a percentage value
    • Item Value Off: reduces the item price by a fixed value
    • Item Target Price: sets the item price to a new value
  • Shipping level:
    • Shipping Percentage Off: reduces the shipping cost by a percentage value
    • Shipping Value Off reduces the shipping costs by a fixed value
    • Shipping Target Price: sets the shipping costs to a new value
  • Gifts:
    • Automatic Gift: adds some gift to the cart, visible to the consumer
    • Hidden Gift: adds some gift to the cart, invisible to the consumer

2.2 Priority

Each promotion type has a priority. The promotion priority defines the order the promotions are applied in the web shop.

Note

The promotion with the highest priority comes first. If there exist promotions with the same priority, the start dates are taken into consideration: The newest promotion applies first. If the start dates are identical, the promotion IDs are compared and sorted ascendingly.

The following table lists all available promotion types and the corresponding priorities as they are created via DBInit. The priority of an action type can be changed.

Promotion TypesDefault Priority
Item Target Price1.000
Item Percentage Off900
Item Value Off800
Shipping Target Price700
Shipping Percentage Off

600

Shipping Value Off500
Order Percentage Off400
Order Value Off300
Automatic Gift200
Hidden Gift100

A newly created promotion does not have any rule. In other words, no conditions or actions are defined. Its priority is 0.

Setting its action sets its priority implicitly. In other words, changing the action also changes the promotion's priority. In addition to the implicit priority, it is possible to configure an explicit one. If a promotion has an explicit priority setting, this setting is taken into account while determining the order of appliance.

A promotion can have more than one rule. Each rule can have a different action. In this case, the promotion's priority is defined by the action of the very first rule. The screenshot shows a list of promotions. Promotion1 has two rules: the first one grants a Shipping Percentage Off discount, the second one an Item Percentage Off discount. However, the promotion's priority is set by the Shipping Percentage Off discount (= 600).

2.3 Promotion Message Priority in the Web Shop

Highest ranked promotion messages (this includes all static messages from the promotion message tab and dynamic order messages) will always appear first. Everywhere in the storefront where the number of shown promotion messages is restricted, the promotion priority influences the visibility of messages.

For further details on promotion messages refer to Concept - Promotion Dynamic Message.

2.4 Implementation Aspects

The promotion interface offers a method to set the promotion's priority. It is a native attribute in database entity Promotion.
A newly created promotion has priority 0. The pipelet UpdatePromotionActionPriority updates the promotion's priority as soon as the first action type is configured. If all action types are deleted afterwards, the priority is set to 0 again.

Two preference definitions are created via DBInit:

Preference

Data Type

Default value

Meaning

PromotionActionPriorities

multiple string

null

A consecutive order of promotion action types, separated by '|'

PromotionActionRankingSteps

integer

100

Defines the standard step size between two successive priorities (if the preference is not set, it falls back to 100)

The initial order of action types is provided by calling getDefaultRank() from PromotionActionPriorityHandler for each action descriptor. The promotion manager can change the action types in the back office at the promotion's preference section. In that case, the newly created order will be stored as preference PromotionActionPriorities.

Per default, the step size between priority values is 100. If anyone wishes to change this, a new channel domain preference named PromotionActionRankingSteps has to be introduced via DBInit. For example:

  1. Add PrimeTech-PrimeTechSpecials-Site.PromotionActionRankingSteps=50 in ChannelDomainPreferences.properties (ucm_demo).
  2. Run DBInit.
  3. Select ucm_demo and PrepareDomainPreferences com.intershop.ucm.demo.dbinit.mcs.preference.ChannelDomainPreferences and click Run.
    -> The preference will be created.

3 Promotion Combination

It is possible to define whether a promotion can still apply if another promotion has been applied before.
Each promotion can be:

Combination

Meaning

free combinable

A promotion can be applied even if another promotion has been applied before.

not combinable

This promotion cannot be applied if another promotion has been applied before, and vice versa: If it applies first, no other promotion can be applied later on.

partially combinable

This promotion can only be combined with a dedicated set of other promotion action types. If a promotion from the forbidden set has been applied before, this promotion cannot be applied, and vice versa: If this promotion applies first, none of the forbidden ones can apply any more.

Note

The promotion combination can only be defined by promotion action types. It is not possible to say Promotion A cannot be applied together with Promotion B.

4 Basket Calculation

The main class for applying promotions in the basket is PromotionCalculationRule. It fetches all applicable promotions for the current user.
The result contains a list of promotions ordered by rank descendingly. In other words, the promotion with the highest rank always comes first. If two or more promotions are of the same rank, they are ordered by start date ascendingly. In case the start date is identical, the promotions are ordered by ID ascendingly. (The promotion ID is a unique string which can be set while creating a new promotion.)
Afterwards, for each applicable promotion it is checked whether its condition is satisfied. If so, the discount is granted. However, there are additional circumstances which prevent a discount from being granted even if the promotion condition fits:

  • Two promotions are not combinable with one another.
  • There is nothing more to grant (For example: free shipping was already reached by another promotion).
  • The item is not allowed to be discounted (it is not in the list of selected items for that discount).
  • The shipping region/method is not allowed to be discounted.

Disclaimer

The information provided in the Knowledge Base may not be applicable to all systems and situations. Intershop Communications will not be liable to any party for any direct or indirect damages resulting from the use of the Customer Support section of the Intershop Corporate Web site, including, without limitation, any lost profits, business interruption, loss of programs or other data on your information handling system.

Customer Support
Knowledge Base
Product Resources
Support Tickets