Introduction to Pricing¶
Liferay Commerce provides a robust pricing system to fine-tune Product prices. You can define multiple price entries for a single Product SKU and determine which Accounts, Account Groups, and Channels are eligible to receive each price. If multiple price entities exist for the same SKU, Commerce’s pricing engine calculates which entities should be used for each Channel customer.
The following article provides an overview of Commerce pricing and how Product and order prices are determined for customers.
Note
The following overview describes the Commerce Pricing Engine v2.0+. This engine version is the default algorithm used for Commerce 3.0+ and Portal/DXP 7.3+. Commerce 2.1.x and earlier versions use Commerce’s Pricing Engine v1.0 by default. If desired, you can change the Pricing Engine version used for the instance.
Components of Commerce’s Pricing System¶
In Commerce, every Product is stored in a Catalog, and each Catalog has its own default Base Price List and Base Promotion List. These lists are used to store base price entries for all Product SKUs contained in a Catalog and are made available to all customers. You can also create custom Price Lists and Promotion Lists to define more targeted and configurable price entities. As part of each entry, you can also define Price Tiers that set special prices for Products based on quantity. Finally, create Discounts that are applied on top of price entries without overriding them.
Base Price List¶
The Base Price List stores the starting price entry for every Product SKU in a Catalog. These entries set the standard currency and price used for each SKU when no overrides are applied to it. This list is automatically created for every Catalog and is made available to all Accounts and Channels. See Setting a Product’s Base Price to learn more.
Base Promotion List¶
The Base Promotion List stores base promotional price entries for all Product SKUs in a Catalog. When applied to an SKU, the base promotional price entry overrides its base price for all customers. This list is automatically created for every Catalog and is made available to all Accounts and Channels. See Promotion Base List Reference for more information.
Price Lists¶
Custom Price Lists store price entries for specific Products and are made available only to eligible customers. These lists can use a different currency from the Base Price List and can include all or only some of a Catalog’s Products. Price List entries override an SKU’s base price for eligible customers. You also define Price Modifiers to modify specific price entries. See Creating a Price List for more information.
Promotion Lists¶
Custom Promotion Lists store promotion price entries for specific Products and are made available only to eligible customers. These lists can use a different currency from the Base Price List and only include manually selected Products. When applied, they override an SKU’s other price entries (e.g., base prices, tiered prices) for eligible users. In these lists, you also define Price Modifiers to modify specific price entries. While active, both the original price and promotional price appear together on the Product page so that buyers see the markdown. See Creating a Promotion for more information.
Note
Prior to Liferay DXP 7.4 U42/GA42, Promotion Price was called Sale Price.
Price Tiers¶
Price Tiers are set directly within a price entry and define specific prices for orders that meet minimum quantity requirements. These prices are displayed to Customers as discounted order options. See Using Price Tiers for more information.
Discounts¶
Discounts are applied on top a price and modify it without superseding it. They can be defined within an existing price entry, or created as separate entities and used to target Products, Product Groups, Categories, Shipping costs, Subtotals, or Totals. See Introduction to Discounts to learn more.
How Commerce Calculates Product Prices¶
Commerce’s pricing algorithm determines how each pricing component contributes to an SKU’s price in a Channel. When the algorithm receives a price request, Commerce first calculates the Product’s unit price and promotion price. These prices are then used to determine the final price made available to the Channel customer.
Calculating an SKU’s Unit Price¶
When calculating an SKU’s unit price, Commerce first searches for any Price Lists applicable to the Channel and customer, according to the list’s eligibility.
If an applicable Price List exists, then Commerce searches its price entries for the Product SKU.
If an entry for the SKU exists, the algorithm applies any existing price modifiers to it and uses the total for the SKU’s unit price.
If no entry for the SKU exists, the algorithm applies any existing price modifiers to the SKU’s Base Price List entry and uses the total for the SKU’s unit price.
If no applicable Price List exists, the SKU’s Base Price List entry is used for the SKU’s unit price.
Note
During this process, Commerce also checks for applicable tier prices. If one exists, its price is used in place of the default list price for specific quantities.
Calculating an SKU’s Promotion Price¶
After calculating the SKU’s unit Price, Commerce calculates the SKU’s promotion price. This calculation is essentially the same as the process for calculating the unit price with two exceptions:
If an applicable Promotion List does not have a price entry for the SKU, any existing price modifiers are applied to the unit price, and the total is used for the promotion price.
If there is no applicable Promotion List and the Base Promotion List is set to 0, the promotion price is set to 0.
Calculating an SKU’s Final Price¶
Once the unit and promotion prices have been calculated, Commerce compares the two prices and selects the better of the two. The pricing algorithm then searches for all applicable discounts and applies them to the best SKU price. The total is the SKU’s final price–the price used by the customer to purchase the product.
How Commerce Calculates Order Prices¶
When calculating order prices, Commerce first retrieves the shipping costs and applies any discounts that target shipping.
Commerce then adds together the final price of all SKUs included in the order to determine its subtotal. Any discounts targeting the subtotal are then applied.
Finally, Commerce adds together the discounted shipping cost and discounted subtotal to get the order’s total. Any discounts targeting the total are then applied.
Pricing Engine v1.0 Reference¶
Pricing Method |
Summary |
Overrides the Base Price? |
Where is it set? |
Applies to who? |
Applies to what? |
---|---|---|---|---|---|
Base Price |
The base price |
n/a |
Product SKU |
All buyers |
Product SKU |
Base Promo |
Marked down price |
Yes |
Product SKU |
All buyers |
Product SKU |
Price List (List Price, List Promo) |
Special pricing (or currencies) per Product and buyer |
Yes |
Price Lists |
Selected buyers (Accounts & Account Groups) |
Individual Product SKUs |
Tiered Price List (Tiered Price, Tiered Promo) |
Special pricing (or currencies) per Product and buyer at bulk quantities |
Yes |
Price Lists |
Selected buyers (Accounts & Account Groups) |
Individual Product SKUs |
Discount |
Modifies price for a group of Products or buyers (Can limit quantity and use coupon codes) |
No |
Discounts |
Selected Buyers (Accounts & Account Groups or those who meet certain qualifications) |
Groups of Products (or Individual Product SKUs) |
Note
In the Commerce Pricing Engine v1.0, price entries include three components: an SKU, a standard price, and a promotion price. In v2.0, each is a separate entity.
Enabling Pricing Engine v2.0 in Commerce 2.1.x¶
By default, Commerce 2.1.x and earlier versions use Commerce Pricing Engine v1.0. Follow these steps to enable Commerce Pricing Engine v2.0:
Open the Control Panel, and go to System Settings → Commerce → Pricing.
Click on Commerce Pricing Configuration in the left panel.
Replace
v1.0
withv2.0
in the Pricing Calculation Key field.Click on Save.
Commerce is updated to use the Pricing Engine v2.0 for all price calculations in the Liferay instance.