This page requires a basic understanding of promotions.
The Promotion engine overview chapter on Admin Suite shows you all layers and their respective discounts.
Add, delete, edit, and rearrange layers and discounts here.
In order to be able to access this chapter, you need the DiscountCampaigns, DiscountLayers and DiscountTemplates permissions.
You can switch between list and calendar view using the top tabs, and can filter discounts based on specific properties using the right pane.
The Status filter
There are four options in which you can filter your discounts. Currently active and All promotions are obvious. Currently not active and Disabled may create some confusion, right? So let's break those two down:
Currently not active: These are discounts that were once active but have expired.
Disabled: These are discounts that are manually disabled using the Discount is active switch found in any discount at the bottom of the General info tab.
Discount related functionalities
Based on role functionality configuration, each user may have different rights on what can be done in this chapter.
The following table provides a list of those functionalities and the impact each one has on the users capability within the module:
Show discount related functionalites
|Functionality||Scope when functionality is not ticked|
|Discounts - view||Hides the chapter|
|Discounts - edit||Makes the detail page of a discount passive|
|Discounts - create||Hides the "+" icon in the top right corner|
|Discounts - delete||Hides the checkbox you can tick to delete a discount and with that, the trash bin icon|
|CreateDiscountFromTemplate||Hides the ability to create a discount from available templates. Note: if Discounts - create is not ticked and CreateDiscountFromTemplate is ticked, then the user will only have the option to create a discount from available discount templates i.e. will hide the option to create a discount from scratch|
|OrganizationUnitSets - create||The organization details card in step 1 - General info of a discount will not show the + icon where you can add a custom OU set|
|OrganizationUnitSets - view||Hides the magnifying glass icon in the organization details which shows the content of the created custom OU set(s)|
|Translations - create||User will not be able to add data in the empty translation field.|
|Translations - view||Hides the Set translation button next to the line item Marketing description in step 1 - General info|
|Translations - edit||The pencil icon within the see translation card is hidden|
|Translations - delete||The user cannot return an empty field|
|DiscountLayers - view||Hides the chapter|
|DiscountLayers - edit||Hides the pencil icon next to the layer name|
|DiscountLayers - create||Hides the "+" icon in the top right corner of the page (add layer)|
|DiscountLayers - delete||Hides the delete button in the edit layer card|
|DiscountCampaigns - view||Hides the campaigns chapter|
|DiscountCampaigns - edit||Hides the pencil icon to edit an existing campaign|
|DiscountCampaigns - create||Hides the "+" icon on the upper right corner to create campaigns|
|DiscountCampaigns - delete||Hides the trash bin icon displayed next to any existing campaign|
|DiscountTemplates - view||Hides the templates chapter|
|DiscountTemplates - edit||Makes the detail page of a template passive|
|DiscountTemplates - create||Hides the "+" icon on the upper right corner to create templates|
|DiscountCoupons - View||Hides the tabs, cards and action related to coupons|
|DiscountCoupons - Edit||Hides the handler tab and row edit action|
|DiscountCoupons - Create||Hides the create coupons and multi coupons tab in the coupons dialog|
|DiscountCoupons - Delete||Serves no specific function yet currently|
Using roles and rights you can also hide the module as a whole.
Adding a layer
You can add a layer by tapping the top most + icon. All you need here is to give it a name and specify whether this layer is exclusive or not. Adding multiple layers is possible and for that, you'll need to keep in mind the following:
If a layer is marked exclusive, it means that if a discount is applied from that layer no other discount can be applied from that layer nor any other. So you'll either get the single exclusive discount, or the combined set of discounts from all other layers, based on whichever is most lucrative for your customer.
As a general rule of thumb, one discount per layer is applied to an order. However, there are instances where two discounts from one layer could be applied to an order, and that is when each of those discounts were set up to impact on specific product(s) (Pick a Product or Product sets) and not the order as a whole, we call that "product claiming". This of course does not apply if the discount applied on an order is part of an exclusive layer.
The promotion engine works in a way that it first searches for discounts that impact on product level, then moves on to discounts that impact on order level. The system then choose the best possible combination/option for the customer.
Handy to keep those pointers in mind when designing your promotions! "Happy customer, happy life"!
Creating a discount
Pressing the + icon in one of the layers prompts you to create a discount. Based on your role functionalities you'll then be allowed to either select Creating new discount (from scratch), Create discount from template (a discount with some prefilled and non-editable discount variables), or you'll have both choices available.
After making a selection (from template or new), tapping next will take you through some steps. For new it'll be five to six steps as follows:
- General information
- Financial information
- Coupons (Trigger type Coupons only)
The two main parts of a discount are conditions and actions. In its very essence a discount works as follows:
If conditions x and y are met, action z will be triggered.
With this in mind, we can elaborate on discount triggers.
There are four trigger types:
- Price rule
- Generated coupons
Trigger type Price rule indicates that the given action will be automatically applied, as soon as all conditions are met.
Trigger type Manual indicates that the given action can be manually applied, as soon as all specified conditions are met.
When setting trigger type to Coupon, conditions are not mandatory. For coupon discounts, the given action will be applied as soon as the coupon code is given. If conditions are specified, these have to be met before the coupon code can be applied. Using this trigger you will subsequently need to create a discount with trigger Price rule and in the Discount actions click on the Generate Coupon tab and choose the discount which you've already created using the Coupon trigger.
This trigger type works exactly the same as the regular coupon trigger type with one difference; coupons for this discount can't be manually specified. They are generated on certain orders, using a discount, crazy right? Using this trigger you will subsequently need to create a discount with trigger Price rule and in the Discount actions click on the Generate Coupon tab and choose the discount which you've already created using the Generate Coupon trigger.
Marketing descriptions and translations
Discounts also contain marketing description fields. These fields are translatable, but not during the discount's creation directly (for now, at least). If you'd like to set translations for this field, simply finish the creation of your field and then open it again to add translations.
Additionally, we can attach the discount to a Campaign, and optionally limit it to specific organization units or sets.
As the name implies, you can specify the validity of the discount by date and time.
The time zone applied would auto adjust based on the tagged organization unit or organiztion set chosen for this promotion. In other words, if you've set the start time to 09:00 and you've chosen an organization set which includes stores (organization units) in The Netherlands and in Portugal, where there is usually a one hour time difference. The promo engine will automatically set the start time to 09:00 in the respective countries despite that one hour time difference.
The second step is specifying financial information. Before we jump into it, note how the side pane shows information on the steps we have already gone through.
Of all financial information, only Currency is mandatory. Additionally, you can set a maximum usage per order, per customer or a maximum usage in overall.
Restitution claim company
The field Restitution claim company, is where you can add a third party to incur some an orders due amount. An example here would be the amount covered by a health insurance company. Keep in mind that a restitution organization unit needs to be created in order to tag it here, and for this to work (the restitution tick in organization type needs to be ticked when creating). The implication of this setup is that the order using this discount would now create two orders in the order overview. The first would include the invoice made for the customer, and accordingly showing the restitution amount as a discount, while the invoice attached to the other order would serve as a request for payment to that tagged restitution organization unit (an invoice with an open amount). The latter invoice can then be sent to the restitution organization unit for reimbursement. Proper financial booking configurations can be made to conclude the financial implications of such a scenario.
Return orders that initially included restitution organization units at time of sale would also create two order flows.
The recurring benefits fields are optional, here you can specify some behavior when it comes to your discounts (recurring) financially impacting aspects.
The following describes what each field implies:
User balance limit
Is where you specify the monetary value of the discounts recurring benefit (example: €50.00).
The field expects a monetary value only, thus when it comes to discount actions Product sets, Get a product, Pick a product, or an action where a percentage is the discounts benefit, would in turn deduct the equivalent monetary amount (of the granted product or the monetary value of the percentage) from the specified user balance limit.
User balance limit custom field
Is where you specify the custom field that would need to apply in order for the user to be able to avail the benefit. Only type 3 (OrderLine) custom fields appear here.
You can either use the User balance limit or the User balance limit custom field, both cannot be used simultaneously.
User reload strategy
Is where you specify the interval after which the discount benefit would be reinstated (example: the €50.00 user balance limit would be reinstated quarterly).
The user reload strategy field (within its context) impacts any discount action. A no input means "No reload". So if you had a Maximum usage per user of "1", and your user reload strategy is left "blank", implies that the respective discount action is not reloaded once the discount recipient has used it once.
The initially selected trigger type determines the discount actions available for selection in the drop-down menu.
Now for the good stuff: Actions! Bear with us, we have a ton of actions, and even more conditions. Some discount conditions are only available for certain discount actions, some work the other way around, it can get pretty complicated. What you eventually get in return, is an awesome discount engine.
Based on the action(s) selected from the drop-down menu, the rest of the page will populate. Cards will be added for each discount action selected. Below we cover the various actions.
Not applicable if initial trigger type selected was Manual. Here, you can specify a product set to be discounted.
It is not possible to create a product set beforehand and attach it to the discount, the set is created in the actual discount using the filter products.
The filter is used to specify which products form the set. The ones that would accordingly apply to this condition. Once you click the '+' icon you'll be presented with two options.
- Option 1: Add products in bulk, which prompts a notepad like modal where you can specify a Product property and input the corresponding values (use commas to separate between values).
- Option 2: Add product filter, which works the same as described here.
Not applicable if initial trigger type selected was Manual. These are very straight forward, percentage or fixed amount discounts. Simply, a percentage or an amount that will be deducted from the total due payment amount on an order.
Pick a product
Not applicable if initial trigger type selected was Manual. Gift(s) with Purchase (GWP) uses this discount action. This action works same as Get a product, except for the fact that you can specify multiple product for the customer to choose from. You can also distribute the options across tiers, so for each tier you can specify a minimum order amount that is required before the customer can pick one of the products from that tier. Further, you can specify a default product selection (optional).
There are two settings that would influence the behavior in scenarios of an out-of-stock default product:
|This would imply that the frontend user would not get the default product as an option if the product is out-of-stock. If there was a list and all options were out of stock, no options will be returned.|
|This would imply that if the default product is out-of-stock, and the next/most expensive in stock product from the specified GWP product list (a default behavior assuming a list exists) is also out-of-stock/cannot be determined, then the initial out-of-stock product would anyway be added to the order and the frontend user would be prompted with an out-of-stock notification.|
Not applicable if initial trigger type selected was Manual. A sliding discount is a simple order discount, but the discount amount depends on one of two things:
- total order amount
- quantity of products in the order
For example; you can set the discount to be 10% when there is only one product on the order, and then set it to 20% if there are two products. You can add as many steps as you would like.
This discount action allows you to set a discount on gift wrapping- or shipping costs. This discount is a simple percentage or amount.
Get a product
Not applicable if initial trigger type selected was Manual. In this action, you can specify a product to be given to the customer. You can specify a quantity of the product to be given to the customer. Additionally, you can set a unit price. Set the unit price to
0,00 to give the product away for free, or set it to some other amount.
Using this discount action, you can set an amount or percentage discount based on the customer's age. You can either let the customer's age be the actual discount amount or percentage, or create age tiers with the amount attached.
Custom field discount
Not applicable if initial trigger type selected was Manual. The custom field action allows you to create a discount based on a custom field. This one is a little complicated and warrants some extra explanation. So make sure to check out how Custom fields are created. Further, select it then specify your discount type (percentage or amount).
Fixed amount (Trigger type manual only)
This action will only be visible if trigger type manual was initially chosen. It can be set to a fixed amount or a maximum amount, where the actual amount has to be specified when applying the discount to an order. This is possible since this will already be a manual process during checkout. Additionally, you can set the discount to apply either on the whole order or on specific order line(s).
Percentage (Trigger type manual only)
This action will only be visible if trigger type manual was initially chosen. The action behaves similar to the fixed amount one, except it uses percentages instead of amounts.
Employee discount (Trigger type manual only)
This action will only be visible if trigger type manual was initially chosen. The action is a simple percentage discount that can be given to employees.
Generate coupon (Trigger type price rule only)
This action will only be visible if trigger type price rule was initially chosen. Further, you first need to set up a discount with trigger type Generated coupons in order for this to work. Check our coupon use case on this.
This action will generate a coupon code and e-mail it to the attached customer. The coupon code can then be used on the Generated coupons discount you created before. You need to link that discount in this action as well.
This action requires you to have a DiscountCouponEmail Stencil be set up.
Original order discount (Trigger type generated coupons only)
This action will only be visible if trigger type Generated coupon was initially chosen. Using this action, you can set a discount to be an amount, which will be calculated based on the total amount of the order in which the coupon you're using was generated. Optionally, you can set the amount to only be calculated based on a certain set of products.
This is where you configure certain conditions for your orders, that have to be met before the discount can apply or be applied.
This condition can be used to require an order to be of a certain amount before the discount can be applied. A maximum amount can also be set.
This condition can be used to set some product related rules as to when this discount would trigger. Conditions like exclude products with a sale price, identical products only, or exclude product sets are possibilities on how you can use this condition.
Using the product sets type, you can further configure the discount in a way so that the discount only triggers if "a certain quantity of products are included in a customer order/basket from the specified product set" or if "a certain amount is spent on products from that set".
One product set at a time, so use the '+' to add more sets if needed.
Can be used in the same way as described under product sets action.
The Customer condition can be used to create a discount for a specific customer or set of customers. Customers can be specified using an email address for example. Additionally, you can set a certain age range. By expanding the Customer fields card, you can fine tune how/for whom you want to create the discount. You could for example give a discount to all customers using an email address that ends with @newblack.io, just saying.
It is possible to in- or exclude certain stock labels from being eligible for a discount using the Stock label condition.
User roles can also be included with the discount using the User role condition. This condition can be set on the logged-in user or the customer. When setting it on the customer, user roles can also be excluded.
User custom fields
It is possible to require that at least one or all user custom fields are met in order for a discount action to apply. Any custom user field can be configured via the People module and thus, used here.
User custom field inlcudes both
UserType Employee and Customer.
Order custom fields
It is possible to require that at least one or all order custom fields are met in order for a discount action to apply. Any custom order field can be configured via the Orders module and thus, used here.
Orderline custom fields
It is possible to require that at least one or all order line custom fields are met in order for a discount action to apply. At the moment, a frontend is under developemnt where a custom field on order line level (type 3) can be created. Till then, if you wish to use this condition, please use the service CreateCustomField and specify your
3. Check Custom field developer documentation if you'd like to find out more about the available services.
To include specific order types only in your discount. Using this condition you can choose to have a discount apply on CarryOut, Delivery or Reservation orders only.
User type (Trigger type manual only)
This action will only be visible if trigger type manual was initially chosen. On manual discounts, it is possible to in- or exclude certain user types.
Coupon validity (Trigger type Coupon and Generated coupons only)
This action will only be visible if trigger type Generated coupon was initially chosen. The condition can be used to crystallize a coupon's validity. You can set a date from which it will be usable, a date when the coupon will expire, or a number of days until it expires.
Originating OU (Trigger type Generated coupons only)
This action will only be visible if trigger type Generated coupon was initially chosen. Using this condition, you can limit a coupon to only be used in the OU on which it was originally generated.
After configuring your condition(s), we move into discount validation. A user with the functionality
DiscountSelfVerification would need to validate the discount for it to go-live.
At this point, the discount engine will do some complicated magic behind the scenes, like super complex. You're probably wondering what we're talking about - you've never seen the discount engine think. Well, it's extremely fast okay. You won't even notice.
If all rows have a green checkmark, you're good to go, and we are proud of you. Save your discount and go get yourself a brownie. You deserve it.
Coupons (Trigger type Coupon only)
Here you can add coupon codes to your discount. This will only be applicable if trigger type Coupon was initially chosen.
You can either add custom coupon codes under the Custom tab, or we can generate a bunch of them at once under the Multi tab. After generating a bunch of codes, refresh the page to see your coupon codes. The coupon codes will also be sent to the user that generated them in an e-mail.
This screen can always be revisited after completing the discount to add more coupons.