1、重构工单工序的生成方法;

This commit is contained in:
yuxianghui
2024-07-10 16:25:18 +08:00
parent 129f8a4d7d
commit 134e23ea2f

View File

@@ -536,70 +536,90 @@ class MrpProduction(models.Model):
def _reset_work_order_sequence(self): def _reset_work_order_sequence(self):
for rec in self: for rec in self:
sequence_list = {} workorder_ids = rec.workorder_ids.filtered(lambda item: item.state in ('返工', 'rework'))
# 产品模型类型 # 产品模型类型
model_type_id = rec.product_id.product_model_type_id model_type_id = rec.product_id.product_model_type_id
# 产品加工面板 # 产品加工面板
model_processing_panel = rec.product_id.model_processing_panel model_processing_panel = rec.product_id.model_processing_panel
if model_type_id: if not workorder_ids:
if model_processing_panel: sequence_list = {}
tmpl_num = 1 if model_type_id:
panel_list = model_processing_panel.split(',') if model_processing_panel:
for panel in panel_list: tmpl_num = 1
panel_sequence_list = {} panel_list = model_processing_panel.split(',')
# 成品工序 for panel in panel_list:
product_routing_tmpl_ids = model_type_id.product_routing_tmpl_ids panel_sequence_list = {}
if product_routing_tmpl_ids: # 成品工序
for tmpl_id in product_routing_tmpl_ids: product_routing_tmpl_ids = model_type_id.product_routing_tmpl_ids
panel_sequence_list.update({tmpl_id.route_workcenter_id.name: tmpl_num}) if product_routing_tmpl_ids:
tmpl_num += 1 for tmpl_id in product_routing_tmpl_ids:
sequence_list.update({panel: panel_sequence_list}) panel_sequence_list.update({tmpl_id.route_workcenter_id.name: tmpl_num})
# 表面工艺工序 tmpl_num += 1
# 模型类型的表面工艺工序模版 sequence_list.update({panel: panel_sequence_list})
surface_tmpl_ids = model_type_id.surface_technics_routing_tmpl_ids # 表面工艺工序
# 产品选择的表面工艺 # 模型类型的表面工艺工序模版
model_process_parameters_ids = rec.product_id.model_process_parameters_ids surface_tmpl_ids = model_type_id.surface_technics_routing_tmpl_ids
process_dict = {} # 产品选择的表面工艺
if model_process_parameters_ids: model_process_parameters_ids = rec.product_id.model_process_parameters_ids
for process_parameters_id in model_process_parameters_ids: process_dict = {}
process_id = process_parameters_id.process_id if model_process_parameters_ids:
for surface_tmpl_id in surface_tmpl_ids: for process_parameters_id in model_process_parameters_ids:
if process_id == surface_tmpl_id.route_workcenter_id.surface_technics_id: process_id = process_parameters_id.process_id
surface_tmpl_name = surface_tmpl_id.route_workcenter_id.name for surface_tmpl_id in surface_tmpl_ids:
process_dict.update({int(process_id.category_id.code): '%s-%s' % ( if process_id == surface_tmpl_id.route_workcenter_id.surface_technics_id:
surface_tmpl_name, process_parameters_id.name)}) surface_tmpl_name = surface_tmpl_id.route_workcenter_id.name
process_list = sorted(process_dict.keys()) process_dict.update({int(process_id.category_id.code): '%s-%s' % (
for process_num in process_list: surface_tmpl_name, process_parameters_id.name)})
sequence_list.update({process_dict.get(process_num): tmpl_num}) process_list = sorted(process_dict.keys())
tmpl_num += 1 for process_num in process_list:
# 坯料工序 sequence_list.update({process_dict.get(process_num): tmpl_num})
tmpl_num = 1
embryo_routing_tmpl_ids = model_type_id.embryo_routing_tmpl_ids
if embryo_routing_tmpl_ids:
for tmpl_id in embryo_routing_tmpl_ids:
sequence_list.update({tmpl_id.route_workcenter_id.name: tmpl_num})
tmpl_num += 1 tmpl_num += 1
# 坯料工序
tmpl_num = 1
embryo_routing_tmpl_ids = model_type_id.embryo_routing_tmpl_ids
if embryo_routing_tmpl_ids:
for tmpl_id in embryo_routing_tmpl_ids:
sequence_list.update({tmpl_id.route_workcenter_id.name: tmpl_num})
tmpl_num += 1
else:
raise ValidationError('该产品【加工面板】为空!')
else: else:
raise ValidationError('该产品【加工面板】为空!') raise ValidationError('该产品没有选择【模版类型】!')
else: for work in rec.workorder_ids:
raise ValidationError('该产品没有选择【模版类型】!') if sequence_list.get(work.name):
work.sequence = sequence_list[work.name]
for work in rec.workorder_ids: elif sequence_list.get(work.processing_panel):
if sequence_list.get(work.name): processing_panel = sequence_list.get(work.processing_panel)
work.sequence = sequence_list[work.name] if processing_panel.get(work.name):
elif sequence_list.get(work.processing_panel): work.sequence = processing_panel[work.name]
processing_panel = sequence_list.get(work.processing_panel) else:
if processing_panel.get(work.name): raise ValidationError('工序【%s】在产品选择的模版类型中不存在!' % work.name)
work.sequence = processing_panel[work.name]
else: else:
raise ValidationError('工序【%s】在产品选择的模版类型中不存在!' % work.name) raise ValidationError('工序【%s】在产品选择的模版类型中不存在!' % work.name)
else: # 当单个面触发返工时,将新生成的工单插入到返工工单下方,并且后面的所以工单工序重排
raise ValidationError('工序【%s】在产品选择的模版类型中不存在!' % work.name) elif rec.workorder_ids.filtered(lambda item: item.sequence == 0):
# if work.name == '获取CNC加工程序': # 获取新增的返工工单
# work.button_start() work_ids = rec.workorder_ids.filtered(lambda item: item.sequence == 0)
# #work.fetchCNC() # 获取当前返工面最后一个工单工序
# work.button_finish() sequence_max = sorted(
rec.workorder_ids.filtered(lambda item: item.processing_panel == work_ids[0].processing_panel),
key=lambda item: item.sequence, reverse=True)[0].sequence
# 对当前返工工单之后的工单工序进行重排
work_order_ids = rec.workorder_ids.filtered(lambda item: item.sequence > sequence_max)
for work_id in work_order_ids:
work_id.sequence = work_id.sequence + 3
# 生成新增的返工工单的工序
# 成品工序
panel_sequence_list = {}
product_routing_tmpl_ids = model_type_id.product_routing_tmpl_ids
if product_routing_tmpl_ids:
for tmpl_id in product_routing_tmpl_ids:
sequence_max += 1
panel_sequence_list.update({tmpl_id.route_workcenter_id.name: sequence_max})
for work_id in work_ids:
if panel_sequence_list.get(work_id.name):
work_id.sequence = panel_sequence_list[work_id.name]
# 创建工单并进行排序 # 创建工单并进行排序
def _create_workorder(self, item): def _create_workorder(self, item):