The Pricelist Problem
Pricelists in Odoo control pricing for different customer segments, currencies, and promotions. When they do not apply correctly — the wrong price appears on quotations, the website shows base prices instead of discounted ones, or POS ignores the pricelist entirely — it causes confusion and potentially lost revenue.
How Odoo Pricelists Work
The pricelist evaluation chain:
- Customer has a default pricelist (partner form → Sales & Purchase tab)
- Sales order / POS session / website uses the customer's pricelist
- For each product, Odoo evaluates pricelist rules from lowest sequence to highest
- The first matching rule determines the price
- If no rule matches, the product's list price is used
Cause 1: Pricelist Not Assigned to Customer
# The customer is using the default pricelist, not the special one
# Fix:
# Contacts → select customer → Sales & Purchase tab
# "Sale Pricelist" field → select the correct pricelist
# For website customers:
# The pricelist is determined by:
# 1. Customer's assigned pricelist (if logged in)
# 2. Geo-IP country detection
# 3. Website default pricelist
# Check website pricelist assignment:
# Website → Configuration → Settings → Pricing sectionCause 2: Pricelist Rules Not Matching
# The rule has conditions that don't match the product or quantity
# Check rule conditions:
# Sales → Configuration → Pricelists → select pricelist → Price Rules tab
# Each rule has:
# - Applied On: All Products / Product Category / Product / Product Variant
# - Min. Quantity: rule only applies at or above this quantity
# - Date Range: Start Date / End Date for time-limited rules
# Common mistake: Min. Quantity = 10 but customer orders 5
# The rule does not apply because quantity is below threshold
# Fix: Set Min. Quantity to 1 for rules that should always apply
# Or create rules for different quantity tiersCause 3: Rule Priority (Sequence)
# Multiple rules match, but the wrong one takes precedence
# Odoo evaluates rules by sequence (lowest first) and stops at first match
# If a general rule (sequence 1) matches before your specific rule (sequence 10),
# the specific rule is never evaluated
# Fix: Set specific rules to LOWER sequence numbers:
# Sequence 1: VIP customers get 20% off Product A (specific)
# Sequence 5: All customers get 10% off all products (general)
# The more specific rule should have a lower sequence numberCause 4: Pricelist Not Enabled
# Pricelists must be explicitly enabled in Odoo settings
# Fix:
# Sales → Configuration → Settings → Pricing section
# Enable "Pricelists" → Save
# Choose "Multiple prices per product" or "Advanced price rules"
# For website:
# Website → Configuration → Settings
# Enable pricelists for the websiteCause 5: Currency Mismatch
# The pricelist is in EUR but the sales order is in USD
# Odoo may not apply the pricelist because currencies don't match
# Fix: Check the pricelist currency:
# Sales → Configuration → Pricelists → select pricelist
# Currency field → must match the expected transaction currency
# For multi-currency:
# Create separate pricelists per currency
# Or use a base pricelist and set computation to "Other Pricelist + Discount"Cause 6: Pricelist Computation Type
# Three computation types exist, each works differently:
# 1. Fixed Price — ignores product's list price, uses a fixed amount
# Good for: specific product pricing for key accounts
# 2. Discount — percentage off the product's list price (or another pricelist)
# Good for: volume discounts, customer tier discounts
# IMPORTANT: "Based on" field determines the base price
# - "Sales Price" = product's list price
# - "Cost Price" = product's cost
# - "Other Pricelist" = another pricelist's price
# 3. Formula — complex computation with margins, rounding, surcharges
# Common mistake: Setting "Based on: Cost Price" but expecting
# a discount off the sale priceCause 7: POS Pricelist Issues
# POS has its own pricelist configuration separate from sales
# Fix:
# Point of Sale → Configuration → Point of Sale → select POS
# Pricing section → Default Pricelist
# Also: "Available Pricelists" — add all pricelists that cashiers can select
# POS pricelist is applied based on:
# 1. Customer assigned pricelist (if customer selected at POS)
# 2. Default POS pricelist (if no customer selected)
# Ensure the pricelist is in the "Available Pricelists" listCause 8: Website Pricelist Not Showing
# Website shows base price instead of pricelist price
# Fix:
# 1. Enable pricelists for website:
# Website → Configuration → eCommerce → Pricelists → enable
# 2. Assign pricelist to the website:
# Website → Configuration → Pricelists → select → Websites field
# 3. Check customer assignment:
# If visitor is not logged in, the default website pricelist applies
# 4. Enable "Show public price and discount":
# This shows the original price with a strikethrough and the discounted price
# Test: Log in as a customer with a specific pricelist
# The product page should show the pricelist priceDiagnosing Pricelist Issues
# 1. Check what price Odoo calculates:
# In Odoo shell:
product = env['product.product'].browse(PRODUCT_ID)
pricelist = env['product.pricelist'].browse(PRICELIST_ID)
price = pricelist._get_product_price(product, quantity=1.0)
print(f'Pricelist price: {price}')
print(f'List price: {product.list_price}')
# 2. Check which rule matches:
rule = pricelist._get_product_price_rule(product, quantity=1.0)
print(f'Matching rule: {rule}')
# 3. Verify on a sales order:
# Create a quotation → select customer → add product
# Check the Unit Price column — it should reflect the pricelist
# If not, check the pricelist shown on the quotation headerQuick Fix Checklist
- Enable pricelists in Settings
- Create pricelist with rules (correct computation type, dates, quantities)
- Assign pricelist to the customer
- Verify rule sequence (specific rules first)
- Check currency matches
- For POS: add to Available Pricelists
- For website: assign pricelist to website and enable it