1、制造订单点击返工按钮添加新的过滤条件;2、优化工单工序逻辑;3、返工添加校验限制条件;
This commit is contained in:
@@ -62,6 +62,36 @@ class ReworkWizard(models.TransientModel):
|
||||
hidden_workorder_list.sort()
|
||||
item.hidden_workorder_ids = ','.join(hidden_workorder_list)
|
||||
|
||||
def efficacy_rework_wo(self, wk_ids):
|
||||
"""限制判断 """
|
||||
# 判断检测结果待处理所对应的工单是否勾选
|
||||
result_ids = self.production_id.detection_result_ids.filtered(lambda dr: dr.handle_result == '待处理')
|
||||
work_id_list = []
|
||||
if result_ids:
|
||||
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]
|
||||
if len(wk_ids.filtered(lambda wk: wk.id in work_id_list)) != len(work_id_list):
|
||||
raise ValidationError('存在【检测结果】为【待处理】所对应的工单未进行勾选!!!')
|
||||
# 获取已完成的标准工单
|
||||
grouped_rw_ids = {key: list(group) for key, group in groupby(wk_ids, key=lambda w: w.processing_panel)}
|
||||
for panel, panel_rw_ids in grouped_rw_ids.items():
|
||||
# 1、当制造订单内ZM面的工单都已完成时,返工勾选工序时只能勾选上ZM面的所有工序进行返工
|
||||
work_ids = self.workorder_ids.filtered(lambda w: w.state == 'done' and w.processing_panel == panel)
|
||||
if len(work_ids) == 3 and len(panel_rw_ids) != 3:
|
||||
raise ValidationError(
|
||||
'因为[%s]面的工单已全部完成,如果要对[%s]面的工单进行返工,请勾选这个面的所有工单。' % (panel, panel))
|
||||
# 2、当FM工单在CNC工单进行选择返工,并将已全部完成的ZM面工序全部勾选上时,FM工单上所有的已完成的工单(装夹预调工单)也必须进行勾选
|
||||
if not wk_ids.filtered(lambda wk: wk.name == '装夹预调' and wk.processing_panel == panel):
|
||||
if wk_ids.filtered(lambda wk: wk.name == 'CNC加工' and wk.processing_panel == panel):
|
||||
sequence_max = wk_ids.filtered(lambda wk: wk.name == 'CNC加工' and wk.processing_panel == panel).sequence
|
||||
for wk_id in wk_ids.filtered(lambda wk: wk.sequence < sequence_max):
|
||||
if len(wk_ids.filtered(lambda wk: wk.processing_panel == wk_id.processing_panel)) == 3:
|
||||
raise ValidationError(
|
||||
'由于在[%s]面之前存在整个面进行了勾选的情况,所以在勾选了[%s]面的【CNC加工】工单的时,请勾选[%s]面的装夹预调工单!' % (
|
||||
panel, panel, panel))
|
||||
|
||||
def confirm(self):
|
||||
if self.routing_type in ['装夹预调', 'CNC加工']:
|
||||
self.is_clamp_measure = False
|
||||
@@ -79,20 +109,8 @@ class ReworkWizard(models.TransientModel):
|
||||
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_normative_workorder_ids = self.workorder_ids.filtered(
|
||||
# lambda w: w.state == 'done' and w.processing_panel is not False)
|
||||
# # 获取需要返工的标准工单
|
||||
# rework_normative_workorder_ids = rework_workorder_ids.filtered(
|
||||
# lambda w: w.processing_panel is not False)
|
||||
# if rework_normative_workorder_ids:
|
||||
# for rw in rework_normative_workorder_ids:
|
||||
# if len(done_normative_workorder_ids.filtered(
|
||||
# lambda w: w.processing_panel == rw.processing_panel)) == 3:
|
||||
# pass
|
||||
# 调用效验方法
|
||||
self.efficacy_rework_wo(rework_workorder_ids)
|
||||
else:
|
||||
raise ValidationError('请选择返工工单!!!')
|
||||
if rework_workorder_ids:
|
||||
@@ -106,7 +124,7 @@ class ReworkWizard(models.TransientModel):
|
||||
for clamp_workorder_id in clamp_workorder_ids:
|
||||
self.production_id.workorder_ids.filtered(
|
||||
lambda wk: wk.processing_panel == clamp_workorder_id.processing_panel).write(
|
||||
{'rfid_code': False})
|
||||
{'rfid_code': None})
|
||||
# 返工工单状态设置为【返工】
|
||||
rework_workorder_ids.write({'state': 'rework'})
|
||||
# 查询返工工单对应的工艺设计记录,并调用方法拼接数据,用于创建新的工单
|
||||
|
||||
Reference in New Issue
Block a user