diff --git a/quality_control/views/quality_views.xml b/quality_control/views/quality_views.xml
index f7a1a3dc..fbd917b2 100644
--- a/quality_control/views/quality_views.xml
+++ b/quality_control/views/quality_views.xml
@@ -1033,7 +1033,7 @@
name="Overview"
action="quality_alert_team_action"
parent="menu_quality_root"
- sequence="5"/>
+ sequence="5" active="False"/>
-
diff --git a/sf_message/__manifest__.py b/sf_message/__manifest__.py
index 506fd122..4c308ec7 100644
--- a/sf_message/__manifest__.py
+++ b/sf_message/__manifest__.py
@@ -11,7 +11,7 @@
""",
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
- 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify', 'stock'],
+ 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify', 'stock', 'sf_quality'],
'data': [
'data/bussiness_node.xml',
'data/cron_data.xml',
diff --git a/sf_message/controllers/__init__.py b/sf_message/controllers/__init__.py
index deec4a8b..12a7e529 100644
--- a/sf_message/controllers/__init__.py
+++ b/sf_message/controllers/__init__.py
@@ -1 +1 @@
-from . import main
\ No newline at end of file
+from . import main
diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml
index efa03236..c2e02365 100644
--- a/sf_message/data/bussiness_node.xml
+++ b/sf_message/data/bussiness_node.xml
@@ -89,5 +89,10 @@
mrp.workorder
+
+ 待质量判定
+ quality.cnc.test
+
+
\ No newline at end of file
diff --git a/sf_message/data/cron_data.xml b/sf_message/data/cron_data.xml
index 4b70f5f6..f095c9bd 100644
--- a/sf_message/data/cron_data.xml
+++ b/sf_message/data/cron_data.xml
@@ -25,5 +25,18 @@
+
+
+ 检查工单是否完成并恢复正常时效
+
+ code
+ model._recover_time_warning_func()
+ 10
+ minutes
+ -1
+
+
+
+
\ No newline at end of file
diff --git a/sf_message/data/template_data.xml b/sf_message/data/template_data.xml
index 835ff7ab..b2064832 100644
--- a/sf_message/data/template_data.xml
+++ b/sf_message/data/template_data.xml
@@ -227,5 +227,16 @@
+
+
+ 待质量判定
+
+ quality.cnc.test
+
+ markdown
+ normal
+ ### 待质量判定提醒
+事项:共有[{{judge_num}}]({{url}})个工单需判定质量结果
+
\ No newline at end of file
diff --git a/sf_message/models/__init__.py b/sf_message/models/__init__.py
index 77a7ce17..d3e79467 100644
--- a/sf_message/models/__init__.py
+++ b/sf_message/models/__init__.py
@@ -7,3 +7,4 @@ from . import sf_message_functional_tool_assembly
from . import sf_message_purchase
from . import sf_message_workorder
from . import sf_message_functional_tool_dismantle
+from . import sf_message_quality_cnc_test
diff --git a/sf_message/models/sf_message_quality_cnc_test.py b/sf_message/models/sf_message_quality_cnc_test.py
new file mode 100644
index 00000000..0ddc1391
--- /dev/null
+++ b/sf_message/models/sf_message_quality_cnc_test.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+import logging
+from datetime import datetime, timedelta
+from odoo import models, fields, api, _
+
+
+class SFMessageQualityCncTest(models.Model):
+ _name = 'quality.cnc.test'
+ _inherit = ['quality.cnc.test', 'jikimo.message.dispatch']
+
+ def create(self, vals_list):
+ res = super(SFMessageQualityCncTest, self).create(vals_list)
+ if res:
+ try:
+ logging.info('add_queue res:%s' % res)
+ res.add_queue('待质量判定')
+ except Exception as e:
+ logging.info('add_queue error:%s' % e)
+ return res
+
+ # 继承并重写jikimo.message.dispatch的_get_message()
+ def _get_message(self, message_queue_ids):
+ contents = []
+ url = self.env['ir.config_parameter'].get_param('web.base.url')
+ i = 0
+ for item in message_queue_ids:
+ if item.message_template_id.bussiness_node_id.name == '待质量判定':
+ content = item.message_template_id.content
+ i += 1
+ if i >= 1:
+ action_id = self.env.ref('sf_quality.action_quality_cnc_test').id
+ url_with_id = f"{url}/web#view_type=list&action={action_id}"
+ content_template = content.replace('{{judge_num}}', str(i))
+ content_template = content_template.replace('{{url}}', url_with_id)
+ contents.append(content_template)
+ return contents
diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py
index 412ea39b..812bf798 100644
--- a/sf_message/models/sf_message_workorder.py
+++ b/sf_message/models/sf_message_workorder.py
@@ -148,3 +148,8 @@ class SFMessageWork(models.Model):
args = [f'{item.routing_type}{overdue_message}']
# 获取add_queue方法并调用它,传入参数列表
getattr(item, queue_method_name)(*args)
+
+ def _recover_time_warning_func(self):
+ workorder_done = self.env['mrp.workorder'].search([("state", "=", "done")])
+ workorder_overdue = workorder_done.filtered(lambda x: x.delivery_warning == 'overdue')
+ workorder_overdue.write({'delivery_warning': 'normal'})
diff --git a/sf_quality/__init__.py b/sf_quality/__init__.py
index 4dc6605a..8134f974 100644
--- a/sf_quality/__init__.py
+++ b/sf_quality/__init__.py
@@ -2,4 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
-from . import controller
diff --git a/sf_quality/controller/__init__.py b/sf_quality/controller/__init__.py
deleted file mode 100644
index 82545660..00000000
--- a/sf_quality/controller/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from . import workorder
diff --git a/sf_quality/controller/workorder.py b/sf_quality/controller/workorder.py
deleted file mode 100644
index 37e1903b..00000000
--- a/sf_quality/controller/workorder.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- coding: utf-8 -*-
-import json
-import requests
-import logging
-from odoo import http
-from odoo.http import request
-from odoo.addons.sf_manufacturing.controllers.controllers import Manufacturing_Connect
-from odoo.addons.sf_base.commons.common import Common
-
-_logger = logging.getLogger(__name__)
-
-
-class SfQualityConnect(Manufacturing_Connect):
-
- @http.route('/AutoDeviceApi/AGVDownProduct', type='json', auth='none', methods=['GET', 'POST'], csrf=False,
- cors="*")
- def AGVDownProduct(self, **kw):
- res = super(SfQualityConnect, self).AGVDownProduct(**kw)
- res = json.loads(res)
- if res.get('workorder_ids'):
- try:
- _logger.info('已下产线的工单:%s' % res.get('workorder_ids'))
- for order_id in res['workorder_ids']:
- request.env['quality.cnc.test'].sudo().create(
- {'workorder_id': order_id, 'write_uid': False, 'write_date': False})
- except Exception as e:
- _logger.info('AGV运送下产线接口:%s' % e)
- return json.JSONEncoder().encode(res)
diff --git a/sf_quality/models/quality_cnc_test.py b/sf_quality/models/quality_cnc_test.py
index 89aa4500..f3fe5dbd 100644
--- a/sf_quality/models/quality_cnc_test.py
+++ b/sf_quality/models/quality_cnc_test.py
@@ -25,23 +25,44 @@ class SfQualityCncTest(models.Model):
('pass', '合格'),
('fail', '不合格')], string='判定结果')
number = fields.Integer('数量', default=1)
- test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], default='合格',
- string="检测结果")
+ test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], string="检测结果")
reason = fields.Selection(
[("programming", "编程"), ("cutter", "刀具"), ("clamping", "装夹"), ("operate computer", "操机"),
("technology", "工艺"), ("customer redrawing", "客户改图")], string="原因")
detailed_reason = fields.Text('详细原因')
def submit_pass(self):
- self.write({'result': 'pass', 'test_results': '合格', 'state': 'done'})
+ self.write({'result': 'pass', 'test_results': self.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.reason and not self.detailed_reason:
- raise UserError(_('请填写【检测情况】里的信息'))
+ if not self.reason and not self.detailed_reason and not self.test_results:
+ raise UserError(_('请填写【判定结果】里的信息'))
else:
- self.write({'result': 'fail', 'test_results': '合格', 'state': 'done'})
+ 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()
+
+
+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)
+ if self.state == 'to be detected':
+ quality_cnc_test = self.env['quality.cnc.test'].search([('workorder_id', '=', self.id)])
+ if not quality_cnc_test:
+ self.env['quality.cnc.test'].sudo().create({'workorder_id': self.id})
diff --git a/sf_quality/security/ir.model.access.csv b/sf_quality/security/ir.model.access.csv
index 20d1a68e..19818982 100644
--- a/sf_quality/security/ir.model.access.csv
+++ b/sf_quality/security/ir.model.access.csv
@@ -70,5 +70,8 @@ access_stock_move_group_quality_director,stock_move_group_quality_director,stock
access_quality_cnc_test_group_quality,quality_cnc_test_group_quality,model_quality_cnc_test,sf_base.group_quality,1,1,0,0
access_quality_cnc_test_group_quality_director,quality_cnc_test_group_quality_director,model_quality_cnc_test,sf_base.group_quality_director,1,1,0,0
+access_quality_cnc_test_group_sf_equipment_user,quality_cnc_test_group_sf_equipment_user,model_quality_cnc_test,sf_base.group_sf_equipment_user,1,1,0,0
+
+
diff --git a/sf_quality/views/quality_cnc_test_view.xml b/sf_quality/views/quality_cnc_test_view.xml
index d14d3233..129783f2 100644
--- a/sf_quality/views/quality_cnc_test_view.xml
+++ b/sf_quality/views/quality_cnc_test_view.xml
@@ -39,7 +39,7 @@
filter_domain="[('production_id', 'ilike', self)]"/>
-
+
@@ -96,14 +96,20 @@
-
+
-
-
-
+
+
+
-
+
+
+
+
+
+
+
@@ -115,6 +121,54 @@
+
+ quality.cnc.test.view.kanban
+ quality.cnc.test
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 驾驶舱
+ ir.actions.act_window
+ quality.cnc.test
+ kanban,form
+
+
+ []
+
+
+ 暂无加工质检单
+
+
+
+
+
+
diff --git a/sf_quality/views/view.xml b/sf_quality/views/view.xml
index b5fff367..23eac6cc 100644
--- a/sf_quality/views/view.xml
+++ b/sf_quality/views/view.xml
@@ -34,36 +34,36 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+