diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml
index 1e47b873..d5cba300 100644
--- a/sf_manufacturing/views/mrp_workorder_view.xml
+++ b/sf_manufacturing/views/mrp_workorder_view.xml
@@ -172,7 +172,7 @@
-
diff --git a/sf_quality/__manifest__.py b/sf_quality/__manifest__.py
index 582e306a..94d005ec 100644
--- a/sf_quality/__manifest__.py
+++ b/sf_quality/__manifest__.py
@@ -17,7 +17,8 @@
'data': [
'security/ir.model.access.csv',
'views/view.xml',
- 'views/quality_cnc_test_view.xml'
+ 'views/quality_cnc_test_view.xml',
+ 'views/quality_check_view.xml'
],
'assets': {
diff --git a/sf_quality/models/custom_quality.py b/sf_quality/models/custom_quality.py
index f80dd92e..8bf10c3e 100644
--- a/sf_quality/models/custom_quality.py
+++ b/sf_quality/models/custom_quality.py
@@ -11,3 +11,8 @@ class SfQualityPoint(models.Model):
"('product', 'consu')), '|', ('company_id', '=', False), ('company_id', '=', company_id)]", help=
"Quality Point will apply to every selected Products.")
+ is_inspect = fields.Boolean('需送检', default=False)
+ operation_id = fields.Many2one(
+ 'mrp.routing.workcenter', 'Step', check_company=True,
+ domain="[('is_outsource', '=', False),('company_id', 'in', (company_id, False))]")
+
diff --git a/sf_quality/models/quality.py b/sf_quality/models/quality.py
index 6fc04154..489d2953 100644
--- a/sf_quality/models/quality.py
+++ b/sf_quality/models/quality.py
@@ -10,6 +10,80 @@ from odoo.addons.sf_base.commons.common import Common
class QualityCheck(models.Model):
_inherit = "quality.check"
+ quality_state = fields.Selection([
+ ('waiting', '等待'),
+ ('none', '待处理'),
+ ('pass', '通过的'),
+ ('fail', '失败的')], string='状态', tracking=True, store=True,
+ default='none', copy=False, compute='_compute_quality_state')
+
+ processing_panel = fields.Char(related='workorder_id.processing_panel', string='加工面')
+
+ production_line_id = fields.Many2one(related='workorder_id.production_line_id',
+ string='生产线')
+ equipment_id = fields.Many2one(related='workorder_id.equipment_id', string='加工设备')
+ 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="检测结果",
+ default='合格')
+ 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')
+ quality_standard = fields.Binary('质检标准', related='workorder_id.quality_standard')
+
+ operation_id = fields.Many2one('mrp.routing.workcenter', '作业', store=True, compute='_compute_operation_id')
+ is_inspect = fields.Boolean('需送检', related='point_id.is_inspect')
+
+ @api.depends('point_id.operation_id')
+ def _compute_operation_id(self):
+ for qc in self:
+ if qc.point_id.operation_id:
+ qc.operation_id = qc.point_id.operation_id.id
+
+ @api.depends('point_id.is_inspect')
+ def _compute_quality_state(self):
+ for qc in self:
+ if qc.point_id.is_inspect and qc.quality_state == 'none':
+ qc.quality_state = 'waiting'
+ elif not qc.point_id.is_inspect and qc.quality_state == 'waiting':
+ qc.quality_state = 'none'
+
+ @api.onchange('test_results')
+ def _onchange_test_results(self):
+ if self.test_results == '合格':
+ self.reason = False
+ self.detailed_reason = False
+
+ def do_pass(self):
+ self.ensure_one()
+ super().do_pass()
+ if self.workorder_id:
+ # 1)将页签“判定结果”的检测结果值同步到【工单_后置三元检测_检测结果】
+ if self.test_results in ['返工', '报废']:
+ raise ValidationError('请重新选择【判定结果】-【检测结果】')
+ if self.workorder_id.state not in ['done']:
+ self.workorder_id.write({'test_results': self.test_results})
+ # 2)将关联的工单状态更新为“已完成”
+ self.workorder_id.button_finish()
+
+ def do_fail(self):
+ self.ensure_one()
+ super().do_fail()
+ if self.workorder_id:
+ # 1)将页签“判定结果”的检测结果值同步到【工单_后置三元检测_检测结果】
+ if not self.test_results:
+ raise ValidationError('请填写【判定结果】里的信息')
+ if self.test_results == '合格':
+ raise ValidationError('请重新选择【判定结果】-【检测结果】')
+ if self.workorder_id.state not in ['done']:
+ self.workorder_id.write(
+ {'test_results': self.test_results, 'reason': self.reason, 'detailed_reason': self.detailed_reason})
+ # 2)将关联的工单状态更新为“已完成”
+ self.workorder_id.button_finish()
+
# ==========零件特采接口==========
def _register_quality_check(self):
config = self.env['res.config.settings'].get_values()
@@ -31,10 +105,3 @@ class QualityCheck(models.Model):
else:
raise ValidationError("零件特采发送失败")
- # def do_fail(self):
- # self.write({
- # 'quality_state': 'fail',
- # 'user_id': self.env.user.id,
- # 'control_date': datetime.now()})
- # if self.picking_id and 'WH/MO/' in self.picking_id.origin:
- # self._register_quality_check()
diff --git a/sf_quality/views/quality_check_view.xml b/sf_quality/views/quality_check_view.xml
new file mode 100644
index 00000000..c1b2ae40
--- /dev/null
+++ b/sf_quality/views/quality_check_view.xml
@@ -0,0 +1,71 @@
+
+
+
+ sf.quality.check.view.form
+ quality.check
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sf.quality.check.view.tree
+ quality.check
+
+
+
+
+
+
+
+
+
+ sf.quality.check.view.search
+ quality.check
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sf_quality/views/view.xml b/sf_quality/views/view.xml
index 62a5b0e7..3f83acda 100644
--- a/sf_quality/views/view.xml
+++ b/sf_quality/views/view.xml
@@ -57,6 +57,10 @@
custom_required
1
+
+
+
+