# -*- coding: utf-8 -*- from odoo import api, fields, models import json class StockPicking(models.Model): _inherit = 'stock.picking' document_ids = fields.Many2many('ir.attachment', string="附件") employee_id = fields.Many2one('hr.employee', string="验收人") department_id = fields.Many2one('hr.department', string="部门") certifier_id = fields.Many2one('res.users', string="证明人") user_id = fields.Many2one('res.users', string="采购人员", compute="_compute_origin") json_display = fields.Char( string="物品详情", compute='_compute_json_display', store=True ) @api.onchange('employee_id') def _onchange_employee_id(self): if self.employee_id: self.department_id = self.employee_id.department_id.id else: self.department_id = False @api.depends( 'move_ids_without_package.product_id', 'move_ids_without_package.product_uom_qty', 'move_ids_without_package.product_uom', ) def _compute_json_display(self): for record in self: json_data = { "template": "json_widget_stock.table_stock", "title": f"{record.name}的明细数据", "lines": [ { 'sequence': idx + 1, 'barcode': line.product_id.barcode or '', 'product_id': line.product_id.name or '', 'product_qty': line.product_uom_qty or '', 'price_unit': line.product_uom.name or '', 'standard_price' : line.product_id.standard_price or '', } for idx, line in enumerate(record.move_ids_without_package) ] } record.json_display = json.dumps(json_data, ensure_ascii=False) @api.depends('origin') def _compute_origin(self): for record in self: purchase = self.env['purchase.order'].search([('name', '=', record.origin)], limit=1) if purchase: record.user_id = purchase.user_id.id else: record.user_id = False def button_validate(self): self.employee_id = self.env.user.employee_ids.id return super(StockPicking, self).button_validate() def action_refresh_json_display(self): """手动刷新json_display字段""" for record in self: record._compute_json_display() return True