diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 97a3bcdf..1980ae1a 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1503,7 +1503,7 @@ class ResMrpWorkOrder(models.Model): store=True) individuation_page_ids = fields.Many2many('sf.work.individuation.page', string='个性化记录', store=True, compute='_compute_individuation_page_ids') - individuation_page_PTD = fields.Boolean('个性化记录(后置三元检测PTD)', default=False) + individuation_page_PTD = fields.Boolean('个性化记录(是否显示后置三元检测[PTD]页签)', default=False) @api.depends('name') def _compute_routing_workcenter_id(self): diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index 18a9bba3..44cc0b39 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -538,9 +538,9 @@ + attrs='{"required":[("test_results","!=","合格")],"invisible":[("test_results","=","合格")],"readonly":[("state","in",("done", "rework"))]}'/> + attrs='{"required":[("test_results","!=","合格")],"invisible":[("test_results","=","合格")],"readonly":[("state","in",("done", "rework"))]}'/> diff --git a/sf_quality/__manifest__.py b/sf_quality/__manifest__.py index 94d005ec..9c2c3138 100644 --- a/sf_quality/__manifest__.py +++ b/sf_quality/__manifest__.py @@ -18,6 +18,7 @@ 'security/ir.model.access.csv', 'views/view.xml', 'views/quality_cnc_test_view.xml', + 'views/mrp_workorder.xml', 'views/quality_check_view.xml' ], diff --git a/sf_quality/models/__init__.py b/sf_quality/models/__init__.py index 248f7fb2..60081c7b 100644 --- a/sf_quality/models/__init__.py +++ b/sf_quality/models/__init__.py @@ -4,3 +4,4 @@ from . import custom_quality from . import quality from . import quality_cnc_test +from . import mrp_workorder diff --git a/sf_quality/models/mrp_workorder.py b/sf_quality/models/mrp_workorder.py new file mode 100644 index 00000000..7263d328 --- /dev/null +++ b/sf_quality/models/mrp_workorder.py @@ -0,0 +1,25 @@ +from odoo import api, fields, models + + +class ResMrpWorkOrder(models.Model): + _inherit = 'mrp.workorder' + + check_ids_state = fields.Selection([('none', '待处理'), ('pass', '通过的'), ('fail', '失败的')], store=True, + compute='_compute_check_ids_state') + + @api.depends('check_ids.quality_state') + def _compute_check_ids_state(self): + for mw in self: + if mw.check_ids: + if all(check_id.quality_state == 'pass' for check_id in mw.check_ids): + mw.check_ids_state = 'pass' + elif any(check_id.quality_state == 'fail' for check_id in mw.check_ids): + mw.check_ids_state = 'fail' + else: + mw.check_ids_state = 'none' + + def action_open_quality_check_work_sf(self): + action = self.env["ir.actions.actions"]._for_xml_id("quality_control.quality_check_action_picking") + action['context'] = self.env.context.copy() + action['domain'] = [('workorder_id', '=', self.id)] + return action diff --git a/sf_quality/models/quality.py b/sf_quality/models/quality.py index b76adaa8..55b831cc 100644 --- a/sf_quality/models/quality.py +++ b/sf_quality/models/quality.py @@ -17,6 +17,7 @@ class QualityCheck(models.Model): ('fail', '失败的')], string='状态', tracking=True, store=True, default='none', copy=False, compute='_compute_quality_state') + individuation_page_PTD = fields.Boolean('个性化记录(是否显示后置三元检测[PTD]页签)', related='workorder_id.individuation_page_PTD') work_state = fields.Selection(related='workorder_id.state', string='工单状态') processing_panel = fields.Char(related='workorder_id.processing_panel', string='加工面') @@ -26,7 +27,7 @@ class QualityCheck(models.Model): model_file = fields.Binary(related='workorder_id.glb_file', string='加工模型') detection_report = fields.Binary(related='workorder_id.detection_report', readonly=True, string='检测报告') - test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], string="检测结果", + test_results = fields.Selection([("合格", "合格"), ("返工", "返工")], string="检测结果", default='合格') reason = fields.Selection( [("programming", "编程"), ("cutter", "刀具"), ("clamping", "装夹"), ("operate computer", "操机"), @@ -61,7 +62,7 @@ class QualityCheck(models.Model): def do_pass(self): self.ensure_one() super().do_pass() - if self.workorder_id: + if self.workorder_id and self.individuation_page_PTD is True: # 1)将页签“判定结果”的检测结果值同步到【工单_后置三元检测_检测结果】 if self.test_results in ['返工', '报废']: raise ValidationError('请重新选择【判定结果】-【检测结果】') @@ -73,7 +74,7 @@ class QualityCheck(models.Model): def do_fail(self): self.ensure_one() super().do_fail() - if self.workorder_id: + if self.workorder_id and self.individuation_page_PTD is True: # 1)将页签“判定结果”的检测结果值同步到【工单_后置三元检测_检测结果】 if not self.test_results: raise ValidationError('请填写【判定结果】里的信息') diff --git a/sf_quality/views/mrp_workorder.xml b/sf_quality/views/mrp_workorder.xml new file mode 100644 index 00000000..7c22a465 --- /dev/null +++ b/sf_quality/views/mrp_workorder.xml @@ -0,0 +1,22 @@ + + + + mrp.workorder.view.form.inherit.quality + mrp.workorder + + + + + + 质量检查 + + + 质量检查 + + + 质量检查 + + + + + diff --git a/sf_quality/views/quality_check_view.xml b/sf_quality/views/quality_check_view.xml index ec5b9fa8..19f272f4 100644 --- a/sf_quality/views/quality_check_view.xml +++ b/sf_quality/views/quality_check_view.xml @@ -8,22 +8,23 @@ - - + + + + attrs="{'invisible': ['|', '|',('model_file', '=', False), ('production_id', '=', False), ('individuation_page_PTD', '=', False)]}"/> - + - + attrs="{'invisible': ['|',('production_id', '=', False), ('individuation_page_PTD', '=', False)]}"/> + - + - + @@ -34,14 +35,14 @@ - + - + + attrs="{'invisible': ['|','|', ('quality_state', 'not in', ['pass', 'fail']), ('production_id', '=', False),('individuation_page_PTD', '=', False)]}">