You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo自定义模块:布尔字段为真时禁止更新供应商价格求助

实现采购订单行不更新供应商价格的需求

没问题,我来帮你修改代码,让当采购订单行的not_update字段为True时,跳过供应商价格的更新操作。你只需要调整PurchaseOrder类里的_add_supplier_to_product方法,加上对not_update字段的判断即可。

修改后的完整代码

class PurchaseOrderLine(models.Model):
    _inherit = 'purchase.order.line'
    product_supplier_code = fields.Char(string='Product Supplier Code')
    not_update = fields.Boolean(string='Not update price')

    @api.onchange(
        'partner_id',
        'product_id',
    )
    def _onchange_product_code(self):
        for line in self:
            supplier_info = line.product_id.seller_ids.filtered(
                lambda s: (
                    s.product_id == line.product_id and s.name == line.partner_id
                )
            )
            if supplier_info:
                code = supplier_info[0].product_code or ''
                line.product_supplier_code = code
            else:
                supplier_info = line.product_id.seller_ids.filtered(
                    lambda s: (
                        s.product_tmpl_id == line.product_id.product_tmpl_id and s.name == line.partner_id
                    )
                )
                if supplier_info:
                    code = supplier_info[0].product_code or ''
                    line.product_supplier_code = code

class PurchaseOrder(models.Model):
    _inherit = 'purchase.order'

    def _add_supplier_to_product(self):
        super()._add_supplier_to_product()
        for line in self.order_line:
            partner = (
                self.partner_id if not self.partner_id.parent_id else self.partner_id.parent_id
            )
            if partner in line.product_id.seller_ids.mapped('name'):
                seller = line.product_id._select_seller(
                    partner_id=line.partner_id,
                    quantity=line.product_qty,
                    date=line.order_id.date_order and line.order_id.date_order.date(),
                    uom_id=line.product_uom,
                )
                if seller:
                    try:
                        seller['product_code'] = line.product_supplier_code
                        # 核心判断:只有当not_update为False时,才更新供应商价格
                        if not line.not_update:
                            seller['price'] = line.price_unit
                    except AccessError:
                        break

关键修改说明

我只在更新价格的逻辑前加了一个判断条件:if not line.not_update:,意思是只有当采购订单行没有勾选「Not update price」时,才会执行供应商价格的更新。

如果你同时希望勾选该字段时,连供应商编码也不更新,只需要把更新编码的代码也包进这个判断里就行,比如:

if not line.not_update:
    seller['product_code'] = line.product_supplier_code
    seller['price'] = line.price_unit

这样修改后,完全能满足你的需求,操作起来也很简单,直接替换原有的对应代码块就可以啦~

内容的提问来源于stack exchange,提问作者Dani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:27:41