Merge branch 'feature/制造订单状态优化' into feature/工单状态优化_2
This commit is contained in:
@@ -1097,8 +1097,7 @@ class ResMrpWorkOrder(models.Model):
|
||||
# ================= 如果制造订单刀具状态为[无效刀、缺刀] 或者 制造订单状态为[返工]==========================
|
||||
if (workorder.production_id.tool_state in ['1', '2'] or workorder.production_id.state == 'rework'
|
||||
or workorder.production_id.schedule_state != '已排'
|
||||
or len(
|
||||
workorder.production_id.picking_ids.filtered(lambda w: w.state not in ['done', 'cancel'])) != 0
|
||||
or workorder.production_id.reservation_state not in ['assigned']
|
||||
or workorder.production_id.workorder_ids.filtered(
|
||||
lambda wk: wk.sequence == workorder.sequence - 1).test_results in ['报废', '返工']):
|
||||
if workorder.state != 'waiting':
|
||||
|
||||
@@ -4,6 +4,7 @@ import logging
|
||||
from odoo.exceptions import UserError, ValidationError
|
||||
from datetime import datetime
|
||||
from odoo import models, api, fields, _
|
||||
from odoo.tools import groupby
|
||||
|
||||
|
||||
class ReworkWizard(models.TransientModel):
|
||||
@@ -37,6 +38,30 @@ class ReworkWizard(models.TransientModel):
|
||||
|
||||
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):
|
||||
if self.routing_type in ['装夹预调', 'CNC加工']:
|
||||
self.is_clamp_measure = False
|
||||
@@ -58,16 +83,16 @@ class ReworkWizard(models.TransientModel):
|
||||
# 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
|
||||
# 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:
|
||||
raise ValidationError('请选择返工工单!!!')
|
||||
if rework_workorder_ids:
|
||||
|
||||
Reference in New Issue
Block a user