44 lines
2.2 KiB
Python
44 lines
2.2 KiB
Python
import logging
|
|
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)
|
|
logging.info("domain=============: %s", domain)
|
|
po = self.env['purchase.order'].sudo().search([
|
|
('partner_id', '=', supplier.partner_id.id),
|
|
('company_id', '=', procurement.company_id.id), # 保证公司一致
|
|
('origin', '=', procurement.origin), # 根据来源匹配
|
|
('state', '=', 'draft') # 状态为草稿
|
|
], limit=1)
|
|
logging.info("po=: %s", po)
|
|
if po:
|
|
po.write({'purchase_type': 'consignment'})
|
|
break
|