Support and Docs

3 Topics
Last post 11 November 2014 By Nadja Kristiansen
1 Topics
Last post 20 March 2014 By Carsten E. Madsen
0 Topics
Last post N/A By N/A
0 Topics
Last post N/A By N/A
1 Topics
Last post 02 April 2014 By Carsten E. Madsen

Sales prices, better pricing and line discounts

  • 06/09/2013

Sales prices enable you to specify special prices for certain customers, customer discount groups or all customers. Sales prices can be limited in time or be available to order lines of a certain quantity.

Moreover, sales prices can be specified per shop group, location, country, price list ID and currency. This means that:
- If an account has multiple shop groups, the price of a product can differentiate per shop group (sales prices and line discounts must be specified per shop group - it is not possible to create sales prices/line discounts that apply for all shop groups.)
- If a shop uses multiple locations, the price of a product can differentiate per location
- It is possible to specify country-specific prices (prices are calculated based on the ship-to country, that is the country of the delivery address - or invoice address if no delivery address is specified.)
- It is possbile to differentialte prices per currency.

Calculating the correct sales price

The rules below are followed when the shop tries to find eligible sales prices for a product in a specific context. The rules ensure that only sales prices that are valid according to the current context are available, which means that prices that are not applicable according to the rules will be filtered out.

The rules 1-4 (inclusive) generates a general list of applicable sales prices, and the rules 5-8 (inclusive) each build on the result of the previous rule, which means that once a price has been filtered out, it will no longer be considered when applying the rules.

Only the following sales prices are eligible for a product in a specific context:
Rule #1: Sales prices valid according to the validity date range (start/end dates inclusive)
Rule #2: Sales prices that have no customer specified OR that match the customer currently logged in
Rule #3: Sales prices that have no customer price group specified OR that match any customer price group specified on the current customer (if logged in) or country (if not logged in)
Rule #4: Sales prices that have a minimum quantity less or equal to the quantity requested
Rule #5: Sales prices that have the current location specified; if none is qualified, it uses entries with no location specified
Rule #6: Sales prices that have the current country specified; if none is qualified, it uses entries with no country specified
Rule #7: Sales prices that have the current price list ID specified; if none is qualified, it uses entries with no price list ID specified
Rule #8: Sales prices that are valid for the current currency; if none is qualified, it uses entries with no currency specified.

Once the result of the filtering has been found, the resulting sales prices will be evaluated according to which price is lowest, and that price will be selected as the unit price.

Due to the nature of this filtering process, we strongly recommend that shops that specify location, country, price list ID or currency for sales prices, does this for all sales prices - for instance, if the shop specifies currency for sales prices, this should be done on all sales prices.

Examples

Below are a few examples, illustrating the behaviour of sales prices.

Example: Sales prices with different currencies

Imagine the following setup:
Let's say that we have a shop with two currencies; DKK and EUR. DKK has the exchange rate 100 (which makes this the default currency of the shop), and EUR has the exchange rate 775,80.

A product has a master data price of 100,00 (125,00 including 25% VAT). The currency of this price is whichever currency is specified with the exchange rate of 100 (the default currency of the shop). In this example, the default currency of the shop is DKK.

Moreover, the product has the following sales prices in the sales price table (all prices are including 25% VAT):
- Minimum quantity: 1, sales price: 100, currency: DKK
- Minimum quantity: 2, sales price: 10, currency: EUR
- Minimum quantity: 2, sales price: 75, currency: DKK
- Minimum quantity: 5, sales price: 50, currency: None*
- Minimum quantity: 8, sales price: 30, currency: DKK
* When no specific currency is selected for the sales price, the price is specified in the default currency of the shop (the currency with exchange rate 100). Hence, in this case, the price is specified in DKK.

Let's say that we have selected EUR as the active currency in the shop front. Observe the following behaviour:
- If 1 of the product is added to the basket, the unit price of the product will be 16,11 EUR (125,00/7,758). Because there is no valid sales price for the currency EUR and the quantity 1 in the sales prices, the shop selects the master data price and convert this from DKK to EUR.
- If 2 of the product are added to the basket, the unit price of the product is 10,00 EUR - because a valid sales price exists for minimum quantity 2 and currency EUR.
- If 5 of the product are added to the basket, the unit price of the product is 10,00 EUR - because a valid sales price with the currency EUR is specified, the shop disregards the sales price with minimum quantity 5 (this sales price does not have a defined currency); in accordance with rule #5 above
- If 8 of the product are added to the basket, the unit price of the product is 10,00 EUR - because a valid sales price with the currency EUR is specified, the shop disregards the sales price with minimum quantity 5 (this sales price does not have a defined currency); in accordance with rule #5 above.

Now, let's say that we have selected DKK as the active currency in the shop front. Observe the following behaviour:
- If 1 of the product is added to the basket, the unit price of the product will be 100,00 DKK. Because there is a valid sales price of a minimum quantity of 1 in the sales prices, which applies for the currency DKK, the shop will select this sales price (and not the master data sales price).
- If 2 of the product are added to the basket, the unit price of the product will be 75,00 DKK. Because there is a valid sales price with a minimum quantity of 2 and the currency DKK, the shop will select this unit price.
- If 5 of the product are added to the basket, the unit price of the product is 75,00 DKK. Because a valid sales price with the currency DKK is specified, the shop disregards the sales price with minimum quantity 5 (this sales price does not have a defined currency); in accordance with rule #5 above
- If 8 of the product are added to the basket, the unit price of the product is 30 DKK. Because there is a valid sales price for a minimum quantity of 8 and this sales price is applicable to the currency DKK, this sales price is selected.

Example: Sales prices with different currencies 2

Let's say we are still using the same shop, but we're looking at another product that has two sales prices in the sales price table:
A: Minimum quantity: 1, sales price: 15, currency: EUR
B: Minimum quantity: 1, sales price: 100, currency: None*
C: Minimum quantity: 1, sales price: 14, currency: EUR
* When no specific currency is selected for the sales price, the price is specified in the default currency of the shop (the currency with exchange rate 100). Hence, in this case, the price is specified in DKK.

Let's say we have selected EUR as the active currency in the shop front. Observe the following behaviour:
- If 1 of the product is added to the basket, the unit price of the product will be 14,00 EUR (even though the sales price with no currency is lower). Because of rule #5, the sales price with no currency specified is disregarded, and hence only sales prices A and C are eligible. Sale price C is selected, becaust it is the lowest of the eligible prices.

To sum up;

- A sales price can be converted to different currencies ONLY if no specific currency has been specified for the sales price or if the sales price is the master data sales price (for this, it is not possible to specify a particular currency). Sales prices for which a specific currency has been specified are NOT converted to other currencies.
- If a valid sales price for minimum quantity 1 (or 0) exists in the sales price table, this sales price will overrule any price specified in the product master data. If there is no valid sales price with 1 or 0 as the minimum quantity in the sales price table, the shop will use the master data sales price.
- A sales price is only valid in a specific context if
1) The sales price is valid according to the validity date range (optional - may be left blank)
2) The sales price is applicable to the selected currency in the shop front
3) The sales price is applicable to the current customer (relevant if the scope of the sales price is not "all customers")
4) Another sales price does not exist with both a lower minimum quantity and a lower sales price
5) Another sales price does not exist with the same minimum quantity and a lower sales price
6) Another sales price does not exist with the same sales price and a lower minimum quantity.

Better pricing

Sales prices with a minimum quantity higher than 1 can be displayed in the shop by using runtime values called "betterpricing". "Better pricing" means that a customer is able to attain a lower unit price on the product if he/she purchases a higher quantity of the product. It is possible to display the actual sales price as well as up to (and including) three "BetterPricing"s using runtime values - note that the JSON product list adheres to the same restriction.

The price on the product master data and sales prices with a minimum quantity of 0 or 1 can never be regarded a better pricing - only sales prices with a minimum quantity higher than 1 can be regarded as a better pricing. If there are more than three valid sales prices where the minimum quantity is higher than 1, only the three sales prices with the lowest quantities will be used for better pricing (as long as the sales price is lower than the previous price).

A sales price will only be considered a better pricing if the minimum quantity is higher than the previous price (e.g. the actual sales price or the previous better pricing) AND if the sales price is lower than than the previous price. Hence, a sales price with a higher quantity and a higher price than another sales price will never be regarded a better pricing.

Better pricings are ordered by quantity ascending and unit price descending, which means that BetterPricing will hold the sales price with the lowest quantity and the highest price, and BetterPricing2 will hold the sales price with the highest quantity and the lowest price.

Below are a few examples, illustrating the behaviour of Better pricing.

Example 1

Let's say a product has the following sales prices:
A: Minimum quantity: 1, sales price: 50,00 DKK
B: Minimum quantity: 2, sales price: 40,00 DKK
C: Minimum quantity: 3, sales price: 30,00 DKK
D: Minimum quantity: 4, sales price: 20,00 DKK
E: Minimum quantity: 5, sales price. 10,00 DKK

For this product, the better pricings will be:
BetterPricing: Sales price B
BetterPricing2: Sales price C
BetterPricing3: Sales price D
- Because there are more than three eligible better pricings, the three with the lowest quantity are used as BetterPricing, BetterPricing2 and BetterPricing3.

Example 2

Let's say a product has the following sales prices:
A: Minimum quantity: 1, sales price: 50,00 DKK
B: Minimum quantity: 2, sales price: 40,00 DKK
C: Minimum quantity: 3, sales price: 60,00 DKK
D: Minimum quantity: 4, sales price: 20,00 DKK
E: Minimum quantity: 5, sales price. 10,00 DKK

For this product, the better pricings will be:
BetterPricing: Sales price B
BetterPricing2: Sales price D
BetterPricing3: Sales price E
- Because sales price C has both a higher quantity and a higher price than the previous betterpricing (sales price B), it is not considered a better pricing and is ignored.

Example 3

Let's say a product has the following sales prices:
A: Minimum quantity: 1, sales price: 50,00 DKK
B: Minimum quantity: 3, sales price: 60,00 DKK
C: Minimum quantity: 3, sales price: 40,00 DKK

For this product, the better pricings will be:
BetterPricing: Sales price C
BetterPricing2: None
BetterPricing3: None
- Because sales price B and C have the same minimum quantity, only the sales price with the lowest price is considered a better pricing (in this case sales price C).

Example 4

Let's say a product has the following sales prices:
A: Minimum quantity: 1, sales price: 50,00 DKK
B: Minimum quantity: 3, sales price: 40,00 DKK
C: Minimum quantity: 4, sales price: 40,00 DKK

For this product, the better pricings will be:
BetterPricing: Sales price B
BetterPricing2: None
BetterPricing3: None
- Because sales price B and C have the same unit price, only the sales price with the lowest minimum quantity is considered a better pricing (in this case sales price B).

Example code for displaying BetterPricing

The following code can be included in the content design of a product detail page in order to display all three better pricing.

BetterPricing:
<eSeller:If IsTrue="Product:HasBetterPricing">
<p>Unit price if you buy <eSeller:Select Value-Of="Product:BetterPricing.QuantityFormatted" />: <eSeller:Select Value-Of="Product:BetterPricing.TagPriceFormatted" /></p>
</eSeller:If>

BetterPricing2:
<eSeller:If IsTrue="Product:HasBetterPricing2">
<p>Unit price if you buy <eSeller:Select Value-Of="Product:BetterPricing2.QuantityFormatted" />: <eSeller:Select Value-Of="Product:BetterPricing2.TagPriceFormatted" /></p>
</eSeller:If>

BetterPricing3:
<eSeller:If IsTrue="Product:HasBetterPricing3">
<p>Unit price if you buy <eSeller:Select Value-Of="Product:BetterPricing3.QuantityFormatted" />: <eSeller:Select Value-Of="Product:BetterPricing3.TagPriceFormatted" /></p>
</eSeller:If>

Better pricing displayed in a shop.

Line discounts

Line discounts allow you to create percentage-wise discounts on certain products. The discount can be available to all customers, to specific customers or to customer discount groups.

As with sales prices, line discounts are filtered to find eligible line discounts in a particular context. The rules ensure that only line discounts that are valid according to the current context are available, which means that line discounts that are not applicable according to the rules will be filtered out.

The rules 1-4 (inclusive) generates a general list of applicable line discounts, and the rules 5-8 (inclusive) each build on the result of the previous rule, which means that once a line discount has been filtered out, it will no longer be considered when applying the rules.

Only the following line discounts are eligible for a product in a specific context:
Rule #1: Line discounts valid according to the validity date range (start/end dates inclusive)
Rule #2: Line discounts that have no customer specified OR that match the customer currently logged in
Rule #3: Line discounts that have no customer discount group specified OR that match any customer discount group specified on the current customer (if logged in) or country (if not logged in)
Rule #4: Line discounts that have a minimum quantity less or equal to the quantity requested
Rule #5: Line discounts that have the current location specified; if none is qualified, it uses entries with no location specified
Rule #6: Line discounts that have the current country specified; if none is qualified, it uses entries with no country specified
Rule #7: Line discounts that have the current price list ID specified; if none is qualified, it uses entries with no price list ID specified
Rule #8: Line discounts that are valid for the current currency; if none is qualified, it uses entries with no currency specified.

From the resulting line discounts, the shops selects the line discount that gives the lowest unit price for the specified quantity.

Due to the nature of this filtering process, we strongly recommend that shops that specify location, country, price list ID or currency for line discounts, does this for all line discounts - for instance, if the shop specifies currency for line discounts, this should be done on all line discounts.

Line discounts and sales prices

When the shop compares the eligible sales prices to find the unit price, the line discount is not included in this evaluation. This is because the shop first finds the best price according to the eligible sales prices and then looks at whether this price has a line discount. Observe the behavior from the following example:

Let's say we have the following sales prices and line discounts:
Sales price A: Price: 1000, Minimum quantity: 1, AllowLineDiscount: No
Sales price B: Price: 2000, Minimum quantity: 1, AllowLineDiscount: Yes
Line discount X: Quantity: 1, Percentage: 80

- In this example the shop will select sales price A even though sales price B is cheaper including the line discount.

Line discounts are only regarded in cases where multiple eligible sales prices have the same minimum quantity and price:

Let's say we have the following sales prices:
Sales price A: Price: 1000, Minimum quantity: 1, AllowLineDiscount: No
Sales price B: Price: 1000, Minimum quantity: 1, AllowLineDiscount: Yes

- In this case the shop will select sales price B. Because the minimum quantity and price are the same, the shop assumes that the sales price that allows line discounts will be a better price than the otherwise identical sales price that does not allow line discounts (though there might not be an applicable line dicount). The shop does not calculate the price based on the line discount but assumes that if two sales prices are identical in terms of minimum quantity and price, the sales price that allows line discounts is lower.

Line discounts and better pricing

Better pricing is calculated with regard to line discounts, which means that the prices will be calculated including any line discounts when evaluating better pricing. Observe the following example:

Sales price A: Price: 1000, Minimum quantity: 1, AllowLineDiscount: No
Sales price B: Price: 800, Minimum quantity: 2, AllowLineDiscount: No
Sales price C: Price: 800, Minimum quantity: 3, AllowLineDiscount: Yes
Sales price D: Price: 800, Minimum quantity: 4, AllowLineDiscount: Yes
Sales price E: Price: 800, Minimum quantity: 5, AllowLineDiscount: Yes
Line discount X: Quantity: 1, Percentage: 50
Line discount Y: Quantity: 1, Percentage: 80

- The unit price (price of one) of this product will be 1000
- Betterpricing (quantity=2) will be 800 (sales price B, no line discount)
- Betterpricing2 (quantity=3) will be 400 (sales price C with 50% line discount)
- Betterpricing3 (quantity=5) will be 160 (sales price C with 80% line discount - sales price D and E are disregarded as they do not offer a better price than sales price C).

Setting up sales prices in the shop administration

If you wish to set up a sales price on a product, this is done in product editing.

Go to Stock > Product editing > Product list and select the product you want to setup sales prices for by clicking it in the list. In the “Master data” section you might have already specified a Sales price. If you set up sales prices, then the price shown in Master data will be overruled by the sales price as long as it is valid.

Click the “Sales prices” tab

Click the “Create” button

Select a “sales price type”. This value specifies which customers the sales price should apply to. You can choose that the sales price should be visible to all customers, to an individual customer or to a customer price group. If you choose to make the sales price visible to an individual customer, you have to select a customer in the customer list that appears below. The same thing goes if you choose to make the sales price applicable to a certain customer price group – then you have to select a customer price group in the list that appear below. However, in order to select a customer price group, you first have to create one or more customer price groups.

The “Min. quantity” field specifies how many instances of the product the customer must order in order to get this sales price. Let’s say we set the minimum quantity to 2. Then, if for instance the sales price in Master data is set to 1000,- and this sales price is set to 800,- the customer will only get the 800,- price if he orders 2 or more of this product. If it is set to 1, then all customers covered by the sales price type will get this sales price by default.

In the “Sales price” field you specify the new sales price for this product.

Moreover, you are able to specify a time period where this sales price should be valid. This setting is optional, and you are allowed to leave the fields blank, thereby making the price valid until you change it or delete it.

The “list price” is also known as the retail price. You are able to display both the “previous sales price” and the “list price” in your product detail page as shown in the image below. Note that previous sales price will only be displayed in the shop if the specified previous sales price is higher than the sales price.

The “Allow line discounts” checkbox lets you define whether any line discounts should be deducted from this sales price. If this checkbox is unchecked, no product discounts will be applied even though the product is part of a product discount group.

The “Currency” setting lets you specify which currency this sales price should apply to. If for instance “DKK” is selected, then this sales price will not apply to the product if the currency in the shop is changes to for instance “EUR”. If the currency field is left blank, the sales price is specified in the default currency of the shop (the currency with exchange rate 100), and the sales price will be converted to whatever currency is selected in the shop front.

The “Sales price incl. VAT” check box allows you to specify whether or not the sales price is including or excluding VAT. If it is checked, you also need to select from which Customer VAT group the VAT should be calculated.

Click “Save”

Note that your newly created sales price now appears in the table. You are able to edit the sales price settings by clicking “Edit” in the table. You delete a sales price by clicking “Edit” and then clicking the “Delete” button.

NOTE that when creating/editing sales prices/line discounts in the shop administration, the sales price/line discount will only be created and apply for the currently selected shop group. If multiple shop groups exist on the account, sales prices/line discounts should be created per shop group.