From 4d7b1f557b936ea2b242d8ff1eda4490acc868b8 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Thu, 7 Nov 2024 14:26:33 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=A2=E4=BB=B7=E5=8D=95=E5=8C=BA=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_dlm/models/__init__.py | 2 ++ sf_dlm/models/stock_rule_inherit.py | 35 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 sf_dlm/models/stock_rule_inherit.py 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