Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/新增夹具功能

This commit is contained in:
jinling.yang
2023-06-29 17:14:48 +08:00
141 changed files with 20125 additions and 4856 deletions

View File

@@ -14,19 +14,13 @@
'data': [
'security/group_security.xml',
'security/ir.model.access.csv',
# 'data/fixture_data.xml'
'views/base_view.xml',
'views/common_view.xml',
'views/fixture_view.xml',
'views/functional_fixture_view.xml',
'views/menu_view.xml',
# "views/tool_base_views.xml",
# "views/tool_base_menu.xml",
# 'views/fixture_base_view.xml',
"views/tool_views.xml",
"views/tool_menu.xml",
# "views/tool_base_views.xml",
# "views/tool_base_menu.xml",
'views/menu_fixture_view.xml',
],

View File

@@ -1,11 +1,9 @@
from . import base
from . import common
#from . import tool_base
#from . import fixture_base
from . import tool_base_new
from . import fixture
from . import functional_fixture
# from . import tool_base
from . import tool_base_new
#from . import fixture_base

View File

@@ -41,7 +41,7 @@ class FixtureModel(models.Model):
clamp_workpiece_height_max = fields.Char(string="夹持工件高度MAX[mm]")
clamp_workpiece_diameter_max = fields.Char(string="夹持工件直径MAX[mm]")
maximum_carrying_weight = fields.Char(string="最大承载重量[kg]")
Maximum_clamping_force = fields.Char(string="最大夹持力[n]")
maximum_clamping_force = fields.Char(string="最大夹持力[n]")
materials_model_id = fields.Many2one('sf.materials.model', string="材料型号")
driving_way = fields.Char(string="驱动方式")
apply_machine_tool_type = fields.Char(string="适用机床型号")

View File

@@ -15,5 +15,28 @@ class FunctionalFixture(models.Model):
_description = "功能夹具"
code = fields.Char(string='编码', readonly=True)
name = fields.Char(string="名称", size=15)
functional_fixture_type_id = fields.Many2one('mrs.functional.fixture.type', string="功能夹具类型" )
name = fields.Char(string="名称", size=15, required=True)
functional_fixture_type_id = fields.Many2one('sf.functional.fixture.type', string="功能夹具类型", required=True)
zero_chuck_model_ids = fields.Many2many('sf.fixture.model', 'rel_fixture_model_zero_chuck', string="零点卡盘型号",
required=True,
domain=[('fixture_material_type', '=', '零点卡盘')])
transfer_tray_model_ids = fields.Many2many('sf.fixture.model', 'rel_fixture_model_transfer_tray',
string="转接板(锁板)托盘型号",
domain=[('fixture_material_type', '=', '转接板(锁板)托盘')])
pneumatic_tray_model_ids = fields.Many2many('sf.fixture.model', 'rel_fixture_model_pneumatic_tray',
string="气动托盘型号",
domain=[('fixture_material_type', '=', '气动托盘')])
magnetic_tray_model_ids = fields.Many2many('sf.fixture.model', 'rel_fixture_model_magnetic_tray',
string="磁吸托盘型号",
domain=[('fixture_material_type', '=', '磁吸托盘')])
vice_tray_model_ids = fields.Many2many('sf.fixture.model', 'rel_fixture_model_vice_tray', string="虎钳托盘型号",
domain=[('fixture_material_type', '=', '虎钳托盘')])
def _get_fixture_model_ids(self, fixture_model_code):
fixture_model_ids = []
for item in fixture_model_code:
fixture_model = self.env['sf.fixture.model'].search([('code', '=', item)])
fixture_model_ids.append(fixture_model.id)
return [(6, 0, fixture_model_ids)]

View File

@@ -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)')
@@ -90,6 +94,7 @@ class CuttingToolModel(models.Model):
blade_main_included_angle = fields.Float('主偏角(°)')
blade_r_angle = fields.Float('R角(°)')
blade_hardness = fields.Char('加工硬度')
blade_accuracy = fields.Char('精度等级')
blade_radius = fields.Float('刀尖半径(mm)')
blade_nut = fields.Float('配对螺母(mm)')
mrs_cutting_tool_model_blade_cutter_bar_ids = fields.Many2many(
@@ -112,7 +117,7 @@ class CuttingToolModel(models.Model):
)
# 刀杆特有字段
bar_code = fields.Char('刀杆编码', readonly=True)
bar_code = fields.Char('刀杆编码')
bar_c_diameter = fields.Float('C柄径(mm)')
bar_total_length = fields.Float('L总长(mm)')
bar_blade_number = fields.Integer('刃数')
@@ -134,7 +139,7 @@ class CuttingToolModel(models.Model):
bar_scope = fields.Char('适用范围')
# 刀盘特有字段
pad_code = fields.Char('刀盘编码', readonly=True)
pad_code = fields.Char('刀盘编码')
pad_c_diameter = fields.Float('C柄径(mm)')
pad_total_length = fields.Float('L总长(mm)')
pad_blade_number = fields.Integer('刃数')
@@ -156,10 +161,17 @@ class CuttingToolModel(models.Model):
pad_scope = fields.Char('适用范围')
# 刀柄特有字段
handle_code = fields.Char('刀柄编码', readonly=True)
handle_length = fields.Float('L(mm)')
handle_length1 = fields.Float('L1(mm)')
handle_diameter1 = fields.Float('D1(mm)')
handle_code = fields.Char('刀柄编码')
# 柄长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)')
@@ -178,8 +190,11 @@ class CuttingToolModel(models.Model):
handle_standard_speed = fields.Float('标准转速')
# 夹头特有字段
chuck_code = fields.Char('夹头编码', readonly=True)
chuck_code = fields.Char('夹头编码')
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 +212,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 +221,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):

View File

@@ -19,4 +19,8 @@
.o_inner_group .img-fluid {
width: 133px !important;
height: 133px !important;
}
.o_search_panel.account_root {
flex: unset !important;
}

View File

@@ -302,8 +302,6 @@
<group string="基本信息">
<group>
<field name="MTcode" string="编码"/>
<field name="brand_id"
required="1"
domain="[('tag_ids', '=', '机床')]"

View File

@@ -173,13 +173,16 @@
<group string="基本信息">
<group>
<field name="code" force_save="1"/>
<field name="name"/>
<field name="brand_id"/>
<field name="fixture_material_id"/>
<field name="fixture_material_type" invisible="1"/>
<field name="multi_mounting_type_id"/>
</group>
<group>
<field name="name"/>
<field name="fixture_material_id"/>
<field name="fixture_material_type" invisible="1"/>
<!-- <field name="upload_model_file" widget="many2many_binary"/>-->
<field name="model_file" widget="Viewer3D" string="模型" readonly="1" force_save="1"
attrs="{'invisible': [('model_file', '=', False)]}"/>
</group>
</group>
<group string="参数"
@@ -222,7 +225,7 @@
<field name="clamp_workpiece_diameter_max"
attrs="{'invisible': [('fixture_material_type','=','零点卡盘')],'required': [('fixture_material_type', 'in',('气动托盘','转接板(锁板)托盘','磁吸托盘','虎钳托盘'))]}"/>
<field name="maximum_carrying_weight"></field>
<field name="Maximum_clamping_force"></field>
<field name="maximum_clamping_force"></field>
</group>
<group>
<field name="materials_model_id"/>
@@ -238,7 +241,6 @@
attrs='{"invisible": [("fixture_material_type","not in",("虎钳托盘","零点卡盘"))]}'/>
<field name="apply_machine_tool_type"
attrs='{"invisible": [("fixture_material_type","!=",("零点卡盘"))]}'/>
<field name="model_file"/>
</group>
</group>
</sheet>

View File

@@ -82,6 +82,8 @@
<tree string="功能夹具">
<field name="code"/>
<field name="name"/>
<field name="functional_fixture_type_id"/>
<field name="zero_chuck_model_ids" widget="many2many_tags"/>
</tree>
</field>
</record>
@@ -94,8 +96,14 @@
<sheet>
<group string="基本信息">
<group>
<field name="code"/>
<field name="code" force_save="1"/>
<field name="name"/>
<field name="functional_fixture_type_id"/>
<field name="zero_chuck_model_ids" widget="many2many_tags"/>
<field name="transfer_tray_model_ids" widget="many2many_tags"/>
<field name="pneumatic_tray_model_ids" widget="many2many_tags"/>
<field name="magnetic_tray_model_ids" widget="many2many_tags"/>
<field name="vice_tray_model_ids" widget="many2many_tags"/>
</group>
</group>
</sheet>

View File

@@ -3,7 +3,7 @@
<menuitem id="menu_sf_fixture"
parent="mrp.menu_mrp_configuration"
name="夹具"
sequence="4"
sequence="5"
/>
<menuitem id="menu_sf_fixture_material"
@@ -38,90 +38,4 @@
name="功能夹具"
sequence="4"
/>
<!-- <menuitem id="menu_sf_fixture_setting_element_1"-->
<!-- name="定位元件型号"-->
<!-- parent="menu_sf_functional_fixture_list_2"-->
<!-- sequence="0"-->
<!-- action="sf_fixture_setting_element_view_act"-->
<!-- />-->
<!-- <menuitem id="menu_sf_setting_element_type_1"-->
<!-- name="定位元件类型"-->
<!-- parent="menu_sf_functional_fixture_list_2"-->
<!-- sequence="10"-->
<!-- action="sf_setting_element_type_view_act"-->
<!-- />-->
<!-- <menuitem id="menu_sf_fixture_clamping_element_1"-->
<!-- name="夹紧元件型号"-->
<!-- parent="menu_sf_functional_fixture_list_2"-->
<!-- sequence="2"-->
<!-- action="sf_fixture_clamping_element_view_act"-->
<!-- />-->
<!-- <menuitem id="menu_sf_clamping_element_type_1"-->
<!-- name="夹紧元件类型"-->
<!-- parent="menu_sf_functional_fixture_list_2"-->
<!-- sequence="12"-->
<!-- action="sf_clamping_element_type_view_act"-->
<!-- />-->
<!-- <menuitem id="menu_sf_fixture_tool_setting_1"-->
<!-- name="对刀夹具型号"-->
<!-- parent="menu_sf_functional_fixture_list_2"-->
<!-- sequence="4"-->
<!-- action="sf_fixture_tool_setting_view_act"-->
<!-- />-->
<!-- <menuitem id="menu_sf_tool_setting_type_1"-->
<!-- name="对刀夹具类型"-->
<!-- parent="menu_sf_functional_fixture_list_2"-->
<!-- sequence="14"-->
<!-- action="sf_tool_setting_type_view_act"-->
<!-- />-->
<!-- <menuitem id="menu_sf_fixture_locating_device_1"-->
<!-- name="定位装置型号"-->
<!-- parent="menu_sf_functional_fixture_list_2"-->
<!-- sequence="6"-->
<!-- action="sf_fixture_locating_device_view_act"-->
<!-- />-->
<!-- <menuitem id="menu_sf_locating_device_type_1"-->
<!-- name="定位装置型号"-->
<!-- parent="menu_sf_functional_fixture_list_2"-->
<!-- sequence="16"-->
<!-- action="sf_locating_device_type_view_act"-->
<!-- />-->
<!-- <menuitem id="menu_sf_locating_device_locate_mode_1"-->
<!-- name="定位装置定位方式"-->
<!-- parent="menu_sf_functional_fixture_list_2"-->
<!-- sequence="18"-->
<!-- action="sf_locating_device_locate_mode_view_act"-->
<!-- />-->
<!-- <menuitem id="menu_sf_fixture_guide_element_1"-->
<!-- name="导向元件型号"-->
<!-- parent="menu_sf_functional_fixture_list_2"-->
<!-- sequence="8"-->
<!-- action="sf_fixture_guide_element_view_act"-->
<!-- />-->
<!-- <menuitem id="menu_sf_guide_element_type_1"-->
<!-- name="导向元件类型"-->
<!-- parent="menu_sf_functional_fixture_list_2"-->
<!-- sequence="20"-->
<!-- action="sf_guide_element_type_view_act"-->
<!-- />-->
<!-- <menuitem id="menu_sf_guide_element_guide_mode_1"-->
<!-- name="导向元件导向方式"-->
<!-- parent="menu_sf_functional_fixture_list_2"-->
<!-- sequence="22"-->
<!-- action="sf_guide_element_guide_mode_view_act"-->
<!-- />-->
<!-- <menuitem id="menu_sf_guide_element_way_to_install_1"-->
<!-- name="导向元件安装方式"-->
<!-- parent="menu_sf_functional_fixture_list_2"-->
<!-- sequence="24"-->
<!-- action="sf_guide_element_way_to_install_view_act"-->
<!-- />-->
</odoo>

View File

@@ -16,18 +16,39 @@
action="action_mrp_configuration"
groups="base.group_system"/>-->
<menuitem
id="menu_sf_machine_tool"
id="menu_sf_machine_tool_first"
parent="mrp.menu_mrp_configuration"
name="机床"
sequence="1"
sequence="3"
/>
<menuitem
id="menu_sf_machine_tool"
parent="menu_sf_machine_tool_first"
name="机床"
sequence="0"
action="action_sf_machine_tool"
/>
<menuitem
id="menu_sf_machine_tool_category"
parent="menu_sf_machine_tool_first"
name="机床类型"
sequence="1"
action="action_sf_machine_tool_category"/>
<menuitem
id="menu_sf_machine_tool_type"
parent="menu_sf_machine_tool_first"
name="机床型号"
sequence="2"
action="action_sf_machine_tool_type"/>
<menuitem
id="menu_sf_tray"
parent="mrp.menu_mrp_configuration"
name="托盘"
sequence="9"
sequence="8"
action="action_sf_tray"
/>
@@ -43,7 +64,7 @@
id="menu_sf_production_materials_1"
name="原材料"
parent="mrp.menu_mrp_configuration"
sequence="3"
sequence="6"
/>
@@ -51,7 +72,7 @@
id="menu_sf_production_process_1"
name="工艺"
parent="mrp.menu_mrp_configuration"
sequence="4"
sequence="7"
/>
@@ -98,13 +119,13 @@
sequence="3"
action="sf_processing_technology"/>
<!-- <menuitem-->
<!-- id="menu_sf_partner_views"-->
<!-- name="工厂token"-->
<!-- parent="menu_sf_base"-->
<!-- sequence="1"-->
<!-- action="token_factory_view"-->
<!-- />-->
<!-- <menuitem-->
<!-- id="menu_sf_partner_views"-->
<!-- name="工厂token"-->
<!-- parent="menu_sf_base"-->
<!-- sequence="1"-->
<!-- action="token_factory_view"-->
<!-- />-->
<menuitem
@@ -114,18 +135,6 @@
sequence="1"
action="action_sf_machine_brand"/>
<menuitem
id="menu_sf_machine_tool_type"
parent="menu_sf_base"
name="机床型号"
sequence="1"
action="action_sf_machine_tool_type"/>
<menuitem
id="menu_sf_machine_tool_category"
parent="menu_sf_base"
name="机床类型"
sequence="1"
action="action_sf_machine_tool_category"/>
<menuitem
id="menu_sf_machine_control_system"

View File

@@ -41,48 +41,48 @@
<!-- 刀具 -->
<menuitem
id="menu_sf_cutting_tool"
parent="menu_sf_base"
parent="mrp.menu_mrp_configuration"
name="刀具"
sequence="3"
sequence="4"
/>
<!-- 刀具物料 -->
<menuitem
id="menu_sf_cutting_tool_material"
parent="menu_sf_base"
parent="menu_sf_cutting_tool"
name="刀具物料"
sequence="6"
sequence="1"
action="action_sf_cutting_tool_material"
/>
<!-- 刀具类型 -->
<menuitem
id="menu_sf_cutting_tool_type"
parent="menu_sf_base"
parent="menu_sf_cutting_tool"
name="刀具类型"
sequence="10"
sequence="2"
action="action_sf_cutting_tool_type"
/>
<!-- 刀具型号 -->
<menuitem
id="menu_sf_integral_cutting_tool"
parent="menu_sf_base"
parent="menu_sf_cutting_tool"
name="刀具型号"
sequence="15"
sequence="3"
action="action_sf_cutting_tool"
/>
<!-- 功能刀具 -->
<menuitem
id="menu_sf_functional_cutting_tool"
parent="menu_sf_base"
parent="menu_sf_cutting_tool"
name="功能刀具"
sequence="21"
sequence="4"
action="action_sf_functional_cutting_tool"
/>
<!-- 功能刀具类型 -->
<menuitem
id="menu_sf_functional_cutting_tool_model_type"
parent="menu_sf_base"
parent="menu_sf_cutting_tool"
name="功能刀具类型"
sequence="26"
sequence="5"
action="action_sf_functional_cutting_tool_model_type"
/>
</data>

View File

@@ -213,6 +213,8 @@
<field name="integral_blade_length" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_diameter" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_blade_number" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_accuracy" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_hardness" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="blade_length" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_width" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
@@ -236,10 +238,13 @@
<field name="handle_length" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_length1" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_diameter1" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_flange_length" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_flange_diameter" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_weight" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_body_accuracy" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_clamping_diameter_min" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_clamping_diameter_max" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="chuck_accuracy" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_diameter" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
@@ -253,12 +258,14 @@
<field name="integral_front_angle" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_rear_angle" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_main_included_angle" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_coating_material" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_nut" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_scope" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="blade_main_included_angle" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_r_angle" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_coating_material" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_hardness" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_radius" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_nut" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
@@ -282,6 +289,8 @@
<field name="handle_detection_accuracy" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_detection_hardness" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_standard_speed" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_jump_accuracy" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_max_speed" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="chuck_nut" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_clamping_range" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>