diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index fc4ccbeb..34e00aee 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -5,7 +5,7 @@ import re import requests from itertools import groupby from odoo import api, fields, models, _ -from odoo.exceptions import UserError +from odoo.exceptions import UserError,ValidationError from odoo.addons.sf_base.commons.common import Common from odoo.tools import float_compare, float_round, float_is_zero, format_datetime @@ -483,10 +483,49 @@ class MrpProduction(models.Model): def _reset_work_order_sequence(self): for rec in self: - current_sequence = 1 + sequence_list = {} + model_type_id = rec.product_id.product_model_type_id + if model_type_id: + tmpl_num = 1 + # 成品工序 + 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_list.update({tmpl_id.route_workcenter_id.name: tmpl_num}) + tmpl_num += 1 + # 表面工艺工序 + # 模型类型的表面工艺工序模版 + surface_tmpl_ids = model_type_id.surface_technics_routing_tmpl_ids + # 产品选择的表面工艺 + model_process_parameters_ids = rec.product_id.model_process_parameters_ids + process_dict = {} + if model_process_parameters_ids: + for process_parameters_id in model_process_parameters_ids: + process_id = process_parameters_id.process_id + for surface_tmpl_id in surface_tmpl_ids: + if process_id == surface_tmpl_id.route_workcenter_id.surface_technics_id: + surface_tmpl_name = surface_tmpl_id.route_workcenter_id.name + process_dict.update({int(process_id.category_id.code): '%s-%s' % ( + surface_tmpl_name, process_parameters_id.name)}) + process_list = sorted(process_dict.keys()) + for process_num in process_list: + sequence_list.update({process_dict.get(process_num): tmpl_num}) + 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('该产品没有选择【模版类型】!') + for work in rec.workorder_ids: - work.sequence = current_sequence - current_sequence += 1 + if sequence_list.get(work.name): + work.sequence = sequence_list[work.name] + else: + raise ValidationError('工序【%s】在产品选择的模版类型中不存在!' % work.name) # if work.name == '获取CNC加工程序': # work.button_start() # #work.fetchCNC() diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 522c8c02..0f37c8f0 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -964,7 +964,7 @@ class CNCprocessing(models.Model): _order = 'sequence_number,id' cnc_id = fields.Many2one('ir.attachment') - sequence_number = fields.Char('序号') + sequence_number = fields.Integer('序号') program_name = fields.Char('程序名') functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型') cutting_tool_name = fields.Char('刀具名称') @@ -1026,6 +1026,8 @@ class CNCprocessing(models.Model): 'cutting_tool_extension_length': obj['cutting_tool_extension_length'], 'cutting_tool_handle_type': obj['cutting_tool_handle_type'], 'estimated_processing_time': obj['estimated_processing_time'], + 'program_path': obj['program_path'], + 'cnc_id': obj['cnc_id'].id, 'remark': obj['remark'] }) return cnc_processing_str @@ -1416,7 +1418,7 @@ class WorkPieceDelivery(models.Model): 'task_delivery_time': fields.Datetime.now(), 'status': '待配送' }) - if delivery_item == "上产线": + if delivery_item.type == "上产线": delivery_item.workorder_id.write({'is_delivery': True}) else: raise UserError(ret['message']) diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py index 98c2d59e..08d6d9b4 100644 --- a/sf_mrs_connect/controllers/controllers.py +++ b/sf_mrs_connect/controllers/controllers.py @@ -63,12 +63,16 @@ class Sf_Mrs_Connect(http.Controller): logging.info('cnc_processing111:%s' % cnc_processing) if cnc_processing: cnc_processing_arr.append(cnc_processing._json_cnc_processing(cnc_processing)) - if cnc_program and cnc_processing_arr: + if (cnc_program and cnc_processing_arr) or (not cnc_program and cnc_processing_arr): logging.info('cnc_processing_arr:%s' % cnc_processing_arr) - cnc_program.write({'programming_state': '已编程', 'work_state': '已编程'}) - cnc_program.workorder_ids.filtered(lambda b: b.routing_type == 'CNC加工').write( - {'cnc_ids': cnc_processing_arr, 'cnc_worksheet': cnc_production.workorder_ids.filtered( - lambda b: b.routing_type == 'CNC加工').cnc_worksheet}) + if cnc_program and cnc_processing_arr: + cnc_program.write({'programming_state': '已编程', 'work_state': '已编程'}) + cnc_program.workorder_ids.filtered(lambda b: b.routing_type == 'CNC加工').write( + {'cnc_ids': cnc_processing_arr, 'cnc_worksheet': cnc_production.workorder_ids.filtered( + lambda b: b.routing_type == 'CNC加工').cnc_worksheet}) + cnc_program |= cnc_production + if not cnc_program and cnc_processing_arr: + cnc_program = cnc_production cnc_program_ids = [item.id for item in cnc_program] workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search( [('production_id', 'in', cnc_program_ids)])