diff --git a/sf_manufacturing/__manifest__.py b/sf_manufacturing/__manifest__.py
index 3320f943..8e4417b9 100644
--- a/sf_manufacturing/__manifest__.py
+++ b/sf_manufacturing/__manifest__.py
@@ -10,8 +10,9 @@
""",
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
- 'depends': ['sf_base', 'sf_maintenance', 'web_widget_model_viewer', 'sf_warehouse','jikimo_attachment_viewer'],
+ 'depends': ['sf_base', 'sf_maintenance', 'web_widget_model_viewer', 'sf_warehouse', 'jikimo_attachment_viewer'],
'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 bffc524e..d042db55 100644
--- a/sf_manufacturing/models/mrp_production.py
+++ b/sf_manufacturing/models/mrp_production.py
@@ -35,23 +35,18 @@ class MrpProduction(models.Model):
tool_state_remark2 = fields.Text(string='功能刀具状态备注(无效刀)', readonly=True)
def _compute_default_delivery_status(self):
- need_list = [
- 'pending_cam',
- 'progress',
- 'rework',
- 'scrap',
- 'to_close',
- ]
try:
- if self.state not in need_list:
+ if self.state == 'cancel':
return False
if not self.deadline_of_delivery:
- return '已逾期'
+ return False
hours = self.get_hours_diff()
if hours >= 48:
return '正常'
- elif hours > 0 and hours < 48:
+ elif hours > 0 and hours < 48 and self.state != 'done':
return '预警'
+ elif hours > 0 and hours < 48 and self.state == 'done':
+ return '正常'
else:
return '已逾期'
except Exception as e:
@@ -60,20 +55,55 @@ 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 = [
+ 'draft',
+ 'technology_to_confirmed',
+ 'confirmed',
'pending_cam',
'progress',
'rework',
'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..a61b0986 100644
--- a/sf_manufacturing/models/mrp_workorder.py
+++ b/sf_manufacturing/models/mrp_workorder.py
@@ -148,19 +148,19 @@ class ResMrpWorkOrder(models.Model):
tag_type = fields.Selection([("重新加工", "重新加工")], string="标签", tracking=True)
def _compute_default_construction_period_status(self):
- need_list = [
- 'progress',
- 'to be detected']
+ need_list=['pending', 'waiting', 'ready', 'progress', 'to be detected','done']
try:
if self.state not in need_list:
return False
if not self.date_planned_finished:
- return '已逾期'
+ return False
hours = self.get_hours_diff()
if hours >= 12:
return '正常'
- elif hours > 0 and hours < 12:
+ elif hours > 0 and hours < 12 and self.state!='done':
return '预警'
+ elif hours > 0 and hours < 12 and self.state=='done':
+ return '正常'
else:
return '已逾期'
except Exception as e:
@@ -170,12 +170,46 @@ 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=['pending', 'waiting', 'ready', 'progress', 'to be detected']
+ # 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):
# 获取当前日期和时间
diff --git a/sf_manufacturing/views/mrp_production_addional_change.xml b/sf_manufacturing/views/mrp_production_addional_change.xml
index ee52cb3e..ff492436 100644
--- a/sf_manufacturing/views/mrp_production_addional_change.xml
+++ b/sf_manufacturing/views/mrp_production_addional_change.xml
@@ -557,7 +557,7 @@
-
+