from odoo import models, fields, api class sf_programming_reason(models.TransientModel): _name = 'sf.programming.reason' _description = '重新编程原因' production_id = fields.Many2one('mrp.production') reason = fields.Text('重新编程原因') reprogramming_count = fields.Integer(string='重新编程次数') programming_state = fields.Char(string='编程状态') @api.model def default_get(self, fields): res = super(sf_programming_reason, self).default_get(fields) if self._context.get('active_id'): production = self.env['mrp.production'].browse(self._context.get('active_id')) res.update({ 'reprogramming_count': production._cron_get_programming_state()['reprogramming_num'], 'programming_state': production.programming_state, # 假设制造订单模型中有这个字段 }) return res def action_confirm(self): print('self.production_id.programming_state:', self.production_id.programming_state) self.production_id.re_programming_update_programming_state() self.production_id.write( {'programming_state': '编程中', 'work_state': '编程中'}) cloud_programming = self.production_id._cron_get_programming_state() self.production_id.programming_record_ids.create({ 'number': len(self.production_id.programming_record_ids) + 1, 'production_id': self.production_id.id, 'reason': self.reason, 'programming_method': cloud_programming['programme_way'], 'current_programming_count': cloud_programming['reprogramming_num'], 'target_production_id': cloud_programming['production_order_no'], 'apply_time': self._context.get('default_apply_time'), 'send_time': cloud_programming['send_time'], }) # 返回弹窗提示“已下达编程任务和消息,请等待编程单下发” return { 'type': 'ir.actions.act_window', 'res_model': 'sf.programming.reason', 'view_mode': 'form', 'target': 'new', 'context': { 'default_production_id': self.production_id.id, 'active_id': self.production_id.id, }, 'view_id': self.env.ref('sf_manufacturing.sf_programming_reason_message_view').id, }