Merge branch 'feature/制造、销售、采购优化' into feature/返工、工序优化
This commit is contained in:
@@ -914,7 +914,7 @@ class MrpProduction(models.Model):
|
|||||||
# 对工单进行逐个插入
|
# 对工单进行逐个插入
|
||||||
for work_id in work_ids:
|
for work_id in work_ids:
|
||||||
for order_id in rec.workorder_ids.filtered(lambda item: item.sequence > 0):
|
for order_id in rec.workorder_ids.filtered(lambda item: item.sequence > 0):
|
||||||
if work_id.name == order_id.name:
|
if work_id.name == order_id.name and work_id.processing_panel == order_id.processing_panel:
|
||||||
work_id.sequence = order_id.sequence + 1
|
work_id.sequence = order_id.sequence + 1
|
||||||
break
|
break
|
||||||
# 对该工单之后的工单工序进行加一
|
# 对该工单之后的工单工序进行加一
|
||||||
@@ -1196,7 +1196,9 @@ class MrpProduction(models.Model):
|
|||||||
lambda wk: (wk.name == result_id.routing_type and wk.processing_panel == result_id.processing_panel
|
lambda wk: (wk.name == result_id.routing_type and wk.processing_panel == result_id.processing_panel
|
||||||
and wk.state == 'done')).id
|
and wk.state == 'done')).id
|
||||||
for result_id in result_ids]
|
for result_id in result_ids]
|
||||||
|
workorder_ids = self.workorder_ids.filtered(
|
||||||
|
lambda wk: wk.technology_design_id.routing_tag == 'standard' and wk.state not in ['rework', 'cancel'])
|
||||||
|
logging.info('标准工艺工单【%s】' % workorder_ids)
|
||||||
return {
|
return {
|
||||||
'name': _('返工'),
|
'name': _('返工'),
|
||||||
'type': 'ir.actions.act_window',
|
'type': 'ir.actions.act_window',
|
||||||
@@ -1205,7 +1207,7 @@ class MrpProduction(models.Model):
|
|||||||
'target': 'new',
|
'target': 'new',
|
||||||
'context': {
|
'context': {
|
||||||
'default_production_id': self.id,
|
'default_production_id': self.id,
|
||||||
'default_workorder_ids': self.workorder_ids.ids,
|
'default_workorder_ids': workorder_ids.ids if workorder_ids.ids != [] else self.workorder_ids.ids,
|
||||||
'default_hidden_workorder_ids': ','.join(map(str, work_id_list)) if work_id_list != [] else '',
|
'default_hidden_workorder_ids': ','.join(map(str, work_id_list)) if work_id_list != [] else '',
|
||||||
'default_reprogramming_num': cloud_programming['reprogramming_num'],
|
'default_reprogramming_num': cloud_programming['reprogramming_num'],
|
||||||
'default_programming_state': cloud_programming['programming_state'],
|
'default_programming_state': cloud_programming['programming_state'],
|
||||||
|
|||||||
@@ -62,6 +62,36 @@ class ReworkWizard(models.TransientModel):
|
|||||||
hidden_workorder_list.sort()
|
hidden_workorder_list.sort()
|
||||||
item.hidden_workorder_ids = ','.join(hidden_workorder_list)
|
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):
|
def confirm(self):
|
||||||
if self.routing_type in ['装夹预调', 'CNC加工']:
|
if self.routing_type in ['装夹预调', 'CNC加工']:
|
||||||
self.is_clamp_measure = False
|
self.is_clamp_measure = False
|
||||||
@@ -79,20 +109,8 @@ class ReworkWizard(models.TransientModel):
|
|||||||
if self.hidden_workorder_ids:
|
if self.hidden_workorder_ids:
|
||||||
hidden_workorder_list = self.hidden_workorder_ids.split(',')
|
hidden_workorder_list = self.hidden_workorder_ids.split(',')
|
||||||
rework_workorder_ids = self.workorder_ids.filtered(lambda w: str(w.id) in hidden_workorder_list)
|
rework_workorder_ids = self.workorder_ids.filtered(lambda w: str(w.id) in hidden_workorder_list)
|
||||||
# 限制判断
|
# 调用效验方法
|
||||||
# 1、当制造订单内ZM面的工单都已完成时,返工勾选工序时只能勾选上ZM面的所有工序进行返工
|
self.efficacy_rework_wo(rework_workorder_ids)
|
||||||
# 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
|
|
||||||
else:
|
else:
|
||||||
raise ValidationError('请选择返工工单!!!')
|
raise ValidationError('请选择返工工单!!!')
|
||||||
if rework_workorder_ids:
|
if rework_workorder_ids:
|
||||||
@@ -106,7 +124,7 @@ class ReworkWizard(models.TransientModel):
|
|||||||
for clamp_workorder_id in clamp_workorder_ids:
|
for clamp_workorder_id in clamp_workorder_ids:
|
||||||
self.production_id.workorder_ids.filtered(
|
self.production_id.workorder_ids.filtered(
|
||||||
lambda wk: wk.processing_panel == clamp_workorder_id.processing_panel).write(
|
lambda wk: wk.processing_panel == clamp_workorder_id.processing_panel).write(
|
||||||
{'rfid_code': False})
|
{'rfid_code': None})
|
||||||
# 返工工单状态设置为【返工】
|
# 返工工单状态设置为【返工】
|
||||||
rework_workorder_ids.write({'state': 'rework'})
|
rework_workorder_ids.write({'state': 'rework'})
|
||||||
# 查询返工工单对应的工艺设计记录,并调用方法拼接数据,用于创建新的工单
|
# 查询返工工单对应的工艺设计记录,并调用方法拼接数据,用于创建新的工单
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<field name="processing_panel_id" invisible="1"/>
|
<field name="processing_panel_id" invisible="1"/>
|
||||||
<field name="hidden_workorder_ids" class="css_not_available_msg"/>
|
<field name="hidden_workorder_ids" class="css_not_available_msg"/>
|
||||||
<group>
|
<group>
|
||||||
<field name="hidden_workorder_ids"/>
|
<field name="hidden_workorder_ids" invisible="1"/>
|
||||||
<field options="{'no_create': True,'no_open': True}" readonly="1" name="workorder_ids"
|
<field options="{'no_create': True,'no_open': True}" readonly="1" name="workorder_ids"
|
||||||
widget="jikimo_subtree_selector_field"
|
widget="jikimo_subtree_selector_field"
|
||||||
jikimo_selector="True" replace_context="hidden_workorder_ids" string="工序"
|
jikimo_selector="True" replace_context="hidden_workorder_ids" string="工序"
|
||||||
|
|||||||
Reference in New Issue
Block a user