From a00f4af923e70dc41f8b6c1654929b063d046d6f Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Tue, 8 Oct 2024 17:50:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=94=80=E5=94=AE=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E9=80=BE=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_message/__manifest__.py | 2 +- sf_message/data/cron_data.xml | 48 ++++++------ sf_message/data/template_data.xml | 8 +- sf_message/models/sf_message_sale.py | 75 +++++++++++++----- sf_message/views/sf_message_sale_view.xml | 10 +++ sf_message/views/sf_message_template_view.xml | 76 ------------------- sf_sale/models/sale_order.py | 3 + sf_sale/views/sale_order_view.xml | 39 +++++++--- 8 files changed, 128 insertions(+), 133 deletions(-) create mode 100644 sf_message/views/sf_message_sale_view.xml delete mode 100644 sf_message/views/sf_message_template_view.xml diff --git a/sf_message/__manifest__.py b/sf_message/__manifest__.py index 64efb3c9..37805cff 100644 --- a/sf_message/__manifest__.py +++ b/sf_message/__manifest__.py @@ -16,7 +16,7 @@ 'data/bussiness_node.xml', 'data/cron_data.xml', 'data/template_data.xml', - + 'views/sf_message_sale_view.xml', ], 'test': [ diff --git a/sf_message/data/cron_data.xml b/sf_message/data/cron_data.xml index f69dce7b..222756b1 100644 --- a/sf_message/data/cron_data.xml +++ b/sf_message/data/cron_data.xml @@ -26,31 +26,31 @@ - - 装夹预调工单逾期预警 - - code - model._overdue_warning_func() - 1 - minutes - -1 - - - - + + + + + + + + + + + + - - 工单已逾期 - - code - model._overdue_func() - 1 - minutes - -1 - - - - + + + + + + + + + + + + diff --git a/sf_message/data/template_data.xml b/sf_message/data/template_data.xml index 9de7bfc8..a05e0354 100644 --- a/sf_message/data/template_data.xml +++ b/sf_message/data/template_data.xml @@ -22,9 +22,8 @@ markdown normal - ### 待排程提醒: -单号:产品[{{product_id}}]({{url}}) -事项:{{mrp_production_count}}个制造订单待计划排程 + ### 销售订单逾期预警 +事项:共有{{sale_warning_num}}个销售订单有逾期风险 @@ -36,8 +35,7 @@ markdown normal ### 待排程提醒: -单号:销售订单[{{names}}]({{url}}) -事项:共有{{production_count}}个制造订单未加工完成,订单有逾期风险 +事项:共有{{sale_overdue_num}}个销售订单已逾期 diff --git a/sf_message/models/sf_message_sale.py b/sf_message/models/sf_message_sale.py index 7fe03168..9f211871 100644 --- a/sf_message/models/sf_message_sale.py +++ b/sf_message/models/sf_message_sale.py @@ -7,8 +7,6 @@ class SFMessageSale(models.Model): _name = 'sale.order' _inherit = ['sale.order', 'jikimo.message.dispatch'] - delivery_warning = fields.Selection([('normal', '正常'), ('warning', '告警'), ('overdue', '逾期')], string='时效') - def create(self, vals_list): res = super(SFMessageSale, self).create(vals_list) if res: @@ -45,8 +43,8 @@ class SFMessageSale(models.Model): 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: - i = 0 # 待接单的处理 if item.message_template_id.bussiness_node_id.name == '待接单': content = super(SFMessageSale, self)._get_message(item) @@ -66,30 +64,71 @@ class SFMessageSale(models.Model): content = content[0].replace('{{product_id}}', product).replace('{{url}}', url) contents.append(content) elif item.message_template_id.bussiness_node_id.name == '销售订单逾期预警': - sale_order_warning = self.sudo().search([('delivery_warning', '=', 'warning'),('id','=',int(item.res_id))]) - # if sale_order_warning: - # i++ - # - # if i>1 + current_time = datetime.now() + time_range = timedelta(minutes=2) + for reminder_time in item.message_template_id.reminder_time_ids: + content = item.message_template_id.content + target_time = current_time.replace(hour=reminder_time, minute=0, second=0, microsecond=0) + if target_time - time_range <= current_time <= target_time + time_range: + print("当前时间在12点02分以内") + sale_order_warning = self.sudo().search( + [('delivery_warning', '=', 'warning'), ('id', '=', int(item.res_id))]) + if sale_order_warning: + i += 1 + if i >= 1: + content = content.replace('{{sale_warning_num}}', i).replace('{{url}}', url) + contents.append(content) + elif item.message_template_id.bussiness_node_id.name == '销售订单已逾期': + current_time = datetime.now() + time_range = timedelta(minutes=2) + for reminder_time in item.message_template_id.reminder_time_ids: + content = item.message_template_id.content + target_time = current_time.replace(hour=reminder_time, minute=0, second=0, microsecond=0) + if target_time - time_range <= current_time <= target_time + time_range: + print("当前时间在12点02分以内") + sale_order_overdue = self.sudo().search( + [('delivery_warning', '=', 'overdue'), ('id', '=', int(item.res_id))]) + if sale_order_overdue: + i += 1 + if i >= 1: + content = content.replace('{{sale_overdue_num}}', i).replace('{{url}}', url) + contents.append(content) return contents - # # 销售订单逾期预警 - + # # 销售订单逾期预警 def _overdue_warning_func(self): today = fields.Date.today() deadline_check = today + timedelta(days=2) sale_order = self.sudo().search([('state', 'in', ['sale']), ('deadline_of_delivery', '!=', False)]) for item in sale_order: - if deadline_check < item.deadline_of_delivery: - item.delivery_warning = '告警' - else: - item.delivery_warning = '正常' + production = self.env['mrp.production'].search([('origin', '=', item.name)]) + if len(production.filtered( + lambda p: p.state not in ['done', 'scrap'])) != item.mrp_production_count: + if deadline_check < item.deadline_of_delivery: + item.delivery_warning = 'warning' + elif len(production.filtered( + lambda p: p.state in ['done', 'scrap'])) == item.mrp_production_count: + if deadline_check < item.deadline_of_delivery and item.delivery_status == 'pending': + item.delivery_warning = 'warning' sale_order_warning = self.sudo().search([('delivery_warning', '=', 'warning')]) if sale_order_warning: - if sale_order_warning.add_queue('销售订单逾期预警') - - # 销售订单已逾期 + # 销售订单已逾期 订单交期(交货日期)-当前日期时间≤0(未交货完成的销售订单) def _overdue_func(self): - return 1 + today = fields.Date.today() + sale_order = self.sudo().search([('state', 'in', ['sale']), ('deadline_of_delivery', '!=', False)]) + for item in sale_order: + delta = item.deadline_of_delivery - today + production = self.env['mrp.production'].search([('origin', '=', item.name)]) + if len(production.filtered( + lambda p: p.state not in ['done', 'scrap'])) != item.mrp_production_count: + if delta <= timedelta(days=0): + item.delivery_warning = 'overdue' + elif len(production.filtered( + lambda p: p.state in ['done', 'scrap'])) == item.mrp_production_count: + if delta <= timedelta(days=0): + item.delivery_warning = 'overdue' + sale_order_overdue = self.sudo().search([('delivery_warning', '=', 'overdue')]) + if sale_order_overdue: + sale_order_overdue.add_queue('销售订单已逾期') diff --git a/sf_message/views/sf_message_sale_view.xml b/sf_message/views/sf_message_sale_view.xml new file mode 100644 index 00000000..6de01920 --- /dev/null +++ b/sf_message/views/sf_message_sale_view.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/sf_message/views/sf_message_template_view.xml b/sf_message/views/sf_message_template_view.xml deleted file mode 100644 index 21920b64..00000000 --- a/sf_message/views/sf_message_template_view.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - sf.message.template.view.form - message.template - -
- -
-
- - - - - - - - - -
-
-
-
- - - sf.message.template.view.tree - message.template - - - - - - - - - - - - - - - sf.message.template.search.view - message.template - - - - - - - - - - - - 消息模板 - message.template - tree,form - - - - - -
-
\ No newline at end of file diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index d19a3b02..f28a76c4 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -55,6 +55,9 @@ class ReSaleOrder(models.Model): store=True, readonly=False, copy=False, precompute=True, states=READONLY_FIELD_STATES, default=fields.Datetime.now) + delivery_warning = fields.Selection([('normal', '正常'), ('warning', '告警'), ('overdue', '逾期')], string='时效') + + # 业务平台分配工厂后在智能工厂先创建销售订单 def sale_order_create(self, company_id, delivery_name, delivery_telephone, delivery_address, deadline_of_delivery, payments_way, pay_way): diff --git a/sf_sale/views/sale_order_view.xml b/sf_sale/views/sale_order_view.xml index 506f5b8d..9e2a82e8 100644 --- a/sf_sale/views/sale_order_view.xml +++ b/sf_sale/views/sale_order_view.xml @@ -67,7 +67,8 @@ {'readonly': [('state', 'in', ['cancel','sale'])]}
- + + @@ -78,6 +79,7 @@ + {'no_create': True} @@ -180,6 +182,20 @@ + + sale.order.message.search.view + sale.order + + primary + + + + + + + + + sale.order.tree sale.order @@ -189,18 +205,15 @@ create_date desc False + delivery_warning == 'warning' + delivery_warning == 'overdue' 订单号 - - - - - - - - + + + @@ -225,10 +238,18 @@ + {"search_default_categ_id":1, "search_default_filter_to_sell":1,"sale_multi_pricelist_product_template": 1} + + + + + { 'search_default_filter_order_warning':1,'search_default_filter_order_overdue':1} + + \ No newline at end of file