From 0d8d54c05be8a957453facdc6be8b511a1bacbc9 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Tue, 5 Dec 2023 17:37:47 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=9C=BA=E5=BA=8A=E6=8D=A2=E5=88=80?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E6=96=B0=E5=A2=9E=E7=A1=AE=E8=AE=A4=E6=8D=A2?= =?UTF-8?q?=E5=88=80=E6=97=B6=EF=BC=8C=E4=BE=9D=E6=AC=A1=E6=A3=80=E7=B4=A2?= =?UTF-8?q?=E7=BA=BF=E8=BE=B9=E5=88=80=E5=BA=93=E3=80=81=E5=88=80=E5=85=B7?= =?UTF-8?q?=E6=88=BF=E6=98=AF=E5=90=A6=E6=9C=89=E6=BB=A1=E8=B6=B3=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E7=9A=84=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=EF=BC=8C?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E6=9C=89=E5=B0=B1=E8=BF=94=E5=9B=9E=E5=88=80?= =?UTF-8?q?=E5=85=B7=E4=BF=A1=E6=81=AF=EF=BC=8C=E6=B2=A1=E6=9C=89=E5=B0=B1?= =?UTF-8?q?=E5=8F=91=E8=B5=B7=E7=BB=84=E8=A3=85=E7=94=B3=E8=AF=B7=EF=BC=9B?= =?UTF-8?q?2=E3=80=81=E5=88=80=E5=85=B7=E5=AE=89=E5=85=A8=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E6=A8=A1=E5=9E=8B=E8=AF=A6=E6=83=85=E9=A1=B5=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=8F=AF=E4=BF=AE=E6=94=B9=E7=9A=84=E6=9C=80=E4=BD=8E?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E9=87=8F=E3=80=81=E6=9C=80=E9=AB=98=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E9=87=8F=E3=80=81=E6=89=B9=E6=AC=A1=E8=A1=A5=E8=B4=A7?= =?UTF-8?q?=E9=87=8F=E5=AD=97=E6=AE=B5=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_tool_management/models/base.py | 24 ++++++- sf_tool_management/views/tool_base_views.xml | 31 +++++---- sf_tool_management/wizard/wizard.py | 70 ++++++++++++-------- 3 files changed, 81 insertions(+), 44 deletions(-) diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 101f9049..92242197 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -232,7 +232,13 @@ class RealTimeDistributionOfFunctionalTools(models.Model): def _compute_tool_stock_total(self): for record in self: if record: - self.tool_stock_total = record.tool_stock_num + record.side_shelf_num + record.on_tool_stock_num + record.tool_stock_total = record.tool_stock_num + record.side_shelf_num + record.on_tool_stock_num + + # @api.depends('tool_stock_total', 'min_stock_num', 'max_stock_num') + # def _compute_batch_replenishment_num(self): + # for record in self: + # if record.tool_stock_total < record.min_stock_num: + # record.batch_replenishment_num = record.max_stock_num - record.tool_stock_total def create_or_edit_safety_stock(self, vals, sf_functional_cutting_tool_entity_ids): """ @@ -365,7 +371,7 @@ class MachineTableToolChangingApply(models.Model): 'use_tool_time': fields.Datetime.now() + timedelta(hours=4), 'production_line_name_id': self.production_line_id.id, 'machine_tool_name_id': self.maintenance_equipment_id.id, - 'applicant': self.applicant, + 'applicant': '系统自动', 'apply_time': fields.Datetime.now(), 'cutter_spacing_code_id': self.cutter_spacing_code_id.id, 'whether_standard_knife': self.whether_standard_knife, @@ -687,6 +693,20 @@ class FunctionalToolAssembly(models.Model): code = False return code + def get_functional_tool(self, val): + functional_tools = self.env['sf.functional.tool.assembly'].search( + [('after_assembly_functional_tool_name', '=', val.get('after_assembly_functional_tool_name')), + ('after_assembly_functional_tool_diameter', '=', val.get('after_assembly_functional_tool_diameter')), + ('after_assembly_knife_tip_r_angle', '=', val.get('after_assembly_knife_tip_r_angle')), + ('after_assembly_coarse_middle_thin', '=', val.get('after_assembly_coarse_middle_thin'))]) + for functional_tool in functional_tools: + if functional_tool.barcode_id.quant_ids[-1].location_id.name == '刀具线边库': + return functional_tool + for functional_tool in functional_tools: + if functional_tool.barcode_id.quant_ids[-1].location_id.name == '刀具房': + return functional_tool + return False + def automated_assembly(self): """ todo 自动组装 diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index 745edac7..a5e09fb8 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -301,7 +301,7 @@ 功能刀具安全库存 sf.real.time.distribution.of.functional.tools -
+

@@ -310,41 +310,44 @@

- - - - - + + + + + + + + - + - - @@ -352,7 +355,7 @@ - + @@ -468,7 +471,7 @@ 机床换刀申请 sf.machine.table.tool.changing.apply - + diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py index 2c81cb31..b072ec2c 100644 --- a/sf_tool_management/wizard/wizard.py +++ b/sf_tool_management/wizard/wizard.py @@ -62,33 +62,47 @@ class ToolChangeRequirementInformation(models.TransientModel): ('cutter_spacing_code_id', '=', self.cutter_spacing_code_id.id) ]) - # 功能刀具组装创建新任务(new_assembly_task) - sf_functional_tool_assembly = self.env['sf.functional.tool.assembly'].sudo().create({ - 'functional_tool_name': self.replacement_tool_name, - 'functional_tool_type_id': self.replacement_tool_type_id.id, - 'functional_tool_diameter': self.replacement_diameter, - 'knife_tip_r_angle': self.replacement_knife_tip_r_angle, - 'coarse_middle_thin': self.replacement_tool_coarse_middle_thin, - 'new_former': self.new_former, - 'tool_loading_length': self.replacement_tool_setting_length, - 'functional_tool_length': self.replacement_extension_length, - 'effective_length': self.replacement_effective_length, - 'loading_task_source': '1', - 'use_tool_time': self.used_tool_time, - 'production_line_name_id': self.production_line_id.id, - 'machine_tool_name_id': self.maintenance_equipment_id.id, - 'applicant': self.applicant, - 'apply_time': fields.Datetime.now(), - 'cutter_spacing_code_id': self.cutter_spacing_code_id.id, - 'whether_standard_knife': self.whether_standard_knife, - 'reason_for_applying': self.reason_for_applying, - 'sf_machine_table_tool_changing_apply_id': record.id - }) - # 修改机床换刀申请状态 - record.write({ - 'status': '1', - 'sf_functional_tool_assembly_id': sf_functional_tool_assembly.id + # 搜索满足需求的功能刀具 + functional_tool = self.env['sf.functional.tool.assembly'].get_functional_tool({ + 'after_assembly_functional_tool_name': self.replacement_tool_name, + 'after_assembly_functional_tool_diameter': self.replacement_diameter, + 'after_assembly_knife_tip_r_angle': self.replacement_knife_tip_r_angle, + 'after_assembly_coarse_middle_thin': self.replacement_tool_coarse_middle_thin }) + # 如果有满足需求的刀具,就返回刀具信息 + if functional_tool: + record.write({'status': '3'}) + # todo 将功能刀具信息传递到机床 + return functional_tool + # 如果没有满足需求的刀具,就创建功能刀具组装单 + else: + # 功能刀具组装创建新任务(new_assembly_task) + sf_functional_tool_assembly = self.env['sf.functional.tool.assembly'].sudo().create({ + 'functional_tool_name': self.replacement_tool_name, + 'functional_tool_type_id': self.replacement_tool_type_id.id, + 'functional_tool_diameter': self.replacement_diameter, + 'knife_tip_r_angle': self.replacement_knife_tip_r_angle, + 'coarse_middle_thin': self.replacement_tool_coarse_middle_thin, + 'new_former': self.new_former, + 'tool_loading_length': self.replacement_tool_setting_length, + 'functional_tool_length': self.replacement_extension_length, + 'effective_length': self.replacement_effective_length, + 'loading_task_source': '1', + 'use_tool_time': self.used_tool_time, + 'production_line_name_id': self.production_line_id.id, + 'machine_tool_name_id': self.maintenance_equipment_id.id, + 'applicant': self.applicant, + 'apply_time': fields.Datetime.now(), + 'cutter_spacing_code_id': self.cutter_spacing_code_id.id, + 'whether_standard_knife': self.whether_standard_knife, + 'reason_for_applying': self.reason_for_applying, + 'sf_machine_table_tool_changing_apply_id': record.id + }) + # 修改机床换刀申请状态 + record.write({ + 'status': '1', + 'sf_functional_tool_assembly_id': sf_functional_tool_assembly.id + }) # 关闭弹出窗口 return {'type': 'ir.actions.act_window_close'} @@ -323,14 +337,14 @@ class FunctionalToolAssemblyOrder(models.TransientModel): string='组装后功能刀具类型') after_assembly_functional_tool_diameter = fields.Integer(string='组装后功能刀具直径(mm)') after_assembly_knife_tip_r_angle = fields.Float(string='组装后刀尖R角(mm)') - after_assembly_new_former = fields.Selection([('0', '新'), ('1', '旧')], string='组装后新/旧') + after_assembly_new_former = fields.Selection([('0', '新'), ('1', '旧')], string='组装后新/旧', default='0') cut_time = fields.Integer(string='已切削时间(min)') cut_length = fields.Float(string='已切削长度(mm)') cut_number = fields.Integer(string='已切削次数') after_assembly_whether_standard_knife = fields.Boolean(string='组装后是否标准刀', default=True) after_assembly_coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], - string='组装后粗/中/精') + string='组装后粗/中/精', default='3') after_assembly_max_lifetime_value = fields.Integer(string='组装后最大寿命值(min)') after_assembly_alarm_value = fields.Integer(string='组装后报警值(min)') after_assembly_used_value = fields.Integer(string='组装后已使用值(min)')