From 2a067778bc9897e60da75e2799f453255064067c Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Mon, 14 Oct 2024 17:53:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=B4=A8=E9=87=8F=E6=A3=80?= =?UTF-8?q?=E6=B5=8B(=E5=8A=A0=E5=B7=A5=E6=A3=80=E6=B5=8B)=E5=8F=8A?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- quality_control/views/quality_views.xml | 2 +- sf_manufacturing/controllers/controllers.py | 3 +- sf_manufacturing/views/mrp_workorder_view.xml | 2 +- sf_message/__manifest__.py | 2 +- sf_message/controllers/__init__.py | 2 +- sf_message/data/bussiness_node.xml | 5 ++ sf_message/data/cron_data.xml | 13 +++ sf_message/data/template_data.xml | 11 +++ sf_message/models/__init__.py | 1 + .../models/sf_message_quality_cnc_test.py | 36 ++++++++ sf_message/models/sf_message_workorder.py | 5 ++ sf_quality/__init__.py | 1 - sf_quality/controller/__init__.py | 1 - sf_quality/controller/workorder.py | 28 ------ sf_quality/models/quality_cnc_test.py | 33 +++++-- sf_quality/security/ir.model.access.csv | 3 + sf_quality/views/quality_cnc_test_view.xml | 88 +++++++++++++++++-- sf_quality/views/view.xml | 62 ++++++------- 18 files changed, 219 insertions(+), 79 deletions(-) create mode 100644 sf_message/models/sf_message_quality_cnc_test.py delete mode 100644 sf_quality/controller/__init__.py delete mode 100644 sf_quality/controller/workorder.py 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)]"/> -