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
相关产品推荐
相关产品推荐

