# -*- coding: utf-8 -*- from odoo import models, fields, api, _ from odoo.exceptions import UserError class SfQualityCncTest(models.Model): _name = 'quality.cnc.test' _description = 'CNC加工质检' name = fields.Char('单号', default=lambda self: self.env['ir.sequence'].next_by_code('quality.cnc.test')) workorder_id = fields.Many2one('mrp.workorder') production_id = fields.Many2one(related='workorder_id.production_id', string='制造订单') product_id = fields.Many2one(related='workorder_id.product_id', string='产品') model_file = fields.Binary(related='workorder_id.glb_file', string='加工模型') glb_url = fields.Char(related='workorder_id.glb_url', string='加工模型') processing_panel = fields.Char(related='workorder_id.processing_panel', string='加工面') equipment_id = fields.Many2one(related='workorder_id.equipment_id', string='加工设备') production_line_id = fields.Many2one(related='workorder_id.production_line_id', string='生产线') part_number = fields.Char(related='workorder_id.part_number', string='零件图号') detection_report = fields.Binary(related='workorder_id.detection_report', readonly=True, string='检测报告') state = fields.Selection([ ('waiting', '待判定'), ('done', '已完成')], string='状态', default='waiting') result = fields.Selection([ ('pass', '合格'), ('fail', '不合格')], string='判定结果') number = fields.Integer('数量', default=1) test_results = fields.Selection([("合格", "合格"), ("返工", "返工")], string="检测结果") reason = fields.Selection( [("programming", "编程"), ("cutter", "刀具"), ("clamping", "装夹"), ("operate computer", "操机"), ("technology", "工艺"), ("customer redrawing", "客户改图")], string="原因") detailed_reason = fields.Text('详细原因') machining_drawings = fields.Binary('2D加工图纸', related='workorder_id.machining_drawings', readonly=True) quality_standard = fields.Binary('质检标准', related='workorder_id.quality_standard', readonly=True) part_name = fields.Char(related='workorder_id.part_name', string='零件名称') def submit_pass(self): if self.test_results in ['返工', '报废']: raise UserError(_('请重新选择【判定结果】-【检测结果】')) self.write({'result': 'pass', 'test_results': '合格', 'state': 'done'}) self.workorder_id.write({'test_results': self.test_results}) self.workorder_id.button_finish() def submit_fail(self): if not self.test_results: raise UserError(_('请填写【判定结果】里的信息')) if self.test_results == '合格': raise UserError(_('请重新选择【判定结果】-【检测结果】')) self.write({'result': 'fail', 'test_results': self.test_results, 'state': 'done'}) self.workorder_id.write( {'test_results': self.test_results, 'reason': self.reason, 'detailed_reason': self.detailed_reason}) self.workorder_id.button_finish() @api.onchange('test_results') def _onchange_test_results(self): if self.test_results == '合格': self.reason = False self.detailed_reason = False class SfQualityWorkOrder(models.Model): _inherit = 'mrp.workorder' def button_finish(self): super(SfQualityWorkOrder, self).button_finish() if self.routing_type == 'CNC加工': quality_cnc_test = self.env['quality.cnc.test'].search([('workorder_id', '=', self.id)]) if quality_cnc_test: quality_cnc_test.write({'result': 'fail' if self.test_results in ['返工', '报废'] else 'pass', 'test_results': self.test_results, 'state': 'done', 'reason': self.reason, 'detailed_reason': self.detailed_reason, 'detection_report': self.detection_report}) def write(self, vals): res = super(SfQualityWorkOrder, self).write(vals) for item in self: if item.state == 'to be detected': quality_cnc_test = self.env['quality.cnc.test'].search([('workorder_id', '=', item.id)]) if not quality_cnc_test: self.env['quality.cnc.test'].sudo().create({'workorder_id': item.id}) return res