from odoo import models, fields, api class PurchaseRequest(models.Model): _inherit = 'purchase.request' _description = '采购申请' # 为state添加取消状态 state = fields.Selection( selection_add=[('cancel', '已取消')], ondelete={'cancel': 'set default'} # 添加 ondelete 策略 ) rule_new_add = fields.Boolean('采购请求为规则创建', default=False, compute='_compute_state', store=True) @api.depends('state') def _compute_state(self): for pr in self: if pr.state != 'draft' and pr.rule_new_add: pr.rule_new_add = False class PurchaseRequestLine(models.Model): _inherit = 'purchase.request.line' _description = '采购申请明细' origin = fields.Char(string="Source Document") supply_method = fields.Selection([ ('automation', "自动化产线加工"), ('manual', "人工线下加工"), ('purchase', "外购"), ('outsourcing', "委外加工"), ], string='供货方式', compute='_compute_supply_method', store=True) @api.depends('origin') def _compute_supply_method(self): for prl in self: order_ids = [] if not prl.origin: continue origin = [origin.replace(' ', '') for origin in prl.origin.split(',')] if 'S' in prl.origin: # 原单据是销售订单 order_ids = self.env['sale.order'].sudo().search([('name', 'in', origin)]).ids elif 'MO' in prl.origin: # 原单据是制造订单 mp_ids = self.env['mrp.production'].sudo().search([('name', 'in', origin)]) order_ids = [mp_id.sale_order_id.id for mp_id in mp_ids] if mp_ids else [] elif 'WH' in prl.origin: # 原单据是调拨单 sp_ids = self.env['stock.picking'].sudo().search([('name', 'in', origin)]) order_ids = [sp_id.sale_order_id.id for sp_id in sp_ids] if sp_ids else [] order_line = self.env['sale.order.line'].sudo().search( [('product_id', '=', prl.product_id.id), ('order_id', 'in', order_ids)]) if order_line: prl.supply_method = order_line[0].supply_method else: prl.supply_method = None