Merge branch 'feature/返工优化' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/优化外协采购和出入库单(工艺退回调整)

This commit is contained in:
jinling.yang
2024-11-21 10:44:51 +08:00
4 changed files with 246 additions and 258 deletions

View File

@@ -869,7 +869,8 @@ class MrpProduction(models.Model):
work_id.sequence = order_id.sequence + 1 work_id.sequence = order_id.sequence + 1
break break
# 对该工单之后的工单工序进行加一 # 对该工单之后的工单工序进行加一
work_order_ids = rec.workorder_ids.filtered(lambda item: item.sequence >= work_id.sequence) work_order_ids = rec.workorder_ids.filtered(
lambda item: item.sequence >= work_id.sequence and item.id != work_id.id)
for work in work_order_ids: for work in work_order_ids:
work.sequence = work.sequence + 1 work.sequence = work.sequence + 1
@@ -1139,6 +1140,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.filtered(lambda wk: wk.state == 'done').ids,
'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'],
'default_is_reprogramming': True if cloud_programming['programming_state'] in ['已下发'] else False 'default_is_reprogramming': True if cloud_programming['programming_state'] in ['已下发'] else False

View File

@@ -1005,7 +1005,7 @@ class ResMrpWorkOrder(models.Model):
return workorders_values_str return workorders_values_str
@api.depends('production_availability', 'blocked_by_workorder_ids', 'blocked_by_workorder_ids.state', @api.depends('production_availability', 'blocked_by_workorder_ids', 'blocked_by_workorder_ids.state',
'production_id.tool_state', 'production_id.schedule_state') 'production_id.tool_state', 'production_id.schedule_state', 'sequence')
def _compute_state(self): def _compute_state(self):
# super()._compute_state() # super()._compute_state()
for workorder in self: for workorder in self:
@@ -1046,147 +1046,107 @@ class ResMrpWorkOrder(models.Model):
workorder.state = 'ready' workorder.state = 'ready'
elif workorder.production_id.reservation_state != 'assigned' and workorder.state == 'ready': elif workorder.production_id.reservation_state != 'assigned' and workorder.state == 'ready':
workorder.state = 'waiting' workorder.state = 'waiting'
re_work = self.env['mrp.workorder'].search([('production_id', '=', workorder.production_id.id),
('processing_panel', '=', workorder.processing_panel), for workorder in self:
('is_rework', '=', True), ('state', 'in', ['done', 'rework'])]) # 如果工单的工序没有进行排序则跳出循环
cnc_workorder = self.env['mrp.workorder'].search( if workorder.production_id.workorder_ids.filtered(lambda wk: wk.sequence == 0):
[('production_id', '=', workorder.production_id.id), break
('processing_panel', '=', workorder.processing_panel), # ===== 对所有按序号排序的非[进行中、完成、返工、取消]状态的工单,除了第一条之外的工单状态都设置为[等待其他工单] =====
('routing_type', '=', 'CNC加工'), ('state', 'in', ['done', 'rework']), min_sequence_wk = min(workorder.production_id.workorder_ids.filtered(
('test_results', '=', '返工')]) lambda wk: wk.state not in ['done', 'rework', 'cancel']),
cnc_workorder_pending = self.env['mrp.workorder'].search( key=lambda wk: wk.sequence)
[('production_id', '=', workorder.production_id.id), if workorder.state in ['done', 'rework', 'cancel', 'progress']:
('processing_panel', '=', workorder.processing_panel), continue
('routing_type', '=', 'CNC加工'), ('state', 'in', ['pending'])]) else:
unclamp_workorder = self.env['mrp.workorder'].search( if workorder != min_sequence_wk:
[('production_id', '=', workorder.production_id.id), if workorder.state != 'pending':
('sequence', '=', workorder.sequence - 1), workorder.state = 'pending'
('state', 'in', ['done'])]) continue
if workorder.state not in ['cancel', 'progress', 'rework']: # ================= 如果制造订单刀具状态为[无效刀、缺刀] 或者 制造订单状态为[返工]==========================
if workorder.production_id.state == 'rework': if workorder.production_id.tool_state in ['1', '2'] or workorder.production_id.state == 'rework':
if workorder.routing_type == '装夹预调' and workorder.state not in ['done', 'rework', workorder.state = 'waiting'
'cancel']: continue
# # 有返工工单 if workorder.production_id.programming_state == '已编程':
# if re_work:
# 新工单
if workorder.is_rework is False:
if workorder.production_id.programming_state == '已编程' and workorder.production_id.is_rework is False:
if re_work or cnc_workorder:
workorder.state = 'ready' workorder.state = 'ready'
else: else:
if workorder.production_id.is_rework is True:
if re_work or cnc_workorder:
workorder.state = 'waiting'
elif workorder.routing_type == 'CNC加工' and workorder.state not in ['done', 'rework', 'cancel']:
pre_workorder = self.env['mrp.workorder'].search(
[('production_id', '=', workorder.production_id.id),
('processing_panel', '=', workorder.processing_panel),
('routing_type', '=', '装夹预调'), ('state', '=', 'done')])
if pre_workorder:
if re_work:
workorder.state = 'waiting'
elif workorder.routing_type == '解除装夹' and workorder.state not in ['done', 'rework', 'cancel']:
if cnc_workorder:
if not cnc_workorder_pending or unclamp_workorder.test_results == '报废':
workorder.state = 'waiting' workorder.state = 'waiting'
# re_work = self.env['mrp.workorder'].search([('production_id', '=', workorder.production_id.id),
# ('processing_panel', '=', workorder.processing_panel),
# ('is_rework', '=', True), ('state', 'in', ['done', 'rework'])])
# cnc_workorder = self.env['mrp.workorder'].search(
# [('production_id', '=', workorder.production_id.id),
# ('processing_panel', '=', workorder.processing_panel),
# ('routing_type', '=', 'CNC加工'), ('state', 'in', ['done', 'rework']),
# ('test_results', '=', '返工')])
# cnc_workorder_pending = self.env['mrp.workorder'].search(
# [('production_id', '=', workorder.production_id.id),
# ('processing_panel', '=', workorder.processing_panel),
# ('routing_type', '=', 'CNC加工'), ('state', 'in', ['pending'])])
# unclamp_workorder = self.env['mrp.workorder'].search(
# [('production_id', '=', workorder.production_id.id),
# ('sequence', '=', workorder.sequence - 1),
# ('state', 'in', ['done'])])
# if workorder.state not in ['cancel', 'progress', 'rework']:
# if workorder.production_id.state == 'rework':
# if workorder.routing_type == '装夹预调':
# # # 有返工工单
# # if re_work:
# # 新工单
# if workorder.is_rework is False:
# if (workorder.production_id.programming_state == '已编程'
# and workorder.production_id.is_rework is False):
# if re_work or cnc_workorder:
# workorder.state = 'ready'
# else: # else:
# if workorder.production_id.is_rework is True: # if workorder.production_id.is_rework is True:
# if re_work or cnc_workorder:
# workorder.state = 'waiting' # workorder.state = 'waiting'
elif workorder.production_id.state == 'progress': #
if workorder.routing_type == '装夹预调' and workorder.production_id.programming_state == '已编程' and \ # elif workorder.routing_type == 'CNC加工':
workorder.is_rework is False and workorder.state not in [ # pre_workorder = self.env['mrp.workorder'].search(
'done', 'rework', # [('production_id', '=', workorder.production_id.id),
'cancel']: # ('processing_panel', '=', workorder.processing_panel),
if workorder.production_id.is_rework is False: # ('routing_type', '=', '装夹预调'), ('state', '=', 'done')])
if re_work or cnc_workorder or unclamp_workorder: # if pre_workorder:
workorder.state = 'ready' # if re_work:
# if (re_work or cnc_workorder) and workorder.production_id.is_rework is False: # workorder.state = 'waiting'
# elif workorder.routing_type == '解除装夹':
# if cnc_workorder:
# if not cnc_workorder_pending or unclamp_workorder.test_results == '报废':
# workorder.state = 'waiting'
# # else:
# # if workorder.production_id.is_rework is True:
# # workorder.state = 'waiting'
# elif workorder.production_id.state == 'progress':
# if (workorder.routing_type == '装夹预调' and workorder.production_id.programming_state == '已编程'
# and workorder.is_rework is False and workorder.state not in ['done', 'rework', 'cancel']):
# if workorder.production_id.is_rework is False:
# if re_work or cnc_workorder or unclamp_workorder:
# workorder.state = 'ready' # workorder.state = 'ready'
if workorder.routing_type == '表面工艺' and workorder.state not in ['done', 'progress']: # # if (re_work or cnc_workorder) and workorder.production_id.is_rework is False:
if unclamp_workorder: # # workorder.state = 'ready'
if workorder.is_subcontract is False: # if workorder.routing_type == '表面工艺' and workorder.state not in ['done', 'progress']:
workorder.state = 'ready' # if unclamp_workorder:
else: # if workorder.is_subcontract is False:
production_programming = self.env['mrp.production'].search(
[('origin', '=', self.production_id.origin)], order='name asc')
production_no_remanufacture = production_programming.filtered(
lambda a: a.is_remanufacture is False)
production_list = [production.name for production in production_programming]
purchase_orders = self.env['purchase.order'].search(
[('origin', 'ilike', ','.join(production_list))])
for line in purchase_orders.order_line:
if line.product_id.server_product_process_parameters_id == workorder.surface_technics_parameters_id and line.product_qty == len(
production_no_remanufacture):
if purchase_orders.state == 'purchase':
workorder.state = 'ready'
else:
workorder.state = 'waiting'
elif workorder.production_id.state == 'scrap':
if workorder.routing_type == '解除装夹' and unclamp_workorder.test_results == '报废':
workorder.state = 'waiting'
# if workorder.routing_type == '装夹预调' and workorder.state in ['waiting', 'ready', 'pending']:
# workorder_ids = workorder.production_id.workorder_ids
# work_bo = True
# for wo in workorder_ids.filtered(lambda a: a.routing_type == '装夹预调' and a.state == 'rework'):
# if not workorder_ids.filtered(
# lambda a: (a.routing_type == '装夹预调' and a.state not in ['rework', 'cancel']
# and a.processing_panel == wo.processing_panel)):
# work_bo = False
# break
# if (workorder.production_id.programming_state == '已编程' and work_bo
# and not workorder_ids.filtered(lambda a: a.sequence == 0)):
# # 当工单对应制造订单的功能刀具状态为 【无效刀】时,先对的第一个装夹预调工单状态设置为 【等待组件】
# if workorder.production_id.tool_state in ['1', '2']:
# if workorder.state in ['ready']:
# workorder.state = 'waiting'
# continue
# elif workorder.state in ['waiting']:
# continue
# elif workorder.state == 'pending' and workorder == self.search(
# [('production_id', '=', workorder.production_id.id),
# ('routing_type', '=', '装夹预调'),
# ('state', 'not in', ['rework', 'done', 'cancel'])],
# limit=1,
# order="sequence"):
# workorder.state = 'waiting'
# continue
# elif workorder.production_id.tool_state in ['0']:
# if workorder_ids.filtered(lambda a: a.state == 'rework'):
# if not workorder_ids.filtered(
# lambda a: (a.routing_type not in ['装夹预调'] and
# a.state not in ['pending', 'done', 'rework', 'cancel'])):
# # 查询工序最小的非完工、非返工的装夹预调工单
# work_id = self.search(
# [('production_id', '=', workorder.production_id.id),
# ('state', 'not in', ['rework', 'done', 'cancel'])],
# limit=1,
# order="sequence")
# if work_id.routing_type == '装夹预调':
# if workorder == work_id:
# if workorder.production_id.reservation_state == 'assigned':
# workorder.state = 'ready' # workorder.state = 'ready'
# elif workorder.production_id.reservation_state != 'assigned': # else:
# production_programming = self.env['mrp.production'].search(
# [('origin', '=', self.production_id.origin)], order='name asc')
# production_no_remanufacture = production_programming.filtered(
# lambda a: a.is_remanufacture is False)
# production_list = [production.name for production in production_programming]
# purchase_orders = self.env['purchase.order'].search(
# [('origin', 'ilike', ','.join(production_list))])
# for line in purchase_orders.order_line:
# if line.product_id.server_product_process_parameters_id == workorder.surface_technics_parameters_id and line.product_qty == len(
# production_no_remanufacture):
# if purchase_orders.state == 'purchase':
# workorder.state = 'ready'
# else:
# workorder.state = 'waiting' # workorder.state = 'waiting'
# continue # elif workorder.production_id.state == 'scrap':
# elif (workorder.name == '装夹预调' and # if workorder.routing_type == '解除装夹' and unclamp_workorder.test_results == '报废':
# workorder.state not in ['rework', 'done', 'cancel']):
# if workorder.state != 'pending':
# workorder.state = 'pending'
# if workorder.production_id.tool_state in ['1', '2'] and workorder.state == 'ready':
# workorder.state = 'waiting' # workorder.state = 'waiting'
# continue
# if (workorder.production_id.tool_state in ['1', '2']
# and not workorder.production_id.workorder_ids.filtered(lambda a: a.sequence == 0)
# and workorder.production_id.programming_state == '编程中' and workorder.name == '装夹预调'):
# if workorder.state == 'pending' and workorder == self.search(
# [('production_id', '=', workorder.production_id.id),
# ('routing_type', '=', '装夹预调'),
# ('state', 'not in', ['rework', 'done', 'cancel'])],
# limit=1,
# order="sequence"):
# workorder.state = 'waiting'
# continue
# 重写工单开始按钮方法 # 重写工单开始按钮方法
def button_start(self): def button_start(self):

View File

@@ -13,6 +13,8 @@ class ReworkWizard(models.TransientModel):
workorder_id = fields.Many2one('mrp.workorder', string='工单') workorder_id = fields.Many2one('mrp.workorder', string='工单')
product_id = fields.Many2one('product.product') product_id = fields.Many2one('product.product')
production_id = fields.Many2one('mrp.production', string='制造订单号') production_id = fields.Many2one('mrp.production', string='制造订单号')
workorder_ids = fields.Many2many('mrp.workorder', 'rework_wizard_to_work_order', string='所有工单',
domain="[('production_id', '=', production_id),('state','=','done')]")
rework_reason = fields.Selection( rework_reason = fields.Selection(
[("programming", "编程"), ("cutter", "刀具"), ("clamping", "装夹"), [("programming", "编程"), ("cutter", "刀具"), ("clamping", "装夹"),
("operate computer", "操机"), ("operate computer", "操机"),
@@ -48,55 +50,66 @@ class ReworkWizard(models.TransientModel):
'test_report': self.workorder_id.detection_report})]}) 'test_report': self.workorder_id.detection_report})]})
self.workorder_id.button_finish() self.workorder_id.button_finish()
else: else:
if self.production_id.workorder_ids: if self.workorder_ids:
handle_result = self.production_id.detection_result_ids.filtered( # handle_result = self.production_id.detection_result_ids.filtered(
lambda dr: dr.handle_result == '待处理') # lambda dr: dr.handle_result == '待处理')
if handle_result: # if handle_result:
processing_panels_to_handle = set(handle_item.processing_panel for handle_item in handle_result) # processing_panels_to_handle = set(handle_item.processing_panel for handle_item in handle_result)
processing_panels_choice = set(dr_panel.name for dr_panel in self.processing_panel_id) # processing_panels_choice = set(dr_panel.name for dr_panel in self.processing_panel_id)
# 使用集合的差集操作找出那些待处理结果中有但实际可用加工面中没有的加工面 # # 使用集合的差集操作找出那些待处理结果中有但实际可用加工面中没有的加工面
processing_panels_missing = processing_panels_to_handle - processing_panels_choice # processing_panels_missing = processing_panels_to_handle - processing_panels_choice
# 存在不一致的加工面 # # 存在不一致的加工面
if processing_panels_missing: # if processing_panels_missing:
processing_panels_str = ','.join(processing_panels_missing) # processing_panels_str = ','.join(processing_panels_missing)
raise UserError('您还有待处理的检测结果中为%s的加工面未选择' % processing_panels_str) # raise UserError('您还有待处理的检测结果中为%s的加工面未选择' % processing_panels_str)
for panel in self.processing_panel_id:
panel_workorder = self.production_id.workorder_ids.filtered( rework_workorder_ids = self.production_id.workorder_ids.filtered(
lambda ap: ap.processing_panel == panel.name and ap.state != 'rework') lambda ap: ap.id in self.workorder_ids.ids)
if panel_workorder: clamp_workorder_ids = None
panel_workorder.write({'state': 'rework'}) if rework_workorder_ids:
rework_clamp_workorder = max(panel_workorder.filtered( # 限制
lambda # 1、单独返工CNC工单则不解绑托盘RFID如单独返工装夹预调工单则自动解绑托盘RFID
rp: rp.processing_panel == panel.name and rp.routing_type == '装夹预调' and rp.state in [ # 2、返工CNC工单和装夹预调工单则自动解绑RFID
'done', 'rework'])) clamp_workorder_ids = rework_workorder_ids.filtered(lambda rp: rp.routing_type == '装夹预调')
# panel_workorder.filtered( if clamp_workorder_ids:
# lambda wo: wo.routing_type == '装夹预调').workpiece_delivery_ids.filtered( for clamp_workorder_id in clamp_workorder_ids:
# lambda wd: wd.status == '待下发').write({'status': '已取消'}) self.production_id.workorder_ids.filtered(
# workpiece = self.env['sf.workpiece.delivery'].search([('status', '=', '待下发'), ( lambda wk: wk.processing_panel == clamp_workorder_id.processing_panel).write(
# 'workorder_id', '=', {'rfid_code': False})
# panel_workorder.filtered(lambda wd: wd.routing_type == '装夹预调').id)]) # 返工工单状态设置为【返工】
product_routing_workcenter = self.env['sf.product.model.type.routing.sort'].search( rework_workorder_ids.write({'state': 'rework'})
[('product_model_type_id', '=', self.production_id.product_id.product_model_type_id.id)], # 查询返工工单对应的工艺设计记录,并调用方法拼接数据,用于创建新的工单
order='sequence asc'
)
workorders_values = [] workorders_values = []
for route in product_routing_workcenter: for work in rework_workorder_ids:
if route.is_repeat is True: route = self.production_id.technology_design_ids.filtered(
lambda item: (item.route_id.name in work.name and item.process_parameters_id
and item.process_parameters_id == work.surface_technics_parameters_id) or
(item.route_id.name == work.name and item.panel
and item.panel == work.processing_panel))
if route:
workorders_values.append( workorders_values.append(
self.env['mrp.workorder'].json_workorder_str(panel.name, self.env['mrp.workorder'].json_workorder_str(self.production_id, route[0]))
self.production_id, route, False)) # 创建新工单,并进行返工配置的相关操作
if workorders_values: if workorders_values:
# 创建新工单、工序排序、完成检测结果单据
self.production_id.write({'workorder_ids': workorders_values, 'is_rework': True}) self.production_id.write({'workorder_ids': workorders_values, 'is_rework': True})
new_work_ids = self.production_id.workorder_ids.filtered(lambda kw: kw.sequence == 0)
new_pre_workorder_ids = self.production_id.workorder_ids.filtered(
lambda kw: kw.routing_type == '装夹预调' and kw.sequence == 0)
self.production_id._reset_work_order_sequence() self.production_id._reset_work_order_sequence()
self.production_id.detection_result_ids.filtered( self.production_id.detection_result_ids.filtered(
lambda ap1: ap1.processing_panel == panel.name and ap1.handle_result == '处理').write( lambda ap1: ap1.handle_result == '待处理').write({'handle_result': '处理'})
{'handle_result': '已处理'}) panels = [] # 返工的加工面
new_pre_workorder = self.production_id.workorder_ids.filtered(lambda # ===================保留装夹测量数据=====================
p: p.routing_type == '装夹预调' and p.processing_panel == panel.name and p.state not in ( if self.is_clamp_measure and clamp_workorder_ids and new_pre_workorder_ids:
'rework', 'done')) for new_pre_workorder in new_pre_workorder_ids:
if new_pre_workorder and rework_clamp_workorder and self.is_clamp_measure is True: if new_pre_workorder.processing_panel and new_pre_workorder.processing_panel not in panels:
panels.append(new_pre_workorder.processing_panel)
for rework_clamp_workorder in clamp_workorder_ids:
if new_pre_workorder.sequence == rework_clamp_workorder.sequence + 1:
new_pre_workorder.write( new_pre_workorder.write(
{'X1_axis': rework_clamp_workorder.X1_axis, 'Y1_axis': rework_clamp_workorder.Y1_axis {'X1_axis': rework_clamp_workorder.X1_axis,
'Y1_axis': rework_clamp_workorder.Y1_axis
, 'Z1_axis': rework_clamp_workorder.Z1_axis, , 'Z1_axis': rework_clamp_workorder.Z1_axis,
'X2_axis': rework_clamp_workorder.X2_axis 'X2_axis': rework_clamp_workorder.X2_axis
, 'Y2_axis': rework_clamp_workorder.Y2_axis, , 'Y2_axis': rework_clamp_workorder.Y2_axis,
@@ -128,20 +141,25 @@ class ReworkWizard(models.TransientModel):
, 'X_deviation_angle': rework_clamp_workorder.X_deviation_angle, , 'X_deviation_angle': rework_clamp_workorder.X_deviation_angle,
'material_center_point': rework_clamp_workorder.material_center_point 'material_center_point': rework_clamp_workorder.material_center_point
}) })
break
# =====================不申请重新编程====================
if self.is_reprogramming is False: if self.is_reprogramming is False:
if self.programming_state in ['已编程', '已下发']: if self.programming_state in ['已编程', '已下发']:
if self.reprogramming_num >= 1 and self.programming_state == '已编程': if self.reprogramming_num >= 1 and self.programming_state == '已编程':
self.production_id.get_new_program(panel.name) for panel_name in panels:
self.production_id.get_new_program(panel_name)
if self.reprogramming_num >= 0 and self.programming_state == '已下发': if self.reprogramming_num >= 0 and self.programming_state == '已下发':
# ============= 处理CNC加工加工工单的 CNC程序和cmm程序 信息=============
for cnc_work in new_work_ids.filtered(lambda wk: wk.name == 'CNC加工'):
ret = {'programming_list': []} ret = {'programming_list': []}
cnc_rework = max( old_cnc_rework = max(self.production_id.workorder_ids.filtered(
self.production_id.workorder_ids.filtered( lambda crw: crw.processing_panel == cnc_work.processing_panel
lambda and crw.state == 'rework' and crw.routing_type == 'CNC加工'),
crw: crw.processing_panel == panel.name and crw.state == 'rework' and crw.routing_type == 'CNC加工'),
key=lambda w: w.create_date key=lambda w: w.create_date
) )
if cnc_rework.cnc_ids: # 获取当前工单的CNC程序和cmm程序
for item_line in cnc_rework.cnc_ids: if old_cnc_rework.cnc_ids:
for item_line in old_cnc_rework.cnc_ids:
vals = { vals = {
'sequence_number': item_line.sequence_number, 'sequence_number': item_line.sequence_number,
'program_name': item_line.program_name, 'program_name': item_line.program_name,
@@ -156,46 +174,50 @@ class ReworkWizard(models.TransientModel):
'cutting_tool_handle_type': item_line.cutting_tool_handle_type, 'cutting_tool_handle_type': item_line.cutting_tool_handle_type,
'program_path': item_line.program_path, 'program_path': item_line.program_path,
'ftp_path': item_line.program_path, 'ftp_path': item_line.program_path,
'processing_panel': panel.name, 'processing_panel': cnc_work.processing_panel,
'program_create_date': datetime.strftime(item_line.program_create_date, 'program_create_date': datetime.strftime(item_line.program_create_date,
'%Y-%m-%d %H:%M:%S'), '%Y-%m-%d %H:%M:%S'),
'remark': item_line.remark 'remark': item_line.remark
} }
ret['programming_list'].append(vals) ret['programming_list'].append(vals)
for cmm_line in cnc_rework.cmm_ids: for cmm_line in old_cnc_rework.cmm_ids:
vals = { vals = {
'sequence_number': cmm_line.sequence_number, 'sequence_number': cmm_line.sequence_number,
'program_name': cmm_line.program_name, 'program_name': cmm_line.program_name,
'program_path': cmm_line.program_path, 'program_path': cmm_line.program_path,
'ftp_path': cmm_line.program_path, 'ftp_path': cmm_line.program_path,
'processing_panel': panel.name, 'processing_panel': cnc_work.processing_panel,
'program_create_date': datetime.strftime( 'program_create_date': datetime.strftime(
cmm_line.program_create_date, cmm_line.program_create_date,
'%Y-%m-%d %H:%M:%S') '%Y-%m-%d %H:%M:%S')
} }
ret['programming_list'].append(vals) ret['programming_list'].append(vals)
# 获取新的
new_cnc_workorder = self.production_id.workorder_ids.filtered( new_cnc_workorder = self.production_id.workorder_ids.filtered(
lambda ap1: ap1.processing_panel == panel.name and ap1.state not in ( lambda ap1: ap1.processing_panel == cnc_work.processing_panel
'rework', 'done') and ap1.routing_type == 'CNC加工') and ap1.state not in (
'rework', 'done') and ap1.routing_type == 'CNC加工'
)
if not new_cnc_workorder.cnc_ids: if not new_cnc_workorder.cnc_ids:
new_cnc_workorder.write({ new_cnc_workorder.write({
'cnc_ids': new_cnc_workorder.cnc_ids.sudo()._json_cnc_processing(panel.name, 'cnc_ids': new_cnc_workorder.cnc_ids.sudo()._json_cnc_processing(
ret), cnc_work.processing_panel, ret),
'cmm_ids': new_cnc_workorder.cmm_ids.sudo()._json_cmm_program(panel.name, 'cmm_ids': new_cnc_workorder.cmm_ids.sudo()._json_cmm_program(
ret), cnc_work.processing_panel, ret),
'cnc_worksheet': cnc_rework.cnc_worksheet}) 'cnc_worksheet': old_cnc_rework.cnc_worksheet})
# ========== 处理装夹预调 【装夹图纸】 数据 ================
if new_pre_workorder: for new_pre_work in new_pre_workorder_ids:
pre_rework = max(self.production_id.workorder_ids.filtered( pre_rework = max(self.production_id.workorder_ids.filtered(
lambda pr: pr.processing_panel == panel.name and pr.state in ( lambda pr: (pr.processing_panel == new_pre_work.processing_panel
'rework') and pr.routing_type == '装夹预调'), and pr.state in ['rework'] and pr.routing_type == '装夹预调')),
key=lambda w1: w1.create_date) key=lambda w1: w1.create_date)
new_pre_workorder.write( new_pre_work.write(
{'processing_drawing': pre_rework.processing_drawing}) {'processing_drawing': pre_rework.processing_drawing})
self.production_id.write({'state': 'progress', 'is_rework': False}) self.production_id.write({'state': 'progress', 'is_rework': False})
elif self.programming_state in ['待编程', '编程中']: elif self.programming_state in ['待编程', '编程中']:
self.production_id.write( self.production_id.write(
{'programming_state': '编程中', 'work_state': '编程中', 'is_rework': True}) {'programming_state': '编程中', 'work_state': '编程中', 'is_rework': True})
# ==================申请重新编程=======================
if self.is_reprogramming is True: if self.is_reprogramming is True:
self.production_id.update_programming_state() self.production_id.update_programming_state()
self.production_id.write( self.production_id.write(

View File

@@ -11,10 +11,14 @@
<field name="product_id" invisible="True"/> <field name="product_id" invisible="True"/>
<field name="tool_state" invisible="True"/> <field name="tool_state" invisible="True"/>
<field name="routing_type" invisible="True"/> <field name="routing_type" invisible="True"/>
<field name="processing_panel_id" invisible="1"/>
<group> <group>
<field name="processing_panel_id" options="{'no_create': True}" <field name="workorder_ids" string="工序" attrs='{"invisible": [("routing_type","=","装夹预调")]}'>
attrs='{"invisible": [("routing_type","=","装夹预调")]}' widget="many2many_tags"/> <tree create="0" editable='bottom' delete="0">
<field name="processing_panel" readonly="1"/>
<field name="name" readonly="1"/>
</tree>
</field>
</group> </group>
<div attrs='{"invisible": [("routing_type","=","装夹预调")]}'> <div attrs='{"invisible": [("routing_type","=","装夹预调")]}'>
<span style='font-weight:bold;'>保留装夹测量数据 <span style='font-weight:bold;'>保留装夹测量数据