From 629995ad9ce9901fdeb9dbad8c7095782ed3f3fd Mon Sep 17 00:00:00 2001
From: yuxianghui <3437689193@qq.com>
Date: Fri, 10 Jan 2025 17:25:19 +0800
Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=AE=8C=E6=88=90<=E5=B7=A5=E5=8D=95?=
=?UTF-8?q?>=E9=80=9A=E7=94=A8=E8=B0=83=E6=95=B4=E9=85=8D=E7=BD=AE?=
=?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9B2=E3=80=81=E5=AE=8C=E6=88=90=
=?UTF-8?q?=E5=B7=A5=E5=8D=95>=E5=90=8E=E7=BD=AE=E4=B8=89=E5=85=83?=
=?UTF-8?q?=E6=A3=80=E6=B5=8B=E5=92=8C=E8=B4=A8=E6=A3=80=E5=8D=95=E9=80=BB?=
=?UTF-8?q?=E8=BE=91=E5=88=A4=E6=96=AD=E5=8F=8A=E7=BB=93=E6=9E=9C=E5=90=8C?=
=?UTF-8?q?=E6=AD=A5=E4=BC=98=E5=8C=96=EF=BC=9B3=E3=80=81=E5=B7=A5?=
=?UTF-8?q?=E5=8D=95=E6=96=B0=E5=A2=9E=E3=80=90=E9=80=81=E6=A3=80=E3=80=91?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=8C=89=E9=92=AE=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_manufacturing/models/__init__.py | 3 +-
.../models/mrp_routing_workcenter.py | 2 +-
sf_manufacturing/models/mrp_workorder.py | 62 +++++++++++++++++++
sf_manufacturing/models/quality_check.py | 7 +++
.../views/mrp_routing_workcenter_view.xml | 2 +-
sf_manufacturing/views/mrp_workorder_view.xml | 6 +-
sf_quality/models/quality.py | 2 +-
7 files changed, 79 insertions(+), 5 deletions(-)
create mode 100644 sf_manufacturing/models/quality_check.py
diff --git a/sf_manufacturing/models/__init__.py b/sf_manufacturing/models/__init__.py
index c4d8ad94..e6845317 100644
--- a/sf_manufacturing/models/__init__.py
+++ b/sf_manufacturing/models/__init__.py
@@ -15,4 +15,5 @@ from . import sf_technology_design
from . import sf_production_common
from . import sale_order
from . import quick_easy_order
-from . import purchase_order
\ No newline at end of file
+from . import purchase_order
+from . import quality_check
\ No newline at end of file
diff --git a/sf_manufacturing/models/mrp_routing_workcenter.py b/sf_manufacturing/models/mrp_routing_workcenter.py
index a2a884c9..666be375 100644
--- a/sf_manufacturing/models/mrp_routing_workcenter.py
+++ b/sf_manufacturing/models/mrp_routing_workcenter.py
@@ -26,7 +26,7 @@ class ResMrpRoutingWorkcenter(models.Model):
surface_technics_id = fields.Many2one('sf.production.process', string="表面工艺")
reserved_duration = fields.Float('预留时长', default=30, tracking=True)
is_outsource = fields.Boolean('外协', default=False)
- individuation_page = fields.Many2many('sf.work.individuation.page', string='个性化记录')
+ individuation_page_ids = fields.Many2many('sf.work.individuation.page', string='个性化记录')
def get_no(self):
international_standards = self.search(
diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py
index e2beea1e..63e049cd 100644
--- a/sf_manufacturing/models/mrp_workorder.py
+++ b/sf_manufacturing/models/mrp_workorder.py
@@ -1344,6 +1344,21 @@ class ResMrpWorkOrder(models.Model):
record.production_id.button_mark_done1()
# record.production_id.state = 'done'
+ # ============工单完成,修改对应[质检单]的值=====================
+ if record.check_ids:
+ if record.test_results == '合格':
+ record.check_ids.write({'test_results': None})
+ for check_id in record.check_ids:
+ check_id.do_pass()
+ elif record.test_results in ('返工', '报废'):
+ record.check_ids.write({
+ 'test_results': record.test_results,
+ 'reason': record.reason,
+ 'detailed_reason': record.detailed_reason})
+ for check_id in record.check_ids:
+ check_id.do_fail()
+ # ======================================================
+
# 解绑托盘
def unbind_tray(self):
for item in self:
@@ -1466,6 +1481,53 @@ class ResMrpWorkOrder(models.Model):
move_subcontract_workorder_ids = fields.One2many('stock.move', 'subcontract_workorder_id', string='组件')
+ # ==============================配置化页签--个性化记录===================================
+ routing_workcenter_id = fields.Many2one('mrp.routing.workcenter', compute='_compute_routing_workcenter_id',
+ 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)
+
+ @api.depends('name')
+ def _compute_routing_workcenter_id(self):
+ for mw in self:
+ routing_workcenter_id = self.env['mrp.routing.workcenter'].sudo().search(
+ [('name', '=', mw.name), ('routing_type', '=', mw.routing_type)])
+ if routing_workcenter_id:
+ mw.routing_workcenter_id = routing_workcenter_id.id
+
+ @api.depends('routing_workcenter_id.individuation_page_ids')
+ def _compute_individuation_page_ids(self):
+ for mw in self:
+ if mw.routing_workcenter_id:
+ mw.individuation_page_ids = mw.routing_workcenter_id.individuation_page_ids.ids
+ # 初始化页签配置
+ mw.individuation_page_PTD = False
+ # 根据工单对应的【作业_个性化记录】配置页签
+ if any(item.code == 'PTD' for item in mw.routing_workcenter_id.individuation_page_ids):
+ mw.individuation_page_PTD = True
+ # =============================================================================================
+
+ is_inspect = fields.Boolean('需送检', compute='_compute_is_inspect', store=True, default=False)
+
+ @api.depends('check_ids.is_inspect')
+ def _compute_is_inspect(self):
+ for item in self:
+ if item.check_ids:
+ is_inspect = False
+ for check_id in item.check_ids:
+ if check_id.is_inspect:
+ is_inspect = True
+ break
+ item.is_inspect = is_inspect
+
+ def do_inspect(self):
+ """送检"""
+ # 修改工单状态
+ self.write({'state': 'to be detected'})
+ # 若关联的【质量检查_需送检】=true,则质量检查单的状态从“等待”更新为“待处理”
+ self.check_ids.filtered(lambda ch: ch.is_inspect is True).write({'quality_state': 'none'})
+
class CNCprocessing(models.Model):
_name = 'sf.cnc.processing'
diff --git a/sf_manufacturing/models/quality_check.py b/sf_manufacturing/models/quality_check.py
new file mode 100644
index 00000000..291e598e
--- /dev/null
+++ b/sf_manufacturing/models/quality_check.py
@@ -0,0 +1,7 @@
+from odoo import fields, models, api
+
+
+class QualityCheck(models.Model):
+ _inherit = "quality.check"
+
+ is_inspect = fields.Boolean('需送检')
diff --git a/sf_manufacturing/views/mrp_routing_workcenter_view.xml b/sf_manufacturing/views/mrp_routing_workcenter_view.xml
index b6646dfa..67bc0c97 100644
--- a/sf_manufacturing/views/mrp_routing_workcenter_view.xml
+++ b/sf_manufacturing/views/mrp_routing_workcenter_view.xml
@@ -18,7 +18,7 @@
-
+
diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml
index d5cba300..18164796 100644
--- a/sf_manufacturing/views/mrp_workorder_view.xml
+++ b/sf_manufacturing/views/mrp_workorder_view.xml
@@ -158,6 +158,7 @@
+
@@ -185,6 +186,8 @@
+
@@ -522,7 +525,8 @@
-
+
+
diff --git a/sf_quality/models/quality.py b/sf_quality/models/quality.py
index 489d2953..bacf7031 100644
--- a/sf_quality/models/quality.py
+++ b/sf_quality/models/quality.py
@@ -65,7 +65,7 @@ class QualityCheck(models.Model):
if self.test_results in ['返工', '报废']:
raise ValidationError('请重新选择【判定结果】-【检测结果】')
if self.workorder_id.state not in ['done']:
- self.workorder_id.write({'test_results': self.test_results})
+ self.workorder_id.write({'test_results': '合格'})
# 2)将关联的工单状态更新为“已完成”
self.workorder_id.button_finish()