Odooers论坛

欢迎!

该社区面向专业人士和我们产品和服务的爱好者。
分享和讨论最好的内容和新的营销理念,建立您的专业形象,一起成为更好的营销人员。


0

Apply pricelist in cascad with fix price

形象
odoo
形象
丢弃
1 答案
0
形象
odoo
最佳答案
What You Want

If a product is not in the Plumber Pricelist , then fallback to Customer-specific Pricelist , and if not found, fallback to Default price (Public or Cost price) .

Why This Is Not Native

Odoo only supports one active pricelist per sale order/customer . It does not support fallback chains across multiple pricelists out of the box.


Solution Outline (Technical)

Step 1: Create Multiple Pricelists

  • pricelist_1 : For plumbers
  • pricelist_2 : For individual customers
  • default : Public or base price (fallback)

Step 2: Custom Module Code (Python)

You will override the get_product_price logic to check multiple pricelists in order.

from odoo import models

class ProductTemplate(models.Model):
    _inherit = 'product.template'

    def get_price_cascade(self, product, partner):
        "Custom method to cascade through pricelists"

        # Step 1: Get all pricelists in priority order
        pricelists = []
        if partner.is_plumber and partner.plumber_pricelist_id:
            pricelists.append(partner.plumber_pricelist_id)
        if partner.property_product_pricelist:
            pricelists.append(partner.property_product_pricelist)

        # Step 2: Try to get price from each pricelist
        for pricelist in pricelists:
            price = pricelist._compute_price_rule([(product, 1.0, partner)], partner)[product.id][0]
            if price:
                return price

        #Step 3: Fallback to default price
        return product.lst_price # or product.standard_price depending on your policy

Step 3: Update Your Sales Order Logic (Optional)

Override or extend the sales order form view to show the calculated price using the new method get_price_cascade .


Add Partner Field: is_plumber and plumber_pricelist_id

Extend the res.partner model:

from odoo import models, fields

class ResPartner(models.Model):
    _inherit = 'res.partner'

    is_plumber = fields.Boolean(string="Is Plumber?")
    plumber_pricelist_id = fields.Many2one('product.pricelist', string="Plumber Pricelist")

Testing Example
  • Product A in pricelist_plumber → Use it
  • Product B not in pricelist_plumber , but in pricelist_customer → Use it
  • Product C not in both → Use lst_price
Can You Do This with No Code?

Not fully. Odoo's standard UI only allows selecting one pricelist per customer or sale.


Thanks & Regards,

Email: contact@datainteger.com

形象
丢弃