1、添加返工向导中选择返工工单限制条件
This commit is contained in:
@@ -4,6 +4,7 @@ import logging
|
|||||||
from odoo.exceptions import UserError, ValidationError
|
from odoo.exceptions import UserError, ValidationError
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from odoo import models, api, fields, _
|
from odoo import models, api, fields, _
|
||||||
|
from odoo.tools import groupby
|
||||||
|
|
||||||
|
|
||||||
class ReworkWizard(models.TransientModel):
|
class ReworkWizard(models.TransientModel):
|
||||||
@@ -37,6 +38,30 @@ class ReworkWizard(models.TransientModel):
|
|||||||
|
|
||||||
tool_state = fields.Selection(string='功能刀具状态', related='production_id.tool_state')
|
tool_state = fields.Selection(string='功能刀具状态', related='production_id.tool_state')
|
||||||
|
|
||||||
|
@api.onchange('hidden_workorder_ids')
|
||||||
|
def _onchange_hidden_workorder_ids(self):
|
||||||
|
for item in self:
|
||||||
|
if item.hidden_workorder_ids not in ['', None, False]:
|
||||||
|
hidden_workorder_list = item.hidden_workorder_ids.split(',')
|
||||||
|
# 获取加工面对应需要返工的工单
|
||||||
|
rw_ids = item.workorder_ids.filtered(
|
||||||
|
lambda w: str(w.ids[0]) in hidden_workorder_list and w.processing_panel not in ['', None, False])
|
||||||
|
grouped_rw_ids = {key: list(group) for key, group in groupby(rw_ids, key=lambda w: w.processing_panel)}
|
||||||
|
for panel, panel_rw_ids in grouped_rw_ids.items():
|
||||||
|
work_ids = item.workorder_ids.filtered(lambda w: w.state == 'done' and w.processing_panel == panel)
|
||||||
|
if len(work_ids) == 3 and len(panel_rw_ids) != 3:
|
||||||
|
for work_id in work_ids:
|
||||||
|
if work_id not in panel_rw_ids:
|
||||||
|
hidden_workorder_list.append(str(work_id.ids[0]))
|
||||||
|
elif len(work_ids) == 2 and len(panel_rw_ids) < 2 and panel_rw_ids[0].name == 'CNC加工':
|
||||||
|
if rw_ids.filtered(lambda w: (w.sequence < panel_rw_ids[0].sequence
|
||||||
|
and w.processing_panel != panel_rw_ids[0].processing_panel)):
|
||||||
|
hidden_workorder_list.append(str(work_ids.filtered(
|
||||||
|
lambda w: (w.processing_panel == panel_rw_ids[0].processing_panel
|
||||||
|
and w.name == '装夹预调')).ids[0]))
|
||||||
|
hidden_workorder_list.sort()
|
||||||
|
item.hidden_workorder_ids = ','.join(hidden_workorder_list)
|
||||||
|
|
||||||
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
|
||||||
@@ -58,16 +83,16 @@ class ReworkWizard(models.TransientModel):
|
|||||||
# 1、当制造订单内ZM面的工单都已完成时,返工勾选工序时只能勾选上ZM面的所有工序进行返工
|
# 1、当制造订单内ZM面的工单都已完成时,返工勾选工序时只能勾选上ZM面的所有工序进行返工
|
||||||
# 2、当FM工单在CNC工单进行选择返工,并将已全部完成的ZM面工序全部勾选上时,FM工单上所有的已完成的工单(装夹预调工单)也必须进行勾选
|
# 2、当FM工单在CNC工单进行选择返工,并将已全部完成的ZM面工序全部勾选上时,FM工单上所有的已完成的工单(装夹预调工单)也必须进行勾选
|
||||||
# 获取已完成的标准工单
|
# 获取已完成的标准工单
|
||||||
done_normative_workorder_ids = self.workorder_ids.filtered(
|
# done_normative_workorder_ids = self.workorder_ids.filtered(
|
||||||
lambda w: w.state == 'done' and w.processing_panel is not False)
|
# lambda w: w.state == 'done' and w.processing_panel is not False)
|
||||||
# 获取需要返工的标准工单
|
# # 获取需要返工的标准工单
|
||||||
rework_normative_workorder_ids = rework_workorder_ids.filtered(
|
# rework_normative_workorder_ids = rework_workorder_ids.filtered(
|
||||||
lambda w: w.processing_panel is not False)
|
# lambda w: w.processing_panel is not False)
|
||||||
if rework_normative_workorder_ids:
|
# if rework_normative_workorder_ids:
|
||||||
for rw in rework_normative_workorder_ids:
|
# for rw in rework_normative_workorder_ids:
|
||||||
if len(done_normative_workorder_ids.filtered(
|
# if len(done_normative_workorder_ids.filtered(
|
||||||
lambda w: w.processing_panel == rw.processing_panel)) == 3:
|
# lambda w: w.processing_panel == rw.processing_panel)) == 3:
|
||||||
pass
|
# pass
|
||||||
else:
|
else:
|
||||||
raise ValidationError('请选择返工工单!!!')
|
raise ValidationError('请选择返工工单!!!')
|
||||||
if rework_workorder_ids:
|
if rework_workorder_ids:
|
||||||
|
|||||||
Reference in New Issue
Block a user