diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py
index 21292f8f..d72b8738 100644
--- a/sf_manufacturing/models/mrp_production.py
+++ b/sf_manufacturing/models/mrp_production.py
@@ -891,6 +891,14 @@ class MrpProduction(models.Model):
and item.panel == work.processing_panel))
if td_ids:
work.sequence = td_ids[0].sequence
+ cancel_work_ids = workorder_ids.filtered(lambda item: item.state in ('已取消', 'cancel'))
+ if cancel_work_ids:
+ sequence = max(workorder_ids.filtered(lambda item: item.state not in ('已取消', 'cancel')),
+ key=lambda w: w.sequence).sequence
+ for cw in cancel_work_ids:
+ cw.sequence = sequence + 1
+
+
def _reset_work_order_sequence_1(self):
"""
@@ -1142,13 +1150,13 @@ class MrpProduction(models.Model):
if self.programming_state in ['已编程']:
cloud_programming = self._cron_get_programming_state()
result_ids = self.detection_result_ids.filtered(lambda dr: dr.handle_result == '待处理')
- work_ids = []
+ work_id_list = []
if result_ids:
- for result_id in result_ids:
- work_ids.append(self.workorder_ids.filtered(
- lambda wk: (wk.name == result_id.routing_type
- and wk.processing_panel == result_id.processing_panel
- and wk.state == 'done')).id)
+ work_id_list = [self.workorder_ids.filtered(
+ lambda wk: (wk.name == result_id.routing_type and wk.processing_panel == result_id.processing_panel
+ and wk.state == 'done')).id
+ for result_id in result_ids]
+
return {
'name': _('返工'),
'type': 'ir.actions.act_window',
@@ -1157,7 +1165,8 @@ class MrpProduction(models.Model):
'target': 'new',
'context': {
'default_production_id': self.id,
- 'default_workorder_ids': work_ids,
+ 'default_workorder_ids': self.workorder_ids.ids,
+ 'default_hidden_workorder_ids': ','.join(map(str, work_id_list)) if work_id_list != [] else '',
'default_reprogramming_num': cloud_programming['reprogramming_num'],
'default_programming_state': cloud_programming['programming_state'],
'default_is_reprogramming': True if cloud_programming['programming_state'] in ['已下发'] else False
diff --git a/sf_manufacturing/wizard/rework_wizard.py b/sf_manufacturing/wizard/rework_wizard.py
index 9bb7be22..6c723761 100644
--- a/sf_manufacturing/wizard/rework_wizard.py
+++ b/sf_manufacturing/wizard/rework_wizard.py
@@ -51,9 +51,17 @@ class ReworkWizard(models.TransientModel):
'test_report': self.workorder_id.detection_report})]})
self.workorder_id.button_finish()
else:
- if self.workorder_ids:
- rework_workorder_ids = self.production_id.workorder_ids.filtered(
- lambda ap: ap.id in self.workorder_ids.ids)
+ if self.hidden_workorder_ids:
+ hidden_workorder_list = self.hidden_workorder_ids.split(',')
+ rework_workorder_ids = self.workorder_ids.filtered(lambda w: str(w.id) in hidden_workorder_list)
+ # 限制判断
+ # 1、当制造订单内ZM面的工单都已完成时,返工勾选工序时只能勾选上ZM面的所有工序进行返工
+ # 2、当FM工单在CNC工单进行选择返工,并将已全部完成的ZM面工序全部勾选上时,FM工单上所有的已完成的工单(装夹预调工单)也必须进行勾选
+ done_panel_workorder_ids = self.workorder_ids.filtered(
+ lambda w: w.state == 'done' and w.processing_panel is not False)
+ else:
+ raise ValidationError('请选择返工工单!!!')
+ if rework_workorder_ids:
clamp_workorder_ids = None
if rework_workorder_ids:
# 限制
diff --git a/sf_manufacturing/wizard/rework_wizard_views.xml b/sf_manufacturing/wizard/rework_wizard_views.xml
index f9b9206d..05d1cc04 100644
--- a/sf_manufacturing/wizard/rework_wizard_views.xml
+++ b/sf_manufacturing/wizard/rework_wizard_views.xml
@@ -14,8 +14,13 @@
-
+
+
+