diff --git a/sf_dlm/models/__init__.py b/sf_dlm/models/__init__.py index 6619bd58..f5b994b6 100644 --- a/sf_dlm/models/__init__.py +++ b/sf_dlm/models/__init__.py @@ -1 +1,3 @@ from . import product_supplierinfo +from . import stock_rule_inherit + diff --git a/sf_dlm/models/stock_rule_inherit.py b/sf_dlm/models/stock_rule_inherit.py new file mode 100644 index 00000000..d20fcd58 --- /dev/null +++ b/sf_dlm/models/stock_rule_inherit.py @@ -0,0 +1,35 @@ +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