From 9a9bfd198b775f5d326c64c87a694753cca91b87 Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Wed, 13 Nov 2024 14:46:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A4=E6=9C=9F=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/__manifest__.py | 4 +- sf_manufacturing/data/cron_data.xml | 29 ++++++++++++++ sf_manufacturing/models/mrp_production.py | 46 ++++++++++++++++++---- sf_manufacturing/models/mrp_workorder.py | 47 +++++++++++++++++++---- 4 files changed, 111 insertions(+), 15 deletions(-) create mode 100644 sf_manufacturing/data/cron_data.xml diff --git a/sf_manufacturing/__manifest__.py b/sf_manufacturing/__manifest__.py index 98c71f21..eea7da85 100644 --- a/sf_manufacturing/__manifest__.py +++ b/sf_manufacturing/__manifest__.py @@ -10,8 +10,10 @@ """, 'category': 'sf', 'website': 'https://www.sf.jikimo.com', - 'depends': ['sf_base', 'sf_maintenance', 'web_widget_model_viewer', 'sf_warehouse','jikimo_attachment_viewer', 'jikimo_sale_multiple_supply_methods'], + 'depends': ['sf_base', 'sf_maintenance', 'web_widget_model_viewer', 'sf_warehouse', 'jikimo_attachment_viewer', + 'jikimo_sale_multiple_supply_methods'], 'data': [ + 'data/cron_data.xml', 'data/stock_data.xml', 'data/empty_racks_data.xml', 'data/panel_data.xml', diff --git a/sf_manufacturing/data/cron_data.xml b/sf_manufacturing/data/cron_data.xml new file mode 100644 index 00000000..36e5bcf9 --- /dev/null +++ b/sf_manufacturing/data/cron_data.xml @@ -0,0 +1,29 @@ + + + + 工期状态变更 + + code + model._corn_update_construction_period_status() + 12 + hours + -1 + + + + + + + 交期状态变更 + + code + model._corn_update_delivery_status() + 12 + hours + -1 + + + + + + \ No newline at end of file diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index 6e6b71cd..5f479969 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -60,6 +60,42 @@ class MrpProduction(models.Model): @api.depends('state', 'deadline_of_delivery') def _compute_delivery_status(self): + for production in self: + delivery_status = production._compute_default_delivery_status() + if delivery_status and production.delivery_status != delivery_status: + production.delivery_status = delivery_status + + delivery_status = fields.Selection([('正常', '正常'), ('预警', '预警'), ('已逾期', '已逾期')], string='交期状态', + store=True, + compute='_compute_delivery_status', + default=lambda self: self._compute_default_delivery_status()) + + def get_page_all_records(self, model_name, func, domain, page_size=100): + # 获取模型对象 + model = self.env[model_name].sudo() + + # 初始化分页参数 + page_number = 1 + while True: + # 计算偏移量 + offset = (page_number - 1) * page_size + + # 获取当前页的数据 + records = model.search(domain, limit=page_size, offset=offset) + + # 如果没有更多记录,退出循环 + if not records: + break + + # 将当前页的数据添加到结果列表 + func(records) + # 增加页码 + page_number += 1 + + def run_compute_delivery_status(self, records): + records._compute_delivery_status() + + def _corn_update_delivery_status(self): need_list = [ 'pending_cam', 'progress', @@ -67,13 +103,9 @@ class MrpProduction(models.Model): 'scrap', 'to_close', ] - for production in self: - production.delivery_status = production._compute_default_delivery_status() - - delivery_status = fields.Selection([('正常', '正常'), ('预警', '预警'), ('已逾期', '已逾期')], string='交期状态', - store=True, - compute='_compute_delivery_status', - default=lambda self: self._compute_default_delivery_status()) + # previous_workorder = self.env['mrp.production'].search([('state', 'in', need_list)]) + self.get_page_all_records('mrp.production', self.run_compute_delivery_status, + [('state', 'in', need_list)], 100) def get_hours_diff(self): # 获取当前日期和时间 diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 8750de2c..19c28352 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -149,8 +149,8 @@ class ResMrpWorkOrder(models.Model): def _compute_default_construction_period_status(self): need_list = [ - 'progress', - 'to be detected'] + 'progress', + 'to be detected'] try: if self.state not in need_list: return False @@ -170,12 +170,45 @@ class ResMrpWorkOrder(models.Model): @api.depends('state', 'date_planned_finished') def _compute_construction_period_status(self): for worker in self: - worker.construction_period_status = worker._compute_default_construction_period_status() + construction_period_status = worker._compute_default_construction_period_status() + if construction_period_status and worker.construction_period_status!=construction_period_status: + worker.construction_period_status = construction_period_status - construction_period_status = fields.Selection([('正常', '正常'), ('预警', '预警'), ('已逾期', '已逾期')], string='工期状态', - store=True, - compute='_compute_construction_period_status', - default=lambda self: self._compute_default_construction_period_status()) + construction_period_status = fields.Selection([('正常', '正常'), ('预警', '预警'), ('已逾期', '已逾期')], + string='工期状态', + store=True, + compute='_compute_construction_period_status', + default=lambda + self: self._compute_default_construction_period_status()) + + def get_page_all_records(self, model_name, func, domain, page_size=100): + # 获取模型对象 + model = self.env[model_name].sudo() + + # 初始化分页参数 + page_number = 1 + while True: + # 计算偏移量 + offset = (page_number - 1) * page_size + + # 获取当前页的数据 + records = model.search(domain, limit=page_size, offset=offset) + + # 如果没有更多记录,退出循环 + if not records: + break + + # 将当前页的数据添加到结果列表 + func(records) + # 增加页码 + page_number += 1 + def run_compute_construction_period_status(self,records): + records._compute_construction_period_status() + def _corn_update_construction_period_status(self): + need_list = [ + 'progress', + 'to be detected'] + self.get_page_all_records('mrp.workorder',self.run_compute_construction_period_status,[('state', 'in', need_list)],100) def get_hours_diff(self): # 获取当前日期和时间