From 7689701ab1c33a14901a247c0b0e7ae370e4d4ee Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Wed, 28 Jun 2023 20:49:16 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=88=80=E5=85=B7=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=8C=E6=88=90=EF=BC=8C=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=B7=B2=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/tool_base_new.py | 29 ++++++- sf_base/views/tool_views.xml | 13 ++- sf_mrs_connect/models/res_config_setting.py | 87 ++------------------- sf_mrs_connect/models/sync_common.py | 40 +++++++--- 4 files changed, 72 insertions(+), 97 deletions(-) diff --git a/sf_base/models/tool_base_new.py b/sf_base/models/tool_base_new.py index 65d2e4cb..c7f95a3f 100644 --- a/sf_base/models/tool_base_new.py +++ b/sf_base/models/tool_base_new.py @@ -21,7 +21,7 @@ class FunctionalCuttingTool(models.Model): code = fields.Char('编码') name = fields.Char('名称') - mrs_cutting_tool_type_id = fields.Many2one('sf.cutting.tool.type', string='功能刀具类型') + 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='刀具型号') diameter = fields.Float('直径(mm)') tool_grade = fields.Selection([('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'P4'), ('5', 'P5'), ('6', 'P6')], @@ -68,6 +68,9 @@ class CuttingToolModel(models.Model): # 整体式刀具特有字段 integral_code = fields.Char('整体式刀具编码') + integral_accuracy = fields.Float('精度(μm)') + integral_hardness = fields.Float('加工硬度(HRC)') + integral_coating_material = fields.Char('涂层材质') integral_total_length = fields.Float('总长度(mm)') integral_shank_length = fields.Float('柄部长度(mm)') integral_blade_length = fields.Float('刃部长度(mm)') @@ -81,6 +84,7 @@ class CuttingToolModel(models.Model): # 刀片特有字段 blade_code = fields.Char('刀片编码') + blade_coating_material = fields.Char('涂层材质') blade_length = fields.Float('长度L(mm)') blade_width = fields.Float('宽度D(mm)') blade_height = fields.Float('高度T(mm)') @@ -157,9 +161,16 @@ class CuttingToolModel(models.Model): # 刀柄特有字段 handle_code = fields.Char('刀柄编码', readonly=True) - handle_length = fields.Float('L(mm)') - handle_length1 = fields.Float('L1(mm)') - handle_diameter1 = fields.Float('D1(mm)') + # 柄长L(mm)、法兰柄长L1(mm)、法兰直径D1(mm) + handle_length = fields.Float('柄长L(mm)') + handle_diameter = fields.Float('直径D(mm)') + handle_flange_length = fields.Float('法兰柄长L1(mm)') + handle_flange_diameter = fields.Float('法兰直径D1(mm)') + # 夹持直径min、夹持直径max、径跳精度、最大转速n/min、3D模型图 + handle_clamping_diameter_min = fields.Float('夹持直径min') + handle_clamping_diameter_max = fields.Float('夹持直径max') + handle_jump_accuracy = fields.Float('径跳精度') + handle_max_speed = fields.Float('最大转速n/min') handle_weight = fields.Float('重量(kg)') handle_body_accuracy = fields.Float('本体精度(mm)') handle_nut = fields.Float('配对螺母(mm)') @@ -180,6 +191,9 @@ class CuttingToolModel(models.Model): # 夹头特有字段 chuck_code = fields.Char('夹头编码', readonly=True) chuck_accuracy = fields.Float('精度(mm)') + # 夹持直径min、夹持直径max、3D模型图 + chuck_clamping_diameter_min = fields.Float('夹持直径min') + chuck_clamping_diameter_max = fields.Float('夹持直径max') chuck_diameter = fields.Float('外径(mm)') chuck_inner_diameter = fields.Float('内径(mm)') chuck_height = fields.Float('高度(mm)') @@ -197,6 +211,7 @@ class CuttingToolModel(models.Model): chuck_feature = fields.Char('特性') image = fields.Binary('图片') + three_d_model = fields.Many2one('ir.attachment', '3D模型') hide_integral = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏整体式刀具') hide_blade = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀片') @@ -205,6 +220,12 @@ class CuttingToolModel(models.Model): hide_handler = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀柄') hide_chuck = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏夹头') hide_model = fields.Boolean(compute='_compute_hide_model_number', default=True, string='隐藏型号') + image_is_visible = fields.Boolean(compute='_compute_image_is_visible', default=True, string='隐藏图片') + + @api.depends('mrs_cutting_tool_material_id') + def _compute_image_is_visible(self): + for record in self: + record.image_is_visible = not (record.hide_handler or record.hide_chuck) @api.depends('mrs_cutting_tool_material_id') def _compute_hide_model_number(self): diff --git a/sf_base/views/tool_views.xml b/sf_base/views/tool_views.xml index 6909519a..27619b6d 100644 --- a/sf_base/views/tool_views.xml +++ b/sf_base/views/tool_views.xml @@ -213,6 +213,8 @@ + + @@ -236,10 +238,13 @@ - - + + + + + @@ -253,12 +258,14 @@ + + @@ -282,6 +289,8 @@ + + diff --git a/sf_mrs_connect/models/res_config_setting.py b/sf_mrs_connect/models/res_config_setting.py index 566b63b4..c04c70b8 100644 --- a/sf_mrs_connect/models/res_config_setting.py +++ b/sf_mrs_connect/models/res_config_setting.py @@ -42,93 +42,18 @@ class ResConfigSettings(models.TransientModel): _logger.info("同步资源库机床类型") # self.env['sf.production.process.parameter'].sync_all_production_process_parameter() # _logger.info("同步表面工艺参数") - _logger.info("定时同步每日功能刀具类型列表...") - # self.env['sf.functional.cutting.tool.model'].sync_functional_cutting_tool_model() - _logger.info("同步每日功能刀具类型完成") - _logger.info("同步所有功能刀具类型...") - self.env['sf.functional.cutting.tool.model'].sync_all_functional_cutting_tool_model() - _logger.info("同步所有功能刀具类型完成") _logger.info("同步每日刀具物料...") self.env['sf.cutting.tool.material'].sync_cutting_tool_material() _logger.info("同步每日刀具物料完成") _logger.info("同步所有刀具物料...") self.env['sf.cutting.tool.material'].sync_all_cutting_tool_material() _logger.info("同步所有刀具物料完成") - # _logger.info("同步每日刀片类型列表...") - # self.env['sf.blade.model'].sync_blade_model() - # _logger.info("同步每日刀片类型完成") - # _logger.info("同步所有刀片类型列表...") - # self.env['sf.blade.model'].sync_all_blade_model() - # _logger.info("同步所有刀片类型完成") - # _logger.info("同步每日刀杆类型...") - # self.env['sf.cutter.bar.model'].sync_cutter_bar_model() - # _logger.info("同步每日刀杆类型完成") - # _logger.info("同步所有刀杆类型...") - # self.env['sf.cutter.bar.model'].sync_all_cutter_bar_model() - # _logger.info("同步所有刀杆类型完成") - # _logger.info("同步每日刀盘类型...") - # self.env['sf.cutter.pad.model'].sync_cutter_pad_model() - # _logger.info("同步每日刀盘类型完成") - # _logger.info("同步所有刀盘类型...") - # self.env['sf.cutter.pad.model'].sync_all_cutter_pad_model() - # _logger.info("同步所有刀盘类型完成") - # _logger.info("同步每日刀柄类型...") - # self.env['sf.handle.model'].sync_handle_model() - # _logger.info("同步每日刀柄类型完成") - # _logger.info("同步所有刀柄类型...") - # self.env['sf.handle.model'].sync_all_handle_model() - # _logger.info("同步所有刀柄类型完成") - # _logger.info("同步每日夹头类型...") - # self.env['sf.chuck.model'].sync_chuck_model() - # _logger.info("同步每日夹头类型完成") - # _logger.info("同步所有夹头类型...") - # self.env['sf.chuck.model'].sync_all_chuck_model() - # _logger.info("同步所有夹头类型完成") - # _logger.info("同步每日整体式刀具类型...") - # self.env['sf.integral.cutting.tool.model'].sync_integral_cutting_tool_model() - # _logger.info("同步每日整体式刀具类型完成") - # _logger.info("同步所有整体式刀具类型...") - # self.env['sf.integral.cutting.tool.model'].sync_all_integral_cutting_tool_model() - # _logger.info("同步所有整体式刀具类型完成") - # _logger.info("同步每日刀片列表...") - # self.env['sf.blade'].sync_blade() - # _logger.info("同步每日刀片完成") - # _logger.info("同步所有刀片列表...") - # self.env['sf.blade'].sync_all_blade() - # _logger.info("同步所有刀片完成") - # _logger.info("同步每日刀杆列表...") - # self.env['sf.cutter.bar'].sync_cutter_bar() - # _logger.info("同步每日刀杆完成") - # _logger.info("同步所有刀杆列表...") - # self.env['sf.cutter.bar'].sync_all_cutter_bar() - # _logger.info("同步所有刀杆完成") - # # _logger.info("同步每日刀盘列表...") - # # self.env['sf.cutter.pad'].sync_cutter_pad() - # # _logger.info("同步每日刀盘完成") - # _logger.info("同步所有刀盘列表...") - # self.env['sf.cutter.pad'].sync_all_cutter_pad() - # _logger.info("同步所有刀盘完成") - # # _logger.info("同步每日刀柄列表...") - # # self.env['sf.handle'].sync_handle() - # # _logger.info("同步每日刀柄完成") - # _logger.info("同步所有刀柄列表...") - # self.env['sf.handle'].sync_all_handle() - # _logger.info("同步所有刀柄完成") - # # _logger.info("同步每日夹头列表...") - # # self.env['sf.chuck'].sync_chuck() - # # _logger.info("同步每日夹头完成") - # _logger.info("同步所有夹头列表...") - # self.env['sf.chuck'].sync_all_chuck() - # _logger.info("同步所有夹头完成") - # # _logger.info("同步每日整体式刀具列表...") - # # self.env['sf.integral.cutting.tool'].sync_integral_cutting_tool() - # # _logger.info("同步每日整体式刀具完成") - # _logger.info("同步所有整体式刀具列表...") - # self.env['sf.integral.cutting.tool'].sync_all_integral_cutting_tool() - # _logger.info("同步所有整体式刀具完成") - # _logger.info("同步每日同步功能刀具列表...") - # self.env['sf.functional.cutting.tool'].sync_functional_cutting_tool() - # _logger.info("同步每日功能刀具列表完成") + _logger.info("定时同步每日功能刀具类型列表...") + self.env['sf.functional.cutting.tool.model'].sync_functional_cutting_tool_model() + _logger.info("同步每日功能刀具类型完成") + _logger.info("定时同步所有功能刀具类型列表...") + self.env['sf.functional.cutting.tool.model'].sync_all_functional_cutting_tool_model() + _logger.info("同步所有功能刀具类型完成") _logger.info("同步每日刀具类型...") self.env['sf.cutting.tool.type'].sync_tool_type() _logger.info("同步每日刀具类型完成") diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index 87f8128c..67548349 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -3294,7 +3294,7 @@ class SfToolType(models.Model): "chuck_type_code": item['chuck_type_code'], "remark": item['remark'], }) - print('同步每日刀柄类型列表成功') + else: raise ValidationError("认证未通过") @@ -3343,7 +3343,7 @@ class SfToolType(models.Model): "chuck_type_code": item['chuck_type_code'], "remark": item['remark'], }) - print('同步所有刀柄类型列表成功') + else: raise ValidationError("认证未通过") @@ -3477,8 +3477,13 @@ class SfToolModel(models.Model): "pad_scope": item['pad_scope'], "handle_code": item['handle_code'], "handle_length": item['handle_length'], - "handle_length1": item['handle_length1'], - "handle_diameter1": item['handle_diameter1'], + "handle_diameter": item['handle_diameter'], + "handle_flange_length": item['handle_flange_length'], + "handle_flange_diameter": item['handle_flange_diameter'], + "handle_clamping_diameter_min": item['handle_clamping_diameter_min'], + "handle_clamping_diameter_max": item['handle_clamping_diameter_max'], + "handle_jump_accuracy": item['handle_jump_accuracy'], + "handle_max_speed": item['handle_max_speed'], "handle_weight": item['handle_weight'], "handle_body_accuracy": item['handle_body_accuracy'], "handle_nut": item['handle_nut'], @@ -3578,8 +3583,13 @@ class SfToolModel(models.Model): "pad_scope": item['pad_scope'], "handle_code": item['handle_code'], "handle_length": item['handle_length'], - "handle_length1": item['handle_length1'], - "handle_diameter1": item['handle_diameter1'], + "handle_diameter": item['handle_diameter'], + "handle_flange_length": item['handle_flange_length'], + "handle_flange_diameter": item['handle_flange_diameter'], + "handle_clamping_diameter_min": item['handle_clamping_diameter_min'], + "handle_clamping_diameter_max": item['handle_clamping_diameter_max'], + "handle_jump_accuracy": item['handle_jump_accuracy'], + "handle_max_speed": item['handle_max_speed'], "handle_weight": item['handle_weight'], "handle_body_accuracy": item['handle_body_accuracy'], "handle_nut": item['handle_nut'], @@ -3743,8 +3753,13 @@ class SfToolModel(models.Model): "pad_scope": item['pad_scope'], "handle_code": item['handle_code'], "handle_length": item['handle_length'], - "handle_length1": item['handle_length1'], - "handle_diameter1": item['handle_diameter1'], + "handle_diameter": item['handle_diameter'], + "handle_flange_length": item['handle_flange_length'], + "handle_flange_diameter": item['handle_flange_diameter'], + "handle_clamping_diameter_min": item['handle_clamping_diameter_min'], + "handle_clamping_diameter_max": item['handle_clamping_diameter_max'], + "handle_jump_accuracy": item['handle_jump_accuracy'], + "handle_max_speed": item['handle_max_speed'], "handle_weight": item['handle_weight'], "handle_body_accuracy": item['handle_body_accuracy'], "handle_nut": item['handle_nut'], @@ -3840,8 +3855,13 @@ class SfToolModel(models.Model): "pad_scope": item['pad_scope'], "handle_code": item['handle_code'], "handle_length": item['handle_length'], - "handle_length1": item['handle_length1'], - "handle_diameter1": item['handle_diameter1'], + "handle_diameter": item['handle_diameter'], + "handle_flange_length": item['handle_flange_length'], + "handle_flange_diameter": item['handle_flange_diameter'], + "handle_clamping_diameter_min": item['handle_clamping_diameter_min'], + "handle_clamping_diameter_max": item['handle_clamping_diameter_max'], + "handle_jump_accuracy": item['handle_jump_accuracy'], + "handle_max_speed": item['handle_max_speed'], "handle_weight": item['handle_weight'], "handle_body_accuracy": item['handle_body_accuracy'], "handle_nut": item['handle_nut'], From ec95e095532e593fdcaa3a29aeb2a64b0fef0177 Mon Sep 17 00:00:00 2001 From: yuxianghui <1608204036@qq.com> Date: Thu, 29 Jun 2023 09:36:54 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E5=8A=9F=E8=83=BD=EF=BC=88=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=B7=B2=E5=AE=8C=E6=88=90=EF=BC=8C=E6=8C=89=E9=94=AE=E6=9C=AA?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=EF=BC=89=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E7=BB=84=E8=A3=85=E6=96=B9=E6=B3=95=EF=BC=88todo?= =?UTF-8?q?=EF=BC=89=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=87=BA=E5=BA=93=E6=8C=89?= =?UTF-8?q?=E9=94=AE=E5=BC=B9=E7=AA=97=E6=A0=B7=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_tool_management/__manifest__.py | 3 + sf_tool_management/models/base.py | 78 +++++++++++++++++--- sf_tool_management/static/src/change.scss | 11 +++ sf_tool_management/views/tool_base_views.xml | 25 ++----- sf_tool_management/wizard/wizard.py | 16 +++- sf_tool_management/wizard/wizard_view.xml | 17 +++-- 6 files changed, 114 insertions(+), 36 deletions(-) create mode 100644 sf_tool_management/static/src/change.scss diff --git a/sf_tool_management/__manifest__.py b/sf_tool_management/__manifest__.py index 6fbf1152..d46a14d8 100644 --- a/sf_tool_management/__manifest__.py +++ b/sf_tool_management/__manifest__.py @@ -24,6 +24,9 @@ 'web.assets_qweb': [ ], + 'web.assets_backend':[ + 'sf_tool_management/static/src/change.scss' + ] }, diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 8563fed3..43a55b18 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -8,7 +8,7 @@ class FunctionalCuttingToolEntity(models.Model): _description = '功能刀具管理' order = fields.Char(string='序') - functional_cutting_tool_id = fields.Many2one('sf.functional.cutting.tool', string='功能刀具', invisible=True) + functional_cutting_tool_id = fields.Char(string='功能刀具', invisible=True) # 功能刀具预警 特有字段 install_tool_time = fields.Char("装刀时间") outbound_time = fields.Char('出库时间') @@ -104,11 +104,11 @@ class MachineTableToolChangingApply(models.Model): _name = 'sf.machine.table.tool.changing.apply' _description = '机床换刀申请' - apply_to_tool_change_ids = fields.One2many( - 'sf.tool.change.requirement.information', - 'tool_change_to_apply_id', - string='换刀需求信息', - attrs="{'invisible': 1}") + # apply_to_tool_change_ids = fields.One2many( + # 'sf.tool.change.requirement.information', + # 'tool_change_to_apply_id', + # string='换刀需求信息', + # attrs="{'invisible': 1}") CNC_machine_table = fields.Char(string='CNC机床') # todo 机床类型和刀位号 为 Many2one @@ -260,7 +260,7 @@ class CAMWorkOrderProgramKnifePlan(models.Model): def automation_apply_for_tooling(self): """ - todo 自动申请装刀 + 自动申请装刀 :return: """ self.env['sf.functional.tool.assembly'].create({ @@ -303,6 +303,7 @@ class CAMWorkOrderProgramKnifePlan(models.Model): class FunctionalToolAssembly(models.Model): _name = 'sf.functional.tool.assembly' _description = '功能刀具组装' + _order = 'use_tool_time asc' functional_tool_code = fields.Char(string='功能刀具编码') functional_tool_name = fields.Char(string='功能刀具名称') @@ -317,7 +318,6 @@ class FunctionalToolAssembly(models.Model): knife_handle_name = fields.Char(string='刀柄名称') knife_handle_brand = fields.Char(string='品牌') knife_handle_type = fields.Char(string='型号') - coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精') tool_loading_length = fields.Char(string='装刀长') new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧') @@ -330,7 +330,6 @@ class FunctionalToolAssembly(models.Model): applicant = fields.Char(string='申请人') reason_for_applying = fields.Char(string='申请原因') apply_time = fields.Datetime(string='申请时间', default=fields.Datetime.now()) - assemble_status = fields.Selection([('0', '待组装'), ('1', '已组装'), ('2', '已出库')],string='组装状态', default='0') use_tool_time = fields.Datetime(string='用刀时间') production_line_name = fields.Char(string='产线名称') @@ -343,6 +342,8 @@ class FunctionalToolAssembly(models.Model): receive_time = fields.Datetime(string='领用出库时间') remark = fields.Char(string='备注说明') + check_box = fields.Boolean(string='复选框', default=False, attrs="{'readonly': [('assemble_status', '!=', '1')]}") + def cancel_functional_tool_assembly(self): """ 取消功能刀具组装 @@ -367,3 +368,62 @@ class FunctionalToolAssembly(models.Model): 'cut_number': None, 'assemble_status': '0' }) + + + def show_popup(self): + """ + 单个功能刀具出库 + :return: + """ + self.env['sf.delivery.of.cargo.from.storage'].search([]).unlink() + + vals = self.env['sf.functional.tool.assembly'].search([('check_box', '=', True),('assemble_status', '=', '1')]) + + if vals: + for val in vals: + self.env['sf.delivery.of.cargo.from.storage'].create({ + 'functional_tool_code': val.functional_tool_code, + 'functional_tool_name': val.functional_tool_name, + 'functional_tool_type': val.functional_tool_type, + 'production_line_name': val.production_line_name, + '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, + 'functional_tool_name': self.functional_tool_name, + 'functional_tool_type': self.functional_tool_type, + 'production_line_name': self.production_line_name, + 'machine_tool_code': self.machine_tool_code, + 'receive_person': self.receive_person, + 'receive_time': self.receive_time + }) + + return { + 'type': 'ir.actions.act_window', + 'name': '功能刀具出库', + 'res_model': 'sf.delivery.of.cargo.from.storage', + 'view_mode': 'tree', + 'view_type': 'tree', + 'target': 'new' + } + + def automated_assembly(self): + """ + todo 自动组装 + :return: + """ + + def automatic_printing_of_QR_code(self): + """ + todo 自动打印二维码 + :return: + """ + + def assemble_single_print(self): + """ + todo 组装单打印 + :return: + """ \ No newline at end of file diff --git a/sf_tool_management/static/src/change.scss b/sf_tool_management/static/src/change.scss new file mode 100644 index 00000000..40fdcc8e --- /dev/null +++ b/sf_tool_management/static/src/change.scss @@ -0,0 +1,11 @@ +.modal-content .o_cp_buttons { + display:none +} + +.modal-content .o_control_panel { + display:none +} + +.modal-content .o_list_button { + +} \ No newline at end of file diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index 6ccaedbc..328a053d 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -417,31 +417,20 @@ class="btn-primary"/>