from odoo import models, fields, api, _ class StockRuleInherit(models.Model): _inherit = 'stock.rule' @api.model def _run_buy(self, procurements): # 首先调用父类的 _run_buy 方法,以保留原有逻辑 super(StockRuleInherit, self)._run_buy(procurements) # 然后在这里添加自定义的逻辑 for procurement, rule in procurements: product = procurement.product_id # 获取主 BOM bom = self.env['mrp.bom'].search([('product_tmpl_id', '=', product.product_tmpl_id.id)], limit=1) if bom: # 遍历 BOM 中的组件(即坯料等) for line in bom.bom_line_ids: raw_material = line.product_id # 检查路线 for route in raw_material.route_ids: # print('route.name:', route.name) if route.name == '按订单补给外包商': # 或者用 route.id 检查精确的路线 print("按订单补给外包商============是") # 使用 procurement.values['supplier'] 获取供应商 supplier = procurement.values.get('supplier') if supplier: domain = rule._make_po_get_domain(procurement.company_id, procurement.values, supplier.partner_id) po = self.env['purchase.order'].sudo().search([dom for dom in domain], limit=1) if po: po.write({'purchase_type': 'consignment'}) break