from odoo import fields, api, models, _ class StockPicking(models.Model): _inherit = "stock.picking" purchase_request_count = fields.Integer('采购订单数量', compute='_compute_purchase_request') @api.depends('name') def _compute_purchase_request(self): for record in self: purchase_request_ids = self.env['purchase.request'].search([('origin', '=', record.name)]) record.purchase_request_count = len(purchase_request_ids) def action_view_purchase_request(self): self.ensure_one() purchase_request_ids = self.env['purchase.request'].search([('origin', '=', self.name)]) action = { 'res_model': 'purchase.request', 'type': 'ir.actions.act_window', } if len(purchase_request_ids) == 1: action.update({ 'view_mode': 'form', 'res_id': purchase_request_ids[0].id, }) else: action.update({ 'name': _("从 %s生成采购请求单", self.name), 'domain': [('id', 'in', purchase_request_ids.ids)], 'view_mode': 'tree,form', }) return action def _action_done(self): res = super(StockPicking, self)._action_done() # 将新产生的backorder对应上原来的采购申请明细行 backorder_ids = self.backorder_ids if backorder_ids: purchase_request_lines = self.move_ids.move_orig_ids.purchase_line_id.purchase_request_lines if purchase_request_lines: purchase_request_lines.move_dest_ids = [ (4, x.id) for x in backorder_ids.move_ids if x.product_id.id in purchase_request_lines.mapped('product_id.id') ] return res