diff --git a/sf_machine_connect/controllers/controllers.py b/sf_machine_connect/controllers/controllers.py index 6f692bde..9702b6e4 100644 --- a/sf_machine_connect/controllers/controllers.py +++ b/sf_machine_connect/controllers/controllers.py @@ -6,7 +6,7 @@ import base64 import logging import psycopg2 from datetime import datetime, timedelta -from odoo import http +from odoo import http, fields from odoo.http import request # 数据库连接配置 @@ -347,6 +347,32 @@ class Sf_Dashboard_Connect(http.Controller): # 工单进度偏差 plan_data_progress_deviation = plan_data_total_counts - plan_data_finish_counts - plan_data_fault_counts + # 交付准时率 + plan_data_finish_orders = plan_obj.search( + [('production_line_id.name', '=', line), ('state', 'in', ['finished'])]) + + delay_num = 0 + for plan in plan_data_finish_orders: + sale_obj = request.env['sale.order'].sudo().search([('name', '=', plan.origin)]) + if sale_obj: + if sale_obj.deadline_of_delivery and plan.actual_end_time: + # 将 deadline_of_delivery 转换为字符串 + date_as_string = sale_obj.deadline_of_delivery.strftime('%Y-%m-%d') + # 然后使用 strptime 将字符串转换为 datetime 对象 + date_as_datetime = datetime.strptime(date_as_string, '%Y-%m-%d') + + # 将 actual_end_time 转换为 datetime 对象 + datetime_value = fields.Datetime.from_string(plan.actual_end_time) + + # 给 datetime_value 加1天 + new_datetime_value = datetime_value + timedelta(days=1) + + # 比较 new_datetime_value 和 date_as_datetime 的大小 + if new_datetime_value.date() > date_as_datetime.date(): + delay_num += 1 + delay_rate = round((delay_num / plan_data_finish_counts if plan_data_finish_counts > 0 else 0), 3) + on_time_rate = 1 - delay_rate + if plan_data: data = { 'plan_data_total_counts': plan_data_total_counts, @@ -355,7 +381,8 @@ class Sf_Dashboard_Connect(http.Controller): 'plan_data_fault_counts': plan_data_fault_counts, 'finishe_rate': finishe_rate, 'plan_data_progress_deviation': plan_data_progress_deviation, - 'plan_data_rework_counts': plan_data_rework_counts + 'plan_data_rework_counts': plan_data_rework_counts, + 'on_time_rate': on_time_rate } res['data'][line] = data @@ -514,10 +541,15 @@ class Sf_Dashboard_Connect(http.Controller): for line in line_list: # 未完成订单 not_done_orders = plan_obj.search( - [('production_line_id.name', '=', line), ('state', 'not in', ['finished'])]) + [('production_line_id.name', '=', line), ('state', 'not in', ['finished']), + ('production_id.state', 'not in', ['cancel']), ('active', '=', True) + ]) print(not_done_orders) # 完成订单 - finish_orders = plan_obj.search([('production_line_id.name', '=', line), ('state', 'in', ['finished'])]) + finish_orders = plan_obj.search([ + ('production_line_id.name', '=', line), ('state', 'in', ['finished']), + ('production_id.state', 'not in', ['cancel']), ('active', '=', True) + ]) print(finish_orders) # 获取所有未完成订单的ID列表