From 1fe8fd6933a8cd06c3b26927c345841c2c11735f Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 23 Oct 2024 11:55:43 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=99=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/product_template.py | 4 +- .../models/sf_message_maintenance_logs.py | 12 ++--- sf_message/models/sf_message_sale.py | 45 ++++++++++--------- sf_message/models/sf_message_workorder.py | 5 ++- sf_sale/models/quick_easy_order.py | 4 +- sf_sale/models/quick_easy_order_old.py | 4 +- sf_sale/views/sale_order_view.xml | 2 +- 7 files changed, 40 insertions(+), 36 deletions(-) diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 6c6b1bf8..152ae0c3 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -9,8 +9,8 @@ from odoo.exceptions import ValidationError, UserError from odoo.modules import get_resource_path -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file class ResProductMo(models.Model): diff --git a/sf_message/models/sf_message_maintenance_logs.py b/sf_message/models/sf_message_maintenance_logs.py index 288043ff..115d073b 100644 --- a/sf_message/models/sf_message_maintenance_logs.py +++ b/sf_message/models/sf_message_maintenance_logs.py @@ -4,12 +4,12 @@ class SFMessageMaintenanceLogs(models.Model): _name = 'sf.maintenance.logs' _inherit = ['sf.maintenance.logs', 'jikimo.message.dispatch'] - @api._model_create_multi - def create(self, vals_list): - res = super(SFMessageMaintenanceLogs, self).create(vals_list) - for rec in res: - rec.add_queue() - return res + # @api._model_create_multi + # def create(self, vals_list): + # res = super(SFMessageMaintenanceLogs, self).create(vals_list) + # for rec in res: + # rec.add_queue() + # return res def _get_message(self, message_queue_ids): contents = super(SFMessageMaintenanceLogs, self)._get_message(message_queue_ids) diff --git a/sf_message/models/sf_message_sale.py b/sf_message/models/sf_message_sale.py index 13a5f796..5f517d8d 100644 --- a/sf_message/models/sf_message_sale.py +++ b/sf_message/models/sf_message_sale.py @@ -49,7 +49,7 @@ class SFMessageSale(models.Model): current_time_strf = datetime.now().strftime("%Y-%m-%d %H:%M:%S") current_time = self.env['sf.sync.common'].sudo().get_add_time(current_time_strf) current_time_datetime = datetime.strptime(current_time, '%Y-%m-%d %H:%M:%S') - time_range = timedelta(minutes=2) + time_range = timedelta(minutes=30) i = 0 for item in message_queue_ids: if item.message_template_id.bussiness_node_id.name == '待接单': @@ -109,33 +109,36 @@ class SFMessageSale(models.Model): production_not_done = production.filtered(lambda p: p.state not in ['done', 'scrap', 'cancel']) production_done_count = len(production.filtered(lambda p: p.state in ['done', 'scrap', 'cancel'])) if len(production_not_done) != item.mrp_production_count: - if deadline_check == item.deadline_of_delivery: + if deadline_check == item.deadline_of_delivery and item.delivery_warning not in ['warning']: item.delivery_warning = 'warning' - elif today == item.deadline_of_delivery: + elif today == item.deadline_of_delivery and item.delivery_warning not in ['overdue']: item.delivery_warning = 'overdue' elif production_done_count == item.mrp_production_count: if item.delivery_status in ['pending', 'partial']: - if deadline_check == item.deadline_of_delivery: + if deadline_check == item.deadline_of_delivery and item.delivery_warning not in ['warning']: item.delivery_warning = 'warning' - elif today == item.deadline_of_delivery: + elif today == item.deadline_of_delivery and item.delivery_warning not in ['overdue']: item.delivery_warning = 'overdue' else: continue + # 获取业务节点 + business_node_ids = { + 'warning': self.env.ref('sf_message.bussiness_sale_order_overdue_warning').id, + 'overdue': self.env.ref('sf_message.bussiness_sale_order_overdue').id + } overdue_orders = self.sudo().search([('delivery_warning', 'in', ['warning', 'overdue'])]) for wo in overdue_orders: - message_template = self.env["jikimo.message.template"].search([ - ("model", "=", self._name), - ("bussiness_node_id", "=", self.env.ref('sf_message.bussiness_sale_order_overdue_warning').id) - ]) - sale_order_has = self.env['jikimo.message.queue'].search([ - ('res_id', '=', wo.id), - ('message_status', '=', 'pending'), - ('message_template_id', '=', message_template.id) - ]) - if not sale_order_has: - if wo.delivery_warning == 'warning': - wo.add_queue('销售订单逾期预警') - elif wo.delivery_warning == 'overdue': - wo.add_queue('销售订单已逾期') - - + business_node_id = business_node_ids.get(wo.delivery_warning) + if business_node_id: + message_template = self.env["jikimo.message.template"].search([ + ("model", "=", self._name), + ("bussiness_node_id", "=", business_node_id) + ], limit=1) + sale_order_has = self.env['jikimo.message.queue'].search([ + ('res_id', '=', wo.id), + ('message_status', '=', 'pending'), + ('message_template_id', '=', message_template.id) + ]) + if not sale_order_has: + message_name = '销售订单逾期预警' if wo.delivery_warning == 'warning' else '销售订单已逾期' + wo.add_queue(message_name) diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py index 505b6f93..ff77cd61 100644 --- a/sf_message/models/sf_message_workorder.py +++ b/sf_message/models/sf_message_workorder.py @@ -115,12 +115,13 @@ class SFMessageWork(models.Model): item.date_planned_finished.strftime("%Y-%m-%d %H:%M:%S")) date_planned_finished = datetime.strptime(date_planned_finished_str, '%Y-%m-%d %H:%M:%S') twelve_hours_ago = current_time_datetime - timedelta(hours=12) - if current_time_datetime >= date_planned_finished: + if current_time_datetime >= date_planned_finished and item.delivery_warning not in ['overdue']: logging.info("------overdue-------") logging.info(f"Workorder: {item.production_id.name}, Current Time: {current_time_datetime}, " f"Planned Finish: {date_planned_finished}") item.delivery_warning = 'overdue' - elif twelve_hours_ago <= current_time_datetime <= date_planned_finished: + elif twelve_hours_ago <= current_time_datetime <= date_planned_finished and item.delivery_warning not in [ + 'warning']: logging.info("------warning-------") logging.info(f"Workorder: {item.production_id.name}, Current Time: {current_time_datetime}, " f"Planned Finish: {date_planned_finished}") diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py index 081807a4..cb1886a1 100644 --- a/sf_sale/models/quick_easy_order.py +++ b/sf_sale/models/quick_easy_order.py @@ -8,8 +8,8 @@ from datetime import datetime import requests from odoo import http from odoo.http import request -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo import models, fields, api from odoo.modules import get_resource_path from odoo.exceptions import ValidationError, UserError diff --git a/sf_sale/models/quick_easy_order_old.py b/sf_sale/models/quick_easy_order_old.py index 4756a2c5..9bd61132 100644 --- a/sf_sale/models/quick_easy_order_old.py +++ b/sf_sale/models/quick_easy_order_old.py @@ -6,8 +6,8 @@ import os from datetime import datetime from stl import mesh # from OCC.Core.GProp import GProp_GProps -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo.addons.sf_base.commons.common import Common from odoo import models, fields, api from odoo.modules import get_resource_path diff --git a/sf_sale/views/sale_order_view.xml b/sf_sale/views/sale_order_view.xml index 61b53b08..e62fc6e1 100644 --- a/sf_sale/views/sale_order_view.xml +++ b/sf_sale/views/sale_order_view.xml @@ -95,7 +95,7 @@ {'readonly': [('state', 'in', ['cancel','sale'])]} - + From de8ba77bef0ff1b88df3248f190b3f2743547dec Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Thu, 24 Oct 2024 09:22:35 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E8=B4=A8=E6=A3=80=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_quality/models/quality_cnc_test.py | 4 ++-- sf_quality/views/quality_cnc_test_view.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sf_quality/models/quality_cnc_test.py b/sf_quality/models/quality_cnc_test.py index f911fb43..d0301a7f 100644 --- a/sf_quality/models/quality_cnc_test.py +++ b/sf_quality/models/quality_cnc_test.py @@ -31,8 +31,8 @@ class SfQualityCncTest(models.Model): ("technology", "工艺"), ("customer redrawing", "客户改图")], string="原因") detailed_reason = fields.Text('详细原因') - # machining_drawings = fields.Binary(related='workorder_id.machining_drawings', string='2D加工图纸', readonly=True) - # quality_standard = fields.Binary(related='workorder_id.quality_standard', string='质检标准', readonly=True) + machining_drawings = fields.Binary('2D加工图纸', related='workorder_id.machining_drawings', readonly=True) + quality_standard = fields.Binary('质检标准', related='workorder_id.quality_standard', readonly=True) def submit_pass(self): if self.test_results in ['返工', '报废']: diff --git a/sf_quality/views/quality_cnc_test_view.xml b/sf_quality/views/quality_cnc_test_view.xml index 85f92bfb..2cfc8cda 100644 --- a/sf_quality/views/quality_cnc_test_view.xml +++ b/sf_quality/views/quality_cnc_test_view.xml @@ -107,10 +107,10 @@ - + - + From 5788a157c57d689ceb00efa904eccc9892eefb67 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Thu, 24 Oct 2024 10:03:18 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/product_template.py | 4 ++-- .../models/sf_message_maintenance_logs.py | 12 +++++------ sf_message/models/sf_message_sale.py | 20 +++++++++++++++---- sf_sale/models/quick_easy_order.py | 4 ++-- sf_sale/models/quick_easy_order_old.py | 4 ++-- 5 files changed, 28 insertions(+), 16 deletions(-) diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 2a1bfdd2..8e81d076 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -9,8 +9,8 @@ from odoo.exceptions import ValidationError, UserError from odoo.modules import get_resource_path -# from OCC.Extend.DataExchange import read_step_file -# from OCC.Extend.DataExchange import write_stl_file +from OCC.Extend.DataExchange import read_step_file +from OCC.Extend.DataExchange import write_stl_file class ResProductMo(models.Model): diff --git a/sf_message/models/sf_message_maintenance_logs.py b/sf_message/models/sf_message_maintenance_logs.py index 115d073b..288043ff 100644 --- a/sf_message/models/sf_message_maintenance_logs.py +++ b/sf_message/models/sf_message_maintenance_logs.py @@ -4,12 +4,12 @@ class SFMessageMaintenanceLogs(models.Model): _name = 'sf.maintenance.logs' _inherit = ['sf.maintenance.logs', 'jikimo.message.dispatch'] - # @api._model_create_multi - # def create(self, vals_list): - # res = super(SFMessageMaintenanceLogs, self).create(vals_list) - # for rec in res: - # rec.add_queue() - # return res + @api._model_create_multi + def create(self, vals_list): + res = super(SFMessageMaintenanceLogs, self).create(vals_list) + for rec in res: + rec.add_queue() + return res def _get_message(self, message_queue_ids): contents = super(SFMessageMaintenanceLogs, self)._get_message(message_queue_ids) diff --git a/sf_message/models/sf_message_sale.py b/sf_message/models/sf_message_sale.py index 5f517d8d..bc2c2d11 100644 --- a/sf_message/models/sf_message_sale.py +++ b/sf_message/models/sf_message_sale.py @@ -103,23 +103,35 @@ class SFMessageSale(models.Model): today = datetime.today().date() deadline_check = today + timedelta(days=1) logging.info(f"today: {today}, deadline_check: {deadline_check}") - sale_order = self.sudo().search([('state', 'in', ['sale']), ('deadline_of_delivery', '!=', False)]) + sale_order = self.sudo().search( + [('state', 'in', ['sale']), ('deadline_of_delivery', '!=', False), ('delivery_status', '!=', 'full')]) for item in sale_order: production = self.env['mrp.production'].search([('origin', '=', item.name)]) production_not_done = production.filtered(lambda p: p.state not in ['done', 'scrap', 'cancel']) production_done_count = len(production.filtered(lambda p: p.state in ['done', 'scrap', 'cancel'])) - if len(production_not_done) != item.mrp_production_count: + if len(production_not_done) >= 1 and len(production_not_done) != item.mrp_production_count: + logging.info("-----不等于----") + logging.info(f"name: {item.name}") + logging.info( + f"production_not_done: {len(production_not_done)}, production_done_count: {production_done_count}") + logging.info(f"deadline_of_delivery: {item.deadline_of_delivery}") if deadline_check == item.deadline_of_delivery and item.delivery_warning not in ['warning']: item.delivery_warning = 'warning' - elif today == item.deadline_of_delivery and item.delivery_warning not in ['overdue']: + elif today >= item.deadline_of_delivery and item.delivery_warning not in ['overdue']: item.delivery_warning = 'overdue' elif production_done_count == item.mrp_production_count: + logging.info("-----等于----") + logging.info(f"name: {item.name}") + logging.info( + f"production_not_done: {len(production_not_done)}, production_done_count: {production_done_count}") + logging.info(f"deadline_of_delivery: {item.deadline_of_delivery}") if item.delivery_status in ['pending', 'partial']: if deadline_check == item.deadline_of_delivery and item.delivery_warning not in ['warning']: item.delivery_warning = 'warning' - elif today == item.deadline_of_delivery and item.delivery_warning not in ['overdue']: + elif today >= item.deadline_of_delivery and item.delivery_warning not in ['overdue']: item.delivery_warning = 'overdue' else: + logging.info("-----1111111----") continue # 获取业务节点 business_node_ids = { diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py index cb1886a1..081807a4 100644 --- a/sf_sale/models/quick_easy_order.py +++ b/sf_sale/models/quick_easy_order.py @@ -8,8 +8,8 @@ from datetime import datetime import requests from odoo import http from odoo.http import request -# from OCC.Extend.DataExchange import read_step_file -# from OCC.Extend.DataExchange import write_stl_file +from OCC.Extend.DataExchange import read_step_file +from OCC.Extend.DataExchange import write_stl_file from odoo import models, fields, api from odoo.modules import get_resource_path from odoo.exceptions import ValidationError, UserError diff --git a/sf_sale/models/quick_easy_order_old.py b/sf_sale/models/quick_easy_order_old.py index 9bd61132..4756a2c5 100644 --- a/sf_sale/models/quick_easy_order_old.py +++ b/sf_sale/models/quick_easy_order_old.py @@ -6,8 +6,8 @@ import os from datetime import datetime from stl import mesh # from OCC.Core.GProp import GProp_GProps -# from OCC.Extend.DataExchange import read_step_file -# from OCC.Extend.DataExchange import write_stl_file +from OCC.Extend.DataExchange import read_step_file +from OCC.Extend.DataExchange import write_stl_file from odoo.addons.sf_base.commons.common import Common from odoo import models, fields, api from odoo.modules import get_resource_path From 5e6a7d0a39df57ee02f0e0c1326ff403657ada96 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Thu, 24 Oct 2024 10:07:56 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_message/models/sf_message_maintenance_logs.py | 4 ++-- sf_message/models/sf_message_sale.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sf_message/models/sf_message_maintenance_logs.py b/sf_message/models/sf_message_maintenance_logs.py index 288043ff..e5a53eef 100644 --- a/sf_message/models/sf_message_maintenance_logs.py +++ b/sf_message/models/sf_message_maintenance_logs.py @@ -4,11 +4,11 @@ class SFMessageMaintenanceLogs(models.Model): _name = 'sf.maintenance.logs' _inherit = ['sf.maintenance.logs', 'jikimo.message.dispatch'] - @api._model_create_multi + @api.model_create_multi def create(self, vals_list): res = super(SFMessageMaintenanceLogs, self).create(vals_list) for rec in res: - rec.add_queue() + rec.add_queue('豸') return res def _get_message(self, message_queue_ids): diff --git a/sf_message/models/sf_message_sale.py b/sf_message/models/sf_message_sale.py index bc2c2d11..7bdb95a7 100644 --- a/sf_message/models/sf_message_sale.py +++ b/sf_message/models/sf_message_sale.py @@ -49,7 +49,7 @@ class SFMessageSale(models.Model): current_time_strf = datetime.now().strftime("%Y-%m-%d %H:%M:%S") current_time = self.env['sf.sync.common'].sudo().get_add_time(current_time_strf) current_time_datetime = datetime.strptime(current_time, '%Y-%m-%d %H:%M:%S') - time_range = timedelta(minutes=30) + time_range = timedelta(minutes=2) i = 0 for item in message_queue_ids: if item.message_template_id.bussiness_node_id.name == '待接单':