This blog post will explain the different options of Odoo Pricelists handling, how they work and what the differences are. All examples here were run on an Odoo 10 Community runbot instance with the database set as "all ".
Supported Pricelist options
Odoo supports 3 price lists options, which can be found under Sales > Configuration > Settings > Sale Price:
1. A SINGLE SALE PRICE PER PRODUCT
This basically means you don't want to use any price lists. So the product prices will be the ones you define on your products. Nothing interesting to explore here.
2. SPECIFIC PRICES PER CUSTOMER SEGMENT, CURRENCY ETC.
Choosing this option enables price lists. These will be listed under Sales > Pricelists > Pricelists
Additionally you get a new section in the product form view under e.g. Sales > Products > iMac > Sales:
Here you can add price lists to the product and specify the discounts:
NOTE: It's only possible to set a fixed Price and not a percentage value or a formula or the like.
The price list should be active now in the frontend now.
NOTE: Having several price lists for the same product, Odoo will choose only one of those price lists. The current algorithm is: the first price list in the sequence. For more info see Odoo documentation here
2.1 PRICE LISTS BOUND ON CUSTOMERS
You can create price lists for specific customers. E.g. let's say you want to have the Demo User have a special price for the iMac. For that let's create a new Pricelist entry on the product form of the iMac:
Under Customers, assign this price list to the Demo User now:
If we now go to the shop frontend, and login as Demo User (email: demo, pw: demo), the price for the iMac has changed accordingly:
However, if we logout and browse through the shop as public user we will have the same outcome as we've seen above (1649,00 €).
NOTE: In our example, regardless of the amount of iMacs the Demo User buys, the price per unit will always be $1349. So if the Demo User decides to buy 5 iMacs the price per unit won't change:
Unlike for the public user (signed out):
So effectively, the Demo User would get a worse deal compared to a public user when buying 5 iMacs.
Odoo has currently no option to check whether there is other price lists in the background which lead to a better offer compared to product/customer specific price lists. The current standard behaviour is: single item/customer rule > category / more general one. For more info see the according part in the documentation:
So make sure you keep this in mind when creating different price lists which contain mixed global / customer (or product) specific rules.
3. ADVANCED PRICING
BASED ON FORMULAS (DISCOUNTS, MARGINS, ROUNDING)
With this option, the Pricelist handling vanishes from the product form view (just like under the option A single sale price per product = no price lists).
However, if you go to Sales > Pricelists > Pricelists
And pick for exmaple our Christmas price list from earlier
There is a new section: Pricelist Items.
So now for each Pricelist you have to specify its products. There's also a few new features
The Pricelist Item can be defined
On Product Category
On an individual Product
On a Product Variant
Discount can be calculated base on:
Note: With Product Category, Odoo refers to the internal categories and not to the website categories!
For an explanation of the Formula options, see our other blog post: Price Lists in Odoo 9 & 10
Pricelists can be allowed to be used on specific websites. However the corresponding field (Allow to use on) is a simple selection field. Which means you can have the price list active only on one website. If you want to have the same price list active on multiple websites, then you have to create an identical price list, and choose the respective website.
Make price lists selectable
If you have several price lists and activate the checkbox Selectable, these price lists will be selectable by the frontend customer.
For example, Odoo's runbot has by default a USD and EUR price list which are already selectable:
In the frontend shop, this will lead to a dropdown being shown next to the search form:
This is due to the fact, that a Sale Pricelist is specified for the Portal User:
NOTE: only one price list can be specified for each customer, so this might also be a constraint on how you would like to use price lists for your customers. Also the default price list is chosen by the following criteria:
It seems to me, this Selectable option is the way to go, if you want to enable multiple price lists for your customers. Still, let's have a deeper look into whether and how it's possible to manage multiple price lists.
Multiple Price lists active at the same time
Using Advanced pricing based on formulas I did not find a straight forward way to specify multiple price lists for customers who already have an account (logged in users). Only an utterly complicated one, where you basically have to crate the same Pricelist Items for the customer in question and make the calculation of those items based on the already existing price list:
Creating a new Pricelist for the Demo User, with Pricelist Items calculation being based on the Christmas Pricelist.
However, I won't elaborate on this approach, not only because it's practically ugly but also because it seems price calculcation this way can get easily broken. I guess price lists are not meant to be used in such a complicated way in Odoo.
When using the option Specific prices per customer segment and you have several active price lists which are not selectable, then Odoo will choose the first price list in the sequence as the one being used in the frontend (as already mentioned in this article).
However, you can specify a public price list and customer specific price lists at the same time. This case has already been covered in 2.1 PRICE LISTS BOUND ON CUSTOMERS. Here to more specific price list (customer specific) will override the more general one (public).
It seems to me, there's no other way for multiple price lists than activating the Selectabel option, at least for public users. I couln't get this feature running for logged in users like the Demo User. Makeing the Demo User price list selectable didn't change anything when being logged in as Demo User: there was no dropdown in the frontend even though I had several other price lists selectable as well. Instead what happend is that the Demo User price list also got availble for the public (logged out) user!
After making the Demo User price list selectable, it appeared for public users. However, being logged in as Demo User nothing has changed.
There's anonther interesting case: When switching to Advanced mode, creating some price rules based on formula or percentages, and afterwards switching back to Customer segment mode, those created price rules are displayed on the corresponding products. However, the value in the Price column was 0.00:
After switching from advanced to prices per customer segment. In advanced mode I set percentage price rules on each of these Pricelist Items.
In the frontend, these price rules work like specified in the Advanced mode. It seems this can be used as some kind of "hack" to get percentage values work outside of the advanced mode. However, I would advice to not rely on this behaviour.