Discounts & Vouchers
Everyone loves a good discount!
From a customer point of view, you can get a good deal by doing business at the right time and place, and from a business view they serve to increase short-term sales, move out-of-date stock, reward vigilant customers, or simply serve to draw people in as a sales promotion mechanism.
In Dynamicweb Ecommerce, discounts are handled by the:
- Order discounts tool, which is a powerful tool for creating and configuring discounts of many types, with various triggers and application rules
- Vouchers, which are unique codes you can create and use to trigger discounts like e.g. free shipping or
In this article, you can learn more about setting up and managing order discounts, and how to create and use vouchers in Dynamicweb.
Sales Discounts
An older implementation of discounts called Sales Discounts may be present on some solutions. Don’t use it – it’s been replaced by Order Discounts. If you are already using Sales Discounts, don’t use Order Discounts, as the combined results may be unpredictable and are untested.
We recommend switching your older solutions to Order Discounts instead.
Order Discounts
Discounts in Dynamicweb are handled by the discount matrix, which is a powerful tool for creating and assigning discounts based on various conditions – as known from many ERP systems.
To break it down, you can create several types of discounts, control the criteria for triggering them, and how they are applied to the order or product when checking out.
For instance, you can:
- Create 10% discounts and control when they are active, and which products they are active for
- Create discounts of the buy one, get one free type for selected products
- Create free shipping for orders over $100 – discounts
- Award discounts based on promotional codes or vouchers
- Etc.
To access the Discount Matrix go to the Ecommerce area and click the Order Discounts node (Figure 2.1).

This opens the discount matrix interface (Figure 2.2), where you can view, edit or create discounts.

From the discount matrix view, you can see all sorts of information about each discount, the name, type, amount/percentage/product awarded, and whether the discount is active or not.
From the discount matrix view, you can also create (or delete) a discount – simply use the buttons in the toolbar above the list.
Creating or editing a discount will take you to the edit discount interface.
You have a lot of options for customization when creating discounts – and here’s a breakdown of what they do.
General settings
First up are the general settings (Figure 3.1).

With the general settings, you can:
- Provide a name and optionally a description for the discount
- Activate or deactivate the discount. An inactive discount will not appear in frontend, and will not be applied on checkout.
- Allow or disallow the discount to be assignable from the product catalog
- Use the Valid from and Valid to fields to specify a timespan during which the discount applies.
Discount settings
The discount settings (Figure 4.1) allow you to select what type of discount this is, and how it should be applied one the order.

You must specify how the discount should be applied:
- An Order Discount (inclusive) is applied and calculated AFTER order line discounts have been applied, based on the discounted price
- An Order Discount (exclusive) is applied and calculated based on the order price BEFORE any other discounts have been applied
- An Orderline Discount (Exclusive) applies to a single product, and is applied BEFORE any other discounts have been applied
Next you must select a discount type - your options are:
- A fixed amount in a currency of your choice, e.g. "10 dollars off"
- A percentage of the total price - e.g. "10% off the cheapest item"
- A product may be given as a discount – e.g. “buy for 100 dollars and get a free mug”…
- Free shipping
For percentage-type discounts, you can then define a percentage - and specify if the discount should be applied to all products, the cheapest product, or the most expensive product (Figure 4.2). This makes it possible to create BOGO (buy-one-get-one) discounts.

Users and Group settings
If you want to restrict the discount to only select users or customers, you can do so using the user group settings (Figure 5.1).

You can:
- Select a specific user or a user group
- Enter a customer number (which may be shared by several users, e.g. everyone who works for company X)
If no restrictions are created, the discount applies to all users.
Total price settings
The total price settings (Figure 6.1) allow you to create conditions for triggering the discount based on the total price of the order.

Simply select a condition (equal to/not equal to, greater than/less than, greater than or equal to/less than or equal to) and specify an amount in the total price field.
Product Catalog settings
The product catalog settings (Figure 7.1) allow you restrict the discount to e.g. certain shops and languages.

You can:
- Restrict the discount to a specific shop (or select all shops)
- Restrict the discount to a specific language (or select all languages)
- Select or exclude one or more products and or product groups for the discount to apply to
Variants and smart searches
If a variant is selected, only the variant is part of the discount – if a main product is selected, all variants are included in the offer.
Order settings
The order settings (Figure 8.1) allow you to restrict the discount based on order details.

You can:
- Restrict the discount to a particular country
- Restrict the discount to a particular shipping method or payment method
Product Quantity settings
The Product Quantity settings (Figure 9.1) allow you award a discount based on, well, how many products are bought – e.g. buy one get one free.

You can:
- Select if the total quantity of any products should trigger the discount, or if only the total quantity of the same product should trigger the discount
- Specify a quantity
- Decide if the discount can be applied more than once or not
Fields and Vouchers settings
The Fields and Vouchers settings (Figure 10.1) are for handling discounts awarded on the basis of a promotion code or a voucher code, e.g. for handling free shipping vouchers etc.

You may set up the following type of field- or voucher-based discounts:
- A Default Voucher Code Field which accepts either:
- A manually selected code (“order field value”)
- A value from a voucher list - read
- An order field discount, awarded on the basis of entering a specific value in the field
My ‘Save $3’ voucher is added once per product. Help!
When creating a voucher discount of the type amount with otherwise default settings, the amount will be discounted once for every item in the order.
This is because the discount applies to any product by default. The solution is to check the "Apply discount only once" checkbox.
Advanced Order Discount behavior
If more than one discount applies to an order, you can control how/if they stack.
To do so, you must use the Advanced configuration settings which you can read about here.
Vouchers
With Vouchers you can generate unique voucher codes, which can then be used by your customers during checkout to receive certain discounts.
To create and manage vouchers:
- Go to the Ecommerce area
- Click the Vouchers node to open the voucher list overview (Figure 12.1)

From here, you can create and manage voucher lists – which in turn contain vouchers.
Right-clicking a list allows you to edit, delete and re/deactivate a list (Figure 12.2).

Non unique vouchers
The Vouchers tool creates unique codes, which can only be used once.
If you need a non-unique code, usable by multiple customers on multiple orders, you don’t need to use the vouchers tool. Instead, create a discount and use the order field value option under Field and Voucher settings on a discount instead.
Creating a voucher list
To create a new voucher list:
- Click new voucher list in the toolbar
- Name the voucher list – and set it to be active or inactive (Figure 13.1)
- Save the list

A newly created voucher list is empty, however, and you must create or generate vouchers for it to make it useful.
Creating new vouchers
To create new vouchers within a voucher list, click it in the voucher list overview to open it.
You will see a list of vouchers (if any have been created), as well as a set of tools (Figure 14.1).

You can:
- Add vouchers manually, provided that you give them a unique code. You can add multiple vouchers, provided that they are separated by a comma or a line break
- Delete vouchers – this deletes all selected vouchers from the list
- Generate vouchers. Click this option to open a dialogue which allows you to generate a fixed number of vouchers, or to generate an exact number of vouchers based on a number of individually selected users or user groups. This can be useful if you want to mail all users in e.g. the product group German users a unique voucher code.
- Activate or deactivate a list, e.g. once an offer has expired.
- You can also click send mails to distribute the vouchers to your customers – read more below.
- Finally, you can download the voucher list content as a .csv file, in case you need it for some nefarious purpose
From the voucher list, you can also see if and when a voucher has been used.
You can always open a list and generate new vouchers if your list if low on vouchers.
Emailing vouchers to your customers
Before emailing vouchers to your customers, you must:
- Create a discount triggered by vouchers in a voucher list – see Field and Voucher settings above.
- Generate an appropriate number of vouchers in the voucher list.
Once that’s settled, simply:
- Open the voucher list
- Click the Send mails button in the toolbar to open the email window (Figure 15.1)

From the voucher email view you must:
- Select individual users or user groups as recipients
- Provide a sender name, sender email and a subject for your emails
- Select, edit or create an email template for your email
The VoucherMail.html template provides an example of how to include one of the unique voucher codes in the email and more.
Once your vouchers have been emailed, you will have access to more information about each code in the voucher list – who received it, if and when it was used, and which order it was used on.
Using vouchers during checkout
To allow your customers to actually use the vouchers during checkout, you must modify your shopping cart order steps.
For an example:
- Go to the paragraph with your shopping cart app attached
- In the Steps section, change the Information step template from Information.html to InformationVoucher.html –
- Save your changes
This renders a dedicated voucher field during checkout, where customers can enter their voucher code. Once a valid voucher is entered (you can use Validation groups to set up a validation rule for the field) and the order is completed, the voucher list is automatically updated with the new information.
For information about the template tags available for vouchers, please see the template tag documentation.
Negative prices?
If a voucher code would result in negative prices, e.g. if the order was for $100 and the voucher was a $200 voucher, the code is set to used and the price is set to zero. In other words, the customer can save up to the amount on the voucher, but won’t actually get the difference refunded.
EcomDiscount
Contains discount setup from the Ecommerce > Order Discounts node.
Field name | Data type | Length | |
---|---|---|---|
DiscountId | bigint | 8 | |
DiscountType | int | 4 | |
DiscountName | nvarchar | 255 | |
DiscountActive | bit | 1 | |
DiscountValidFrom | datetime | 8 | |
DiscountValidTo | datetime | 8 | |
DiscountDiscountType | int | 4 | |
DiscountAmount | float | 8 | |
DiscountCurrencyCode | nvarchar | 3 | |
DiscountPercentage | float | 8 | |
DiscountProductId | nvarchar | 30 | |
DiscountProductVariantId | nvarchar | 255 | |
DiscountGroupId | nvarchar | 50 | |
DiscountShopId | nvarchar | 255 | |
DiscountLanguageId | nvarchar | 50 | |
DiscountProductQuantification | int | 4 | |
DiscountProductQuantity | float | 8 | |
DiscountAccessUserId | int | 4 | |
DiscountAccessUserGroupId | int | 4 | |
DiscountAccessUserCustomerNumber | nvarchar | 255 | |
DiscountCountryCode2 | nvarchar | 2 | |
DiscountShippingId | nvarchar | 50 | |
DiscountPaymentId | nvarchar | 50 | |
DiscountOrderFieldName | nvarchar | 255 | |
DiscountOrderFieldValue | nvarchar | Max | |
DiscountVoucherListId | int | 4 | |
DiscountOrderTotalPriceCondition | int | 4 | |
DiscountOrderTotalPrice | float | 8 | |
DiscountApplyOnce | bit | 1 | |
DiscountExcludedProductsAndGroups | nvarchar | Max | |
DiscountProductsAndGroups | nvarchar | Max | |
DiscountAssignableFromProducts | bit | 1 | |
DiscountProductIdByDiscount | nvarchar | 30 | |
DiscountProductVariantIdByDiscount | nvarchar | 255 | |
DiscountDescription | nvarchar | Max | |
DiscountOrderContextId | nvarchar | 50 | |
DiscountAmountProductFieldName | nvarchar | 255 | |
DiscountApplyToProduct | int | 4 | |
DiscountCampaignName | nvarchar | 255 | |
DiscountCampaignImage | nvarchar | 255 | |
DiscountCampaignColor | nvarchar | 50 |
EcomDiscountTranslation
Contains data for discounts (DiscountTranslationDiscountId) and their translations (DiscountTranslationLanguageId).
Field name | Data type | Length | |
---|---|---|---|
DiscountTranslationAutoId | bigint | 8 | |
DiscountTranslationDiscountId | bigint | 8 | |
DiscountTranslationLanguageId | nvarchar | 255 | |
DiscountTranslationName | nvarchar | 255 |
EcomVoucherLists
Contains voucher lists as defined in the Ecommerce -> Vouchers node.
Field name | Data type | Length | |
---|---|---|---|
VoucherListId | int | 4 | |
VoucherListName | nvarchar | 255 | |
VoucherListActive | bit | 1 |
EcomVouchers
Contains data on individual vouchers in a voucher list (VoucherListId). If the vocuher has been used order id and timestamp (VoucherUsedOrderId, VoucherDateUsed) are logged along with user id (VoucherAccessUserId) if the order was performed by an extranet user.
Field name | Data type | Length | |
---|---|---|---|
VoucherId | int | 4 | |
VoucherListId | int | 4 | |
VoucherCode | nvarchar | 36 | |
VoucherDateUsed | datetime | 8 | |
VoucherUsedOrderId | nvarchar | 50 | |
VoucherAccessUserId | int | 4 | |
VoucherStatus | nvarchar | 50 |
EcomSalesDiscount
Contains setup data for sales discounts as defined in the Ecommerce -> Sales discounts node.
Field name | Data type | Length | |
---|---|---|---|
SalesDiscountId | nvarchar | 50 | |
SalesDiscountName | nvarchar | 255 | |
SalesDiscountDiscountType | nvarchar | 255 | |
SalesDiscountCustomersAndGroups | nvarchar | Max | |
SalesDiscountParameters | nvarchar | Max | |
SalesDiscountActive | bit | 1 | |
SalesDiscountDescription | nvarchar | Max | |
SalesDiscountValueType | nvarchar | 50 | |
SalesDiscountValueFixed | float | 8 | |
SalesDiscountValuePercentage | float | 8 | |
SalesDiscountValueProducts | nvarchar | Max | |
SalesDiscountDateFrom | bigint | 8 | |
SalesDiscountDateTo | bigint | 8 | |
SalesDiscountConvertedToNewFormat | bit | 1 | |
SalesDiscountXMLParamsBackup | nvarchar | Max | |
SalesDiscountShop | nvarchar | 255 | |
SalesDiscountCountries | nvarchar | Max | |
SalesDiscountAutoId | int | 4 | |
SalesDiscountMinimumBasketSize | float | 8 |
EcomSalesDiscountCurrencies
Keeps track of which currencies (SalesDiscountCurrenciesCurrencyCode) a sales discount (SalesDiscountCurrenciesDiscountId) is valid for.
Field name | Data type | Length | |
---|---|---|---|
SalesDiscountCurrenciesDiscountId | nvarchar | 50 | |
SalesDiscountCurrenciesCurrencyCode | nvarchar | 3 | |
SalesDiscountCurrenciesDiscountValue | float | 8 | |
SalesDiscountCurrencyAutoId | int | 4 |
EcomSalesDiscountLanguages
Keeps track of which languages (SalesDiscountLanguagesLanguageId) a sales discount (SalesDiscountLanguagesDiscountId) is valid for.
Field name | Data type | Length | |
---|---|---|---|
SalesDiscountLanguagesDiscountId | nvarchar | 50 | |
SalesDiscountLanguagesLanguageId | nvarchar | 50 | |
SalesDiscountLanguagesName | nvarchar | 255 | |
SalesDiscountLanguagesDescription | nvarchar | Max | |
SalesDiscountLanguageAutoId | int | 4 |