|
|
|
|
@@ -202,7 +202,6 @@ class ResProductMo(models.Model):
|
|
|
|
|
self.feed_per_tooth_ids = self.cutting_tool_model_id.feed_per_tooth_ids.filtered(
|
|
|
|
|
lambda r: int(r.blade_diameter) == int(self.specification_id.blade_diameter))
|
|
|
|
|
elif self.cutting_tool_type == '夹头':
|
|
|
|
|
self.cutting_tool_clamping_length = self.specification_id.clamping_length
|
|
|
|
|
self.cutting_tool_clamping_tolerance = self.specification_id.clamping_tolerance
|
|
|
|
|
self.cutting_tool_clamping_diameter_min = self.specification_id.min_clamping_diameter
|
|
|
|
|
self.cutting_tool_clamping_diameter_min = self.specification_id.max_clamping_diameter
|
|
|
|
|
@@ -228,14 +227,12 @@ class ResProductMo(models.Model):
|
|
|
|
|
self.cutting_tool_inscribed_circle_tolerance = self.specification_id.inscribed_circle_tolerance
|
|
|
|
|
self.cutting_tool_install_aperture_diameter = self.specification_id.install_aperture_diameter
|
|
|
|
|
self.cutting_tool_chip_breaker_groove = self.specification_id.chip_breaker_groove
|
|
|
|
|
# self.cutting_tool_cut_depth_max = self.specification_id.blade_blade_number
|
|
|
|
|
self.cutting_tool_chip_breaker_type_code = self.specification_id.chip_breaker_type_code
|
|
|
|
|
self.cutting_tool_blade_blade_number = self.specification_id.blade_blade_number
|
|
|
|
|
self.cutting_tool_blade_width = self.specification_id.blade_width
|
|
|
|
|
self.cutting_tool_rear_angle = self.specification_id.relief_angle
|
|
|
|
|
self.cutting_tool_main_included_angle = self.specification_id.main_included_angle
|
|
|
|
|
self.cutting_tool_top_angle = self.specification_id.top_angle
|
|
|
|
|
self.cutting_tool_blade_tip_dip_angle = self.specification_id.blade_tip_dip_angle
|
|
|
|
|
self.cutting_tool_side_cutting_edge_angle = self.specification_id.side_cutting_edge_angle
|
|
|
|
|
self.cutting_tool_pitch = self.specification_id.pitch
|
|
|
|
|
self.cutting_tool_bladed_teeth_model = self.specification_id.blade_teeth_model
|
|
|
|
|
self.cutting_tool_thickness_tolerance = self.specification_id.thickness_tolerance
|
|
|
|
|
@@ -257,13 +254,20 @@ class ResProductMo(models.Model):
|
|
|
|
|
self.cutting_tool_inscribed_circle_tolerance = self.specification_id.inscribed_circle_tolerance
|
|
|
|
|
self.cutting_tool_install_aperture_diameter = self.specification_id.install_aperture_diameter
|
|
|
|
|
self.cutting_tool_chip_breaker_groove = self.specification_id.chip_breaker_groove
|
|
|
|
|
# self.cutting_tool_cut_depth_max = self.specification_id.blade_blade_number
|
|
|
|
|
self.cutting_tool_chip_breaker_type_code = self.specification_id.chip_breaker_type_code
|
|
|
|
|
self.cutting_tool_blade_blade_number = self.specification_id.blade_blade_number
|
|
|
|
|
self.cutting_tool_blade_width = self.specification_id.blade_width
|
|
|
|
|
self.cutting_tool_rear_angle = self.specification_id.relief_angle
|
|
|
|
|
self.cutting_tool_main_included_angle = self.specification_id.main_included_angle
|
|
|
|
|
self.cutting_tool_top_angle = self.specification_id.top_angle
|
|
|
|
|
self.cutting_tool_blade_tip_dip_angle = self.specification_id.blade_tip_dip_angle
|
|
|
|
|
self.cutting_tool_screw = self.specification_id.screw
|
|
|
|
|
self.cutting_tool_wrench = self.specification_id.wrench
|
|
|
|
|
self.cutting_tool_blade_id = self.specification_id.blade_id
|
|
|
|
|
self.cutting_tool_is_cooling_hole = self.specification_id.is_cooling_hole
|
|
|
|
|
self.cutting_tool_locating_slot_code = self.specification_id.locating_slot_code
|
|
|
|
|
self.cutting_tool_install_blade_tip_num = self.specification_id.install_blade_tip_num
|
|
|
|
|
self.cutting_tool_installing_structure = self.specification_id.installing_structure
|
|
|
|
|
self.cutting_tool_cut_depth_max = self.specification_id.cut_depth_max
|
|
|
|
|
if self.cutting_tool_type == '刀盘':
|
|
|
|
|
self.cutting_tool_blade_length = self.specification_id.blade_length
|
|
|
|
|
self.cutting_tool_cutter_head_diameter = self.specification_id.cutter_head_diameter
|
|
|
|
|
@@ -272,17 +276,27 @@ class ResProductMo(models.Model):
|
|
|
|
|
self.cutting_tool_knife_head_height = self.specification_id.knife_head_height
|
|
|
|
|
self.cutting_tool_knife_head_width = self.specification_id.knife_head_width
|
|
|
|
|
self.cutting_tool_knife_head_length = self.specification_id.knife_head_length
|
|
|
|
|
self.cutting_tool_tool_shim = self.specification_id.tool_shim
|
|
|
|
|
self.cutting_tool_cotter_pin = self.specification_id.cotter_pin
|
|
|
|
|
self.cutting_tool_pressing_plate = self.specification_id.pressing_plate
|
|
|
|
|
elif self.cutting_tool_type == '刀柄':
|
|
|
|
|
self.cutting_tool_total_length = self.specification_id.total_length
|
|
|
|
|
self.cutting_tool_standard_speed = self.specification_id.standard_rotate_speed
|
|
|
|
|
self.cutting_tool_speed_max = self.specification_id.max_rotate_speed
|
|
|
|
|
self.cutting_tool_change_time = self.specification_id.tool_changing_time
|
|
|
|
|
self.cutting_tool_total_length = self.specification_id.total_length
|
|
|
|
|
self.cutting_tool_clamping_diameter_max = self.specification_id.max_clamping_diameter
|
|
|
|
|
self.cutting_tool_clamping_diameter_min = self.specification_id.min_clamping_diameter
|
|
|
|
|
self.cutting_tool_flange_length = self.specification_id.flange_shank_length
|
|
|
|
|
self.cutting_tool_shank_outer_diameter = self.specification_id.handle_external_diameter
|
|
|
|
|
self.cutting_tool_shank_inner_diameter = self.specification_id.handle_inside_diameter
|
|
|
|
|
self.cutting_tool_flange_diameter = self.specification_id.flange_diameter
|
|
|
|
|
self.cutting_tool_fit_chuck_size = self.specification_id.fit_chuck_size
|
|
|
|
|
self.cutting_tool_dynamic_balance_class = self.specification_id.dynamic_balance_class
|
|
|
|
|
self.cutting_tool_is_high_speed_cutting = self.specification_id.is_quick_cutting
|
|
|
|
|
self.cutting_tool_is_safety_lock = self.specification_id.is_safe_lock
|
|
|
|
|
self.cutting_tool_fit_nut_model = self.specification_id.nut
|
|
|
|
|
self.cutting_tool_wrench = self.specification_id.spanner
|
|
|
|
|
self.cutting_tool_chuck_id = self.specification_id.chuck_id.id
|
|
|
|
|
self.cutting_tool_jump_accuracy = self.specification_id.diameter_slip_accuracy
|
|
|
|
|
self.cutting_tool_taper_shank_model = self.specification_id.taper_shank_model
|
|
|
|
|
self.suitable_machining_method_ids = [(6, 0, [])] if not \
|
|
|
|
|
self.cutting_tool_model_id.suitable_machining_method_ids \
|
|
|
|
|
else [(6, 0, self.cutting_tool_model_id.suitable_machining_method_ids.ids)]
|
|
|
|
|
@@ -350,12 +364,12 @@ class ResProductMo(models.Model):
|
|
|
|
|
raise ValidationError("请选择压紧方式")
|
|
|
|
|
if self.cutting_tool_type == '刀片':
|
|
|
|
|
if not self.suitable_coolant_ids:
|
|
|
|
|
raise ValidationError("请选择适合冷却液")
|
|
|
|
|
raise ValidationError("请选择适合冷却方式")
|
|
|
|
|
elif self.cutting_tool_type == '整体式刀具':
|
|
|
|
|
if not self.handle_type_id:
|
|
|
|
|
raise ValidationError("请选择柄部类型")
|
|
|
|
|
if not self.suitable_coolant_ids:
|
|
|
|
|
raise ValidationError("请选择适合冷却液")
|
|
|
|
|
raise ValidationError("请选择适合冷却方式")
|
|
|
|
|
if not self.suitable_machining_method_ids:
|
|
|
|
|
raise ValidationError("请选择适合加工方式")
|
|
|
|
|
if not self.blade_tip_characteristics_id:
|
|
|
|
|
@@ -369,11 +383,8 @@ class ResProductMo(models.Model):
|
|
|
|
|
cutting_tool_rear_angle = fields.Integer('后角(°)')
|
|
|
|
|
cutting_tool_main_included_angle = fields.Integer('主偏角(°)')
|
|
|
|
|
# 适用夹头型号可以多选
|
|
|
|
|
cutting_tool_chuck_ids = fields.Many2many(
|
|
|
|
|
cutting_tool_chuck_id = fields.Many2one(
|
|
|
|
|
'sf.cutting_tool.standard.library',
|
|
|
|
|
relation='product_cutting_tool_library_handle_chuck_rel',
|
|
|
|
|
column1='model_id_1',
|
|
|
|
|
column2='model_id_2',
|
|
|
|
|
domain="[('cutting_tool_type', '=', '夹头')]",
|
|
|
|
|
string='适用夹头型号')
|
|
|
|
|
# 刀片参数
|
|
|
|
|
@@ -384,6 +395,7 @@ class ResProductMo(models.Model):
|
|
|
|
|
cutting_tool_install_aperture_diameter = fields.Float('安装孔直径(mm)')
|
|
|
|
|
cutting_tool_chip_breaker_groove = fields.Selection([('无', '无'), ('单面', '单面'), ('双面', '双面')],
|
|
|
|
|
string='有无断屑槽')
|
|
|
|
|
cutting_tool_chip_breaker_type_code = fields.Char('断屑槽型代号')
|
|
|
|
|
cutting_tool_bladed_teeth_model = fields.Selection(
|
|
|
|
|
[('无', '无'), ('V牙型', 'V牙型'), ('米制全牙型', '米制全牙型'), ('美制全牙型', '美制全牙型'),
|
|
|
|
|
('惠氏全牙型', '惠氏全牙型'), ('BSPT全牙型', 'BSPT全牙型'), ('NPT全牙型', 'NPT全牙型'),
|
|
|
|
|
@@ -395,8 +407,6 @@ class ResProductMo(models.Model):
|
|
|
|
|
('7', '7'), ('8', '8'), ('9', '9'), ('10', '10')],
|
|
|
|
|
string='刀片的刃数(个)')
|
|
|
|
|
|
|
|
|
|
cutting_tool_blade_tip_dip_angle = fields.Integer('刀尖倾角(°)')
|
|
|
|
|
cutting_tool_side_cutting_edge_angle = fields.Integer('侧切削角(°)')
|
|
|
|
|
cutting_tool_thread_model = fields.Selection([('无', '无'), ('外螺纹', '外螺纹'), ('内螺纹', '内螺纹')],
|
|
|
|
|
string='螺纹类型')
|
|
|
|
|
cutting_tool_thread_num = fields.Float('每英寸螺纹数(tpi)')
|
|
|
|
|
@@ -431,11 +441,8 @@ class ResProductMo(models.Model):
|
|
|
|
|
cutting_tool_min_machining_aperture = fields.Integer('最小加工孔径(mm)')
|
|
|
|
|
cutting_tool_install_blade_tip_num = fields.Integer('可装刀片数/齿数(个)', size=20)
|
|
|
|
|
cutting_tool_installing_structure = fields.Char('安装结构', size=20)
|
|
|
|
|
cutting_tool_blade_ids = fields.Many2many(
|
|
|
|
|
cutting_tool_blade_id = fields.Many2one(
|
|
|
|
|
'sf.cutting_tool.standard.library',
|
|
|
|
|
relation='product_cutting_tool_library_pad_blade_rel',
|
|
|
|
|
column1='model_id_1',
|
|
|
|
|
column2='model_id_2',
|
|
|
|
|
domain="[('cutting_tool_type', '=', '刀片')]",
|
|
|
|
|
string='适用刀片型号' # 使用空列表作为默认值
|
|
|
|
|
)
|
|
|
|
|
@@ -451,24 +458,23 @@ class ResProductMo(models.Model):
|
|
|
|
|
cutting_tool_interface_diameter = fields.Float('接口直径(mm)')
|
|
|
|
|
|
|
|
|
|
# 刀柄参数
|
|
|
|
|
cutting_tool_shank_outer_diameter = fields.Float('柄部外径(mm)')
|
|
|
|
|
cutting_tool_shank_inner_diameter = fields.Float('柄部内径(mm)')
|
|
|
|
|
cutting_tool_clamping_length = fields.Float('夹持长度(mm)')
|
|
|
|
|
cutting_tool_clamping_tolerance = fields.Float('夹持公差(mm)')
|
|
|
|
|
cutting_tool_clamping_diameter_max = fields.Float('最大夹持直径')
|
|
|
|
|
cutting_tool_clamping_diameter_min = fields.Float('最小夹持直径')
|
|
|
|
|
cutting_tool_flange_length = fields.Float('法兰柄长(mm)')
|
|
|
|
|
cutting_tool_flange_diameter = fields.Float('法兰直径(mm)')
|
|
|
|
|
cutting_tool_is_rough_finish = fields.Boolean('可粗加工', default=False)
|
|
|
|
|
cutting_tool_is_finish = fields.Boolean('可精加工', default=False)
|
|
|
|
|
cutting_tool_is_drill_hole = fields.Boolean('可钻孔', default=False)
|
|
|
|
|
cutting_tool_is_safety_lock = fields.Boolean('有无安全锁', default=False)
|
|
|
|
|
cutting_tool_is_high_speed_cutting = fields.Boolean('可高速切削', default=False)
|
|
|
|
|
cutting_tool_change_time = fields.Integer('换刀时间(s)')
|
|
|
|
|
cutting_tool_clamping_way = fields.Char('夹持方式')
|
|
|
|
|
cutting_tool_fit_chuck_size = fields.Char('适配夹头尺寸')
|
|
|
|
|
cutting_tool_taper_shank_model = fields.Char('锥柄型号')
|
|
|
|
|
cutting_tool_standard_speed = fields.Integer('标准转速(n/min)')
|
|
|
|
|
cutting_tool_speed_max = fields.Integer('最大转速(n/min)')
|
|
|
|
|
cutting_tool_cooling_type = fields.Char('冷却类型')
|
|
|
|
|
cutting_tool_dynamic_balance_class = fields.Char('动平衡等级')
|
|
|
|
|
cutting_tool_fit_nut_model = fields.Char('适用锁紧螺母型号')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 夹头参数
|
|
|
|
|
cutting_tool_taper = fields.Integer('锥度(°)')
|
|
|
|
|
cutting_tool_top_diameter = fields.Float('顶部直径')
|
|
|
|
|
@@ -476,7 +482,7 @@ class ResProductMo(models.Model):
|
|
|
|
|
cutting_tool_inner_diameter = fields.Float('内径(mm)')
|
|
|
|
|
cooling_suit_type_ids = fields.Char('适用冷却套型号')
|
|
|
|
|
cutting_tool_max_load_capacity = fields.Float('最大负载能力(kg)')
|
|
|
|
|
cutting_tool_er_size_model = fields.Char('ER尺寸型号')
|
|
|
|
|
cutting_tool_er_size_model = fields.Char('尺寸型号')
|
|
|
|
|
cutting_tool_handle_ids = fields.Many2many(
|
|
|
|
|
'sf.cutting_tool.standard.library',
|
|
|
|
|
relation='product_cutting_tool_library_chuck_handle_rel',
|
|
|
|
|
@@ -547,12 +553,6 @@ class ResProductMo(models.Model):
|
|
|
|
|
code_arr.append(i.code)
|
|
|
|
|
return code_arr
|
|
|
|
|
|
|
|
|
|
def _json_chuck_item_code(self, item):
|
|
|
|
|
code_arr = []
|
|
|
|
|
for i in item.product_id.cutting_tool_chuck_ids:
|
|
|
|
|
code_arr.append(i.code)
|
|
|
|
|
return code_arr
|
|
|
|
|
|
|
|
|
|
def _json_cutter_bar_item_code(self, item):
|
|
|
|
|
code_arr = []
|
|
|
|
|
for i in item.product_id.cutting_tool_cutter_bar_ids:
|
|
|
|
|
@@ -565,12 +565,6 @@ class ResProductMo(models.Model):
|
|
|
|
|
code_arr.append(i.code)
|
|
|
|
|
return code_arr
|
|
|
|
|
|
|
|
|
|
def _json_blade_item_code(self, item):
|
|
|
|
|
code_arr = []
|
|
|
|
|
for i in item.product_id.cutting_tool_blade_ids:
|
|
|
|
|
code_arr.append(i.code)
|
|
|
|
|
return code_arr
|
|
|
|
|
|
|
|
|
|
def _json_handle_item_code(self, item):
|
|
|
|
|
code_arr = []
|
|
|
|
|
for i in item.product_id.cutting_tool_handle_ids:
|
|
|
|
|
@@ -603,7 +597,6 @@ class ResProductMo(models.Model):
|
|
|
|
|
for item in self:
|
|
|
|
|
if self.fixture_material_type in ['气动夹具', '转接板(锁板)夹具', '磁吸夹具', '虎钳夹具', '零点卡盘']:
|
|
|
|
|
item.brand_id = item.fixture_model_id.brand_id.id
|
|
|
|
|
item.fixture_multi_mounting_type_id = item.fixture_model_id.multi_mounting_type_id.id
|
|
|
|
|
item.fixture_model_file = item.fixture_model_id.model_file
|
|
|
|
|
item.tool_length = item.fixture_model_id.length
|
|
|
|
|
item.tool_width = item.fixture_model_id.width
|
|
|
|
|
|