83 lines
4.3 KiB
Python
83 lines
4.3 KiB
Python
# -*- 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='加工模型')
|
|
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)
|
|
|
|
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
|