Product Pricing Setup and Behavior
There are three levels of price control available in Odoo.
1. One sale price per product, defined on the product form. This is the default method.
2. Multiple sale prices per product, defined on the product form
3. Multiple sale prices per product, defined on a separate pricelist document. This option allows the use of formulas to calculate prices.
Technical Note: When you enable option 2 or 3, you install a model called product.pricelist and product.pricelist.line. These models are used to store pricing data. If you select option 2, you can still import pricelist lines as such even though they are not visible on the product.pricelist form view.
2. Behavior Details:
Pricing behavior is dictated by the following rules.
Only one pricelist may be used on any given order.
The pricelist for an order is selected based on the pricelist set on the customer.
Prices are computed according to the order pricelist at the time the line item is added.
If a product does not have a price listed in the pricelist selected on a sale order, the list price will be used.
If there are multiple pricelist items on a single pricelist for a given product and more than one could be applied to an order, the one with the greatest specificity will be used. If the specificity level of two pricelist items is identical, the one with the highest price will be used.
If you change the pricelist of an order with existing line items, prices of existing line items will not be recomputed but newly-added items will use the new pricelist.
If you save a contact without a pricelist selected, the default pricelist will be set on that customer automatically.
The default pricelist is the one at the top of the list of pricelists
If a customer is logged in and places a web order, if the customer pricelist is not allowed on the website, the next available pricelist is selected from the list of pricelists
IN THE POINT OF SALE
Prior to version 11.0, the POS pricelist superceds the customer pricelist. It is not possible to have customer-specific prices in the POS.
In Version 11.0, the customer pricelist in the POS overrides the default POS pricelist when the customer is selected, provided the customer pricelist is allowed in that POS.
In 11.0, the cashier may select the pricelist manually for any order in the POS from the list of allowed prices in that POS.
When the pricelist is changed on a POS order, prices for all products already in the order will be recomputed according to the new pricelist UNLESS the price of a line item has been changed manually by the cashier.
A. Pricing tiers by customer
Enable pricelists in the sales app settings
Enable "Discounted Prices" option in the Website App Settings
Create pricelists in the sales app > catalog > pricelists. You'll need one pricelist for the POS, one for the website, and some number of team/wholesale/special pricelists.
Create your prSet prices for each pricelist on products
Set pricelists on each POS till
Set pricelists on customers
B. Pricing tiers by quantity
1. Enable pricelists in the sales app settings. Either option works.
2. If you have different pricelists for different customers, create any necessary pricelists beyond the default one.
3. For each product in each pricelist, create one pricelist item per quantity tier
For example, if a product is priced at 30 dollars each or 25 dollars each if you purchase 10 or more, create two lines as follows:
Pricelist: Public Pricelist
Minimum quantity: 0
Pricelist Price: 25
Minimum quantity: 10
C. Point of Sale
1. Set up your pricelists according to the above
2. On each POS settings, set the default pricelist and any other allowed pricelists
3. On each customer, set a pricelist
Use the default public pricelist as your website pricelist
Be sure that every item has a price listed for every pricelist.
Set the list price to the MSRP of the product to show the appropriate discount (if applicable)
5. Special Cases:
There are two ways to manage variant prices. One is to use the third level price control option and create a pricelist line for each variant.
The other method is to use attribute price modifiers in conjunction with a pricelist line for the product template. This method requires the same price modifier be used for an attribute value regardless of which product template it is used on. This works well in certain cases and is a limitation in others.
A pricelist has a currency defined on it. The currency of an order comes from the pricelist.
It’s possible to import all your pricelists and prices in one file using any of the above three methods of price management. Variant price extras will require an additional import.
Pricelists with pricelist items can be imported in the product.pricelist list view even if the pricelist items are not displayed on the pricelist form view, as in the second method. See the attached import template for an example.
Pricelist Set on Contact Behavior:
Create a new contact and save, a pricelist will be automatically assigned. Note: pricelist is not a required field (support claims this is not a bug).
Here's how Odoo chooses which pricelist to assign.
- It looks first if you have not enforced a specific pricelist for the partner,
- It then look for the first pricelist having countries set, and if the customer country is among these countries it choose it,
- It then look for all pricelist which do not have countries set,
- It then fallback to the general company property for pricelist (the default pricelist for the current company),
- Then, and only then, it searchs for all pricelists, choosing the one with the lowest sequence.
Hi Marc Antoine, Thank you for all this information and document this. I have case and hopefully you know what the best solutions is/ the way to go.
A Customer do have a pricelist per country.
They have products with standard price on the product.template, the have pricelist standard EU (Default) and per customer a specific pricelist. But from one of their customers they have a different pricelist per country were they deliver. Do you have any ideas about this ?
How can I use pricelist to determine different rates for my timesheet hours based on the timesheet dates?
I have a product that I sell on various territories with different currency. is it possible to associate a specific accounting account for each price list? as the accounting accounts are in specific currency.