diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 7f8b9323..0e25de4f 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -68,6 +68,59 @@ class FunctionalCuttingToolEntity(models.Model): return [(6, 0, functional_tool_model_ids)] +class FunctionalCuttingToolEntityCache(models.Model): + _name = 'sf.functional.cutting.tool.entity.cache' + _description = '功能刀具列表缓存' + + code = fields.Char('编码') + name = fields.Char('名称') + mrs_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型') + mrs_cutting_tool_model_id = fields.Many2one('sf.cutting.tool.model', string='刀具型号') + + # 整体式刀具型号 + mrs_cutting_tool_integral_model_ids = fields.Many2many('sf.cutting.tool.model', + 'sf_functional_cutting_tool_entity_cache_id', + string='整体式刀具型号', domain= + [('mrs_cutting_tool_material_name', '=', '整体式刀具')]) + # 刀片型号 + mrs_cutting_tool_blade_model_ids = fields.Many2many('sf.cutting.tool.model', 'sf_functional_cutting_tool_entity_cache_id', + string='刀片型号', domain= + [('mrs_cutting_tool_material_name', '=', '刀片')]) + # 刀杆型号 + mrs_cutting_tool_cutterbar_model_ids = fields.Many2many('sf.cutting.tool.model', + 'sf_functional_cutting_tool_entity_cache_id', + string='刀杆型号', domain= + [('mrs_cutting_tool_material_name', '=', '刀杆')]) + # 刀盘型号 + mrs_cutting_tool_cutterpad_model_ids = fields.Many2many('sf.cutting.tool.model', + 'sf_functional_cutting_tool_entity_cache_id', + string='刀盘型号', domain= + [('mrs_cutting_tool_material_name', '=', '刀盘')]) + # 刀柄型号 + mrs_cutting_tool_cutterhandle_model_ids = fields.Many2many('sf.cutting.tool.model', + 'sf_functional_cutting_tool_entity_cache_id', + string='刀柄型号', domain= + [('mrs_cutting_tool_material_name', '=', '刀柄')]) + # 夹头型号 + mrs_cutting_tool_cutterhead_model_ids = fields.Many2many('sf.cutting.tool.model', + 'sf_functional_cutting_tool_entity_cache_id', + string='夹头型号', domain= + [('mrs_cutting_tool_material_name', '=', '夹头')]) + + diameter = fields.Float('直径(mm)') + tool_grade = fields.Selection([('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'P4'), ('5', 'P5'), ('6', 'P6')], + string='刀具等级') + machining_accuracy = fields.Float('加工精度(mm)') + tool_length = fields.Float('装刀长') + blade_number = fields.Integer('刃数') + integral_blade_length = fields.Float('整体刃长(mm)') + effective_blade_length = fields.Float('有效刃长(mm)') + max_life = fields.Float('最大寿命值') + is_standard = fields.Boolean('是否标准刀') + applicable_range = fields.Char('适用范围') + image = fields.Binary('图片') + + class FunctionalToolWarning(models.Model): _name = 'sf.functional.tool.warning' _description = '功能刀具预警' @@ -591,6 +644,50 @@ class FunctionalToolAssembly(models.Model): 取消功能刀具组装 :return: """ + if self.new_former == '0': + # 如果是新刀,则删除功能刀具列表、 + self.env['sf.functional.cutting.tool.entity'].search([ + ('code', '=', self.functional_tool_code)]).unlink() + else: + # 获取功能刀具缓存信息 + record = self.env['sf.functional.cutting.tool.entity.cache'].search([ + ('code', '=', self.functional_tool_code)]) + # 修改功能刀具列表信息 + self.env['sf.functional.cutting.tool.entity'].search([ + ('code', '=', self.functional_tool_code)]).write({ + 'code': record.code, + 'name': record.name, + 'mrs_cutting_tool_type_id': record.mrs_cutting_tool_type_id.id, + 'mrs_cutting_tool_model_id': record.mrs_cutting_tool_model_id.id, + 'mrs_cutting_tool_integral_model_ids': record.mrs_cutting_tool_integral_model_ids.ids, + 'mrs_cutting_tool_blade_model_ids': record.mrs_cutting_tool_blade_model_ids.ids, + 'mrs_cutting_tool_cutterbar_model_ids': record.mrs_cutting_tool_cutterbar_model_ids.ids, + 'mrs_cutting_tool_cutterpad_model_ids': record.mrs_cutting_tool_cutterpad_model_ids.ids, + 'mrs_cutting_tool_cutterhandle_model_ids': record.mrs_cutting_tool_cutterhandle_model_ids.ids, + 'mrs_cutting_tool_cutterhead_model_ids': record.mrs_cutting_tool_cutterhead_model_ids.ids, + 'diameter': record.diameter, + 'tool_grade': record.tool_grade, + 'machining_accuracy': record.machining_accuracy, + 'tool_length': record.tool_length, + 'blade_number': record.blade_number, + 'integral_blade_length': record.integral_blade_length, + 'effective_blade_length': record.effective_blade_length, + 'max_life': record.max_life, + 'is_standard': record.is_standard, + 'applicable_range': record.applicable_range, + 'image': record.image, + }) + # 删除缓存信息 + record.unlink() + + # # 删除功能刀具预警、实时分布、出入库记录的新记录 + # self.env['sf.functional.tool.warning'].search([ + # ('code', '=', self.functional_tool_code)]).unlink() + # self.env['sf.real.time.distribution.of.functional.tools'].search([ + # ('code', '=', self.functional_tool_code)]).unlink() + # self.env['sf.inbound.and.outbound.records.of.functional.tools'].search([ + # ('code', '=', self.functional_tool_code)]).unlink() + self.env['sf.functional.tool.assembly'].search([ ('machine_tool_name_id', '=', self.machine_tool_name_id.id), ('cutter_spacing_code', '=', self.cutter_spacing_code) @@ -643,24 +740,22 @@ class FunctionalToolAssembly(models.Model): if vals: for val in vals: self.env['sf.delivery.of.cargo.from.storage'].create({ - 'functional_tool_code': val.functional_tool_code, - 'name': val.name.id, - 'functional_tool_type_id': val.functional_tool_type_id.id, - 'production_line_name_id': val.production_line_name_id.id, - 'machine_tool_code': val.machine_tool_code, - 'receive_person': val.receive_person, - 'receive_time': val.receive_time - }) + 'functional_tool_code': val.functional_tool_code, + 'name': val.name.id, + 'functional_tool_type_id': val.functional_tool_type_id.id, + 'production_line_name_id': val.production_line_name_id.id, + 'machine_tool_code': val.machine_tool_code, + 'receive_person': val.receive_person, + 'receive_time': val.receive_time}) else: self.env['sf.delivery.of.cargo.from.storage'].create({ - 'functional_tool_code': self.functional_tool_code, - 'name': self.name.id, - 'functional_tool_type_id': self.functional_tool_type_id.id, - 'production_line_name_id': self.production_line_name_id.id, - 'machine_tool_code': self.machine_tool_code, - 'receive_person': self.receive_person, - 'receive_time': self.receive_time - }) + 'functional_tool_code': self.functional_tool_code, + 'name': self.name.id, + 'functional_tool_type_id': self.functional_tool_type_id.id, + 'production_line_name_id': self.production_line_name_id.id, + 'machine_tool_code': self.machine_tool_code, + 'receive_person': self.receive_person, + 'receive_time': self.receive_time}) return { 'type': 'ir.actions.act_window', diff --git a/sf_tool_management/security/ir.model.access.csv b/sf_tool_management/security/ir.model.access.csv index 1cb5d1a0..d95ad4c5 100644 --- a/sf_tool_management/security/ir.model.access.csv +++ b/sf_tool_management/security/ir.model.access.csv @@ -1,8 +1,9 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_sf_functional_cutting_tool_entity,sf.functional.cutting.tool.entity,model_sf_functional_cutting_tool_entity,base.group_user,1,1,1,1 -access_sf.functional.tool.warning,sf.functional.tool.warning,model_sf_functional_tool_warning,base.group_user,1,0,1,0 -access_sf.real.time.distribution.of.functional.tools,sf.real.time.distribution.of.functional.tools,model_sf_real_time_distribution_of_functional_tools,base.group_user,1,0,1,0 -access_sf.inbound.and.outbound.records.of.functional.tools,sf.inbound.and.outbound.records.of.functional.tools,model_sf_inbound_and_outbound_records_of_functional_tools,base.group_user,1,0,1,0 +access_sf_functional_cutting_tool_entity_cache,sf.functional.cutting.tool.entity.cache,model_sf_functional_cutting_tool_entity_cache,base.group_user,1,1,1,1 +access_sf.functional.tool.warning,sf.functional.tool.warning,model_sf_functional_tool_warning,base.group_user,1,1,1,1 +access_sf.real.time.distribution.of.functional.tools,sf.real.time.distribution.of.functional.tools,model_sf_real_time_distribution_of_functional_tools,base.group_user,1,1,1,1 +access_sf.inbound.and.outbound.records.of.functional.tools,sf.inbound.and.outbound.records.of.functional.tools,model_sf_inbound_and_outbound_records_of_functional_tools,base.group_user,1,1,1,1 access_sf_cam_work_order_program_knife_plan,sf.cam.work.order.program.knife.plan,model_sf_cam_work_order_program_knife_plan,base.group_user,1,1,1,1 access_sf_machine_table_tool_changing_apply,sf.machine.table.tool.changing.apply,model_sf_machine_table_tool_changing_apply,base.group_user,1,1,1,1 diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py index 7afdd536..2699cf89 100644 --- a/sf_tool_management/wizard/wizard.py +++ b/sf_tool_management/wizard/wizard.py @@ -176,10 +176,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel): 功能刀具组装 :return: """ - self.env['sf.functional.tool.assembly'].search([ - ('machine_tool_name_id', '=', self.machine_tool_name_id.id), - ('cutter_spacing_code', '=', self.cutter_spacing_code) - ]).write({ + desc_1 = { 'mrs_cutting_tool_integral_model_ids': self.mrs_cutting_tool_integral_model_ids.ids, 'integral_code': self.integral_code, 'integral_name': self.integral_name, @@ -214,10 +211,15 @@ class FunctionalToolAssemblyOrder(models.TransientModel): 'assemble_status': '1', 'tool_loading_person': self.env.user.name, 'tool_loading_time': fields.Datetime.now() - }) + } + self.env['sf.functional.tool.assembly'].search([ + ('machine_tool_name_id', '=', self.machine_tool_name_id.id), + ('cutter_spacing_code', '=', self.cutter_spacing_code), + ('assemble_status', '=', '0'), + ]).write(desc_1) # 封装功能刀具数据 - desc = { + desc_2 = { 'code': self.code, 'name': self.functional_tool_name_id.name, 'mrs_cutting_tool_type_id': self.functional_tool_type_id.id, @@ -239,14 +241,41 @@ class FunctionalToolAssemblyOrder(models.TransientModel): 'applicable_range': None, 'image': None, } - if self.new_former == '0': # 如果是新刀,则创建功能刀具列表、 - self.env['sf.functional.cutting.tool.entity'].create(desc) - # 创建功能刀具预警、实时分布、出入库记录的新记录 - self.env['sf.functional.tool.warning'].create(desc) - self.env['sf.real.time.distribution.of.functional.tools'].create(desc) - self.env['sf.inbound.and.outbound.records.of.functional.tools'].create(desc) + self.env['sf.functional.cutting.tool.entity'].create(desc_2) + else: + record = self.env['sf.functional.cutting.tool.entity'].search([('code', '=', self.code)]) + # 创建功能刀具缓存信息 + self.env['sf.functional.cutting.tool.entity.cache'].create({ + 'code': record.code, + 'name': record.name, + 'mrs_cutting_tool_type_id': record.mrs_cutting_tool_type_id.id, + 'mrs_cutting_tool_model_id': record.mrs_cutting_tool_model_id.id, + 'mrs_cutting_tool_integral_model_ids': record.mrs_cutting_tool_integral_model_ids.ids, + 'mrs_cutting_tool_blade_model_ids': record.mrs_cutting_tool_blade_model_ids.ids, + 'mrs_cutting_tool_cutterbar_model_ids': record.mrs_cutting_tool_cutterbar_model_ids.ids, + 'mrs_cutting_tool_cutterpad_model_ids': record.mrs_cutting_tool_cutterpad_model_ids.ids, + 'mrs_cutting_tool_cutterhandle_model_ids': record.mrs_cutting_tool_cutterhandle_model_ids.ids, + 'mrs_cutting_tool_cutterhead_model_ids': record.mrs_cutting_tool_cutterhead_model_ids.ids, + 'diameter': record.diameter, + 'tool_grade': record.tool_grade, + 'machining_accuracy': record.machining_accuracy, + 'tool_length': record.tool_length, + 'blade_number': record.blade_number, + 'integral_blade_length': record.integral_blade_length, + 'effective_blade_length': record.effective_blade_length, + 'max_life': record.max_life, + 'is_standard': record.is_standard, + 'applicable_range': record.applicable_range, + 'image': record.image, + }) + # 修改功能刀具列表信息 + record.write(desc_2) + # # 创建功能刀具预警、实时分布、出入库记录的新记录 + # self.env['sf.functional.tool.warning'].create(desc) + # self.env['sf.real.time.distribution.of.functional.tools'].create(desc) + # self.env['sf.inbound.and.outbound.records.of.functional.tools'].create(desc) # 关闭弹出窗口 return {'type': 'ir.actions.act_window_close'} @@ -274,26 +303,25 @@ class DeliveryOfCargoFromStorage(models.TransientModel): print(vals) if vals: for val in vals: - self.env['sf.functional.tool.assembly'].search([ + print(val) + record = self.env['sf.functional.tool.assembly'].search([ ('functional_tool_code', '=', val.functional_tool_code), - ('machine_tool_code', '=', val.machine_tool_code), - ('name', '=', val.name.id), - ('production_line_name_id', '=', val.production_line_name_id.id) - ]).write({ - 'assemble_status': '2', - 'receive_person': self.env.user.name, - 'receive_time': fields.Datetime.now() - }) - - tool_assembly = self.env['sf.functional.tool.assembly'].search([ - ('functional_tool_code', '=', val.functional_tool_code), - ('name', '=', val.name.id) + ('assemble_status', '=', '1') ]) # 判断装刀任务来源,如果来源于CAM装刀,则修改CAM装刀的计划执行状态 - if tool_assembly.loading_task_source == '0': + if record.loading_task_source == '0': self.env['sf.cam.work.order.program.knife.plan'].search([ ('functional_tool_code', '=', val.functional_tool_code), ('functional_tool_name_id', '=', val.name.id) ]).write({ 'plan_execute_status': '2' }) + + record.write({ + 'assemble_status': '2', + 'receive_person': self.env.user.name, + 'receive_time': fields.Datetime.now() + }) + + + diff --git a/sf_tool_management/wizard/wizard_view.xml b/sf_tool_management/wizard/wizard_view.xml index 5f156eae..a8101f6d 100644 --- a/sf_tool_management/wizard/wizard_view.xml +++ b/sf_tool_management/wizard/wizard_view.xml @@ -189,7 +189,8 @@ - +