import logging from itertools import groupby from odoo import models, fields, api, _ class StockRuleInherit(models.Model): _inherit = 'stock.rule' # @api.model # def _run_buy(self, procurements): # # 判断补货组的采购类型 # procurements_group = {'standard': [], 'outsourcing': []} # for procurement, rule in procurements: # is_outsourcing = False # 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 == '按订单补给外包商': # is_outsourcing = True # # if is_outsourcing: # procurements_group['outsourcing'].append((procurement, rule)) # else: # procurements_group['standard'].append((procurement, rule)) # # for key, value in procurements_group.items(): # super(StockRuleInherit, self)._run_buy(value) # # if key == 'outsourcing': # for procurement, rule in value: # 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', 'like', procurement.origin), # 根据来源匹配 # ('state', '=', 'draft') # 状态为草稿 # ], limit=1) # logging.info("po=: %s", po) # if po: # po.write({'purchase_type': 'outsourcing'}) # # 首先调用父类的 _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': 'outsourcing'}) # break