Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改机床参数bug
# Conflicts: # sf_manufacturing/models/product_template.py
This commit is contained in:
@@ -243,3 +243,12 @@ class MaintenanceStandardImage(models.Model):
|
||||
else:
|
||||
record['image'] = ""
|
||||
return records
|
||||
|
||||
|
||||
class ToolGroups(models.Model):
|
||||
_name = 'sf.tool.groups'
|
||||
_description = '刀具组'
|
||||
|
||||
name = fields.Char('名称')
|
||||
equipment_ids = fields.Many2many('maintenance.equipment', 'ref_maintenance_equipment', string='机台号')
|
||||
remark = fields.Char('备注', size=50)
|
||||
|
||||
@@ -28,6 +28,7 @@ access_sf_sync_common,sf_sync_common,model_sf_sync_common,base.group_user,1,1,1,
|
||||
access_sf_international_standards,sf_international_standards,model_sf_international_standards,base.group_user,1,1,1,1
|
||||
access_material_apply,material_apply,model_material_apply,base.group_user,1,1,1,1
|
||||
access_sf_cutting_tool_standard_library,sf_cutting_tool_standard_library,model_sf_cutting_tool_standard_library,base.group_user,1,1,1,1
|
||||
access_sf_tool_groups,sf_tool_groups,model_sf_tool_groups,base.group_user,1,1,1,1
|
||||
access_sf_tool_materials_basic_parameters,sf_tool_materials_basic_parameters,model_sf_tool_materials_basic_parameters,base.group_user,1,1,1,1
|
||||
access_sf_cutting_speed,sf_cutting_speed,model_sf_cutting_speed,base.group_user,1,1,1,1
|
||||
access_sf_feed_per_tooth,sf_feed_per_tooth,model_sf_feed_per_tooth,base.group_user,1,1,1,1
|
||||
|
||||
|
@@ -92,5 +92,12 @@
|
||||
action="action_maintenance_equipment_image"
|
||||
sequence="5"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_sf_tool_groups"
|
||||
name="刀具组"
|
||||
parent="menu_sf_cutting_tool"
|
||||
action="sf_tool_groups_view_act"
|
||||
sequence="10"/>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -490,6 +490,28 @@
|
||||
<field name="domain">[]</field>
|
||||
</record>
|
||||
|
||||
<!-- ================================================刀具组================================================ -->
|
||||
<record id="sf_tool_groups_tree" model="ir.ui.view">
|
||||
<field name="name">刀具组</field>
|
||||
<field name="model">sf.tool.groups</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree create="1" edit="1" delete="1" editable="bottom">
|
||||
<field name="name"/>
|
||||
<field name="equipment_ids" widget="many2many_tags"/>
|
||||
<field name="remark"/>
|
||||
<field name="create_uid" string="创建人"/>
|
||||
<field name="create_date" string="创建时间"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_tool_groups_view_act" model="ir.actions.act_window">
|
||||
<field name="name">刀具组</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.tool.groups</field>
|
||||
<field name="view_mode">tree,form,search</field>
|
||||
</record>
|
||||
|
||||
<!-- ================================================刀具基础参数================================================ -->
|
||||
<!-- <record id="view_sf_tool_materials_basic_parameters_tree" model="ir.ui.view">-->
|
||||
<!-- <field name="name">sf.tool.materials.basic.parameters.tree</field>-->
|
||||
|
||||
@@ -201,7 +201,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
|
||||
@@ -227,14 +226,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
|
||||
@@ -256,15 +253,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_screw = self.specification_id.screw
|
||||
self.cutting_tool_wrench = self.specification_id.wrench
|
||||
self.cutting_tool_blade_id = self.specification_id.blade_id.id
|
||||
@@ -273,7 +267,6 @@ class ResProductMo(models.Model):
|
||||
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
|
||||
@@ -282,17 +275,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)]
|
||||
@@ -360,12 +363,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:
|
||||
@@ -379,11 +382,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='适用夹头型号')
|
||||
# 刀片参数
|
||||
@@ -394,6 +394,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全牙型'),
|
||||
@@ -405,8 +406,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)')
|
||||
@@ -441,11 +440,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='适用刀片型号' # 使用空列表作为默认值
|
||||
)
|
||||
@@ -461,24 +457,22 @@ 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('顶部直径')
|
||||
@@ -486,7 +480,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',
|
||||
@@ -496,28 +490,6 @@ class ResProductMo(models.Model):
|
||||
string='适用刀柄型号'
|
||||
)
|
||||
|
||||
# 夹具参数
|
||||
fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料")
|
||||
fixture_model_id = fields.Many2one('sf.fixture.model', string="夹具型号")
|
||||
fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name')
|
||||
fixture_multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型")
|
||||
fixture_clamping_way = fields.Char(string="装夹方式")
|
||||
fixture_port_type = fields.Char(string="接口类型")
|
||||
fixture_model_file = fields.Binary(string="3D模型图")
|
||||
|
||||
fixture_clamp_workpiece_length_max = fields.Integer(string="夹持工件长度max(mm)")
|
||||
fixture_clamp_workpiece_width_max = fields.Integer(string="夹持工件宽度max(mm)")
|
||||
fixture_clamp_workpiece_height_max = fields.Integer(string="夹持工件高度max(mm)")
|
||||
fixture_clamp_workpiece_diameter_max = fields.Float(string="夹持工件直径max(mm)", digits=(16, 6))
|
||||
|
||||
fixture_maximum_carrying_weight = fields.Float(string="最大承载重量(kg)", digits=(16, 4))
|
||||
fixture_maximum_clamping_force = fields.Integer(string="最大夹持力(n)")
|
||||
fixture_driving_way = fields.Char(string="驱动方式")
|
||||
fixture_apply_machine_tool_type_ids = fields.Many2many('sf.machine_tool.type', 'rel_product_machine_tool_type',
|
||||
string="适用机床型号")
|
||||
fixture_through_hole_size = fields.Integer(string="过孔大小(mm)")
|
||||
fixture_screw_size = fields.Integer(string="螺牙大小(mm)")
|
||||
|
||||
# 注册状态
|
||||
register_state = fields.Selection([('未注册', '未注册'), ('已注册', '已注册'), ('注册失败', '注册失败')],
|
||||
string='注册状态', default='未注册')
|
||||
@@ -579,12 +551,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:
|
||||
@@ -597,12 +563,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:
|
||||
@@ -630,35 +590,65 @@ class ResProductMo(models.Model):
|
||||
if item.fixture_material_id.id != item.fixture_model_id.fixture_material_id.id:
|
||||
item.fixture_model_id = False
|
||||
|
||||
@api.onchange('fixture_model_id')
|
||||
def _onchange_fixture_model_id(self):
|
||||
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
|
||||
item.tool_height = item.fixture_model_id.height
|
||||
item.tool_weight = item.fixture_model_id.weight
|
||||
item.materials_type_id = item.fixture_model_id.materials_model_id.id
|
||||
item.fixture_maximum_carrying_weight = item.fixture_model_id.maximum_carrying_weight
|
||||
item.fixture_maximum_clamping_force = item.fixture_model_id.maximum_clamping_force
|
||||
if self.fixture_material_type in ['零点卡盘', '转接板(锁板)夹具']:
|
||||
item.fixture_clamping_way = item.fixture_model_id.clamping_way
|
||||
item.fixture_port_type = item.fixture_model_id.port_type
|
||||
if self.fixture_material_type in ['气动夹具', '转接板(锁板)夹具', '磁吸夹具']:
|
||||
item.fixture_driving_way = item.fixture_model_id.driving_way
|
||||
if self.fixture_material_type in ['气动夹具', '磁吸夹具', '虎钳夹具', '零点卡盘']:
|
||||
item.fixture_through_hole_size = item.fixture_model_id.through_hole_size
|
||||
item.fixture_screw_size = item.fixture_model_id.screw_size
|
||||
if self.fixture_material_type in ['气动夹具', '转接板(锁板)夹具', '磁吸夹具', '虎钳夹具']:
|
||||
item.fixture_clamp_workpiece_length_max = item.fixture_model_id.clamp_workpiece_length_max
|
||||
item.fixture_clamp_workpiece_width_max = item.fixture_model_id.clamp_workpiece_width_max
|
||||
item.fixture_clamp_workpiece_height_max = item.fixture_model_id.clamp_workpiece_height_max
|
||||
item.fixture_clamp_workpiece_diameter_max = item.fixture_model_id.clamp_workpiece_diameter_max
|
||||
item.fixture_apply_machine_tool_type_ids = self._get_ids(
|
||||
item.fixture_model_id.apply_machine_tool_type_ids)
|
||||
#
|
||||
# @api.onchange('fixture_model_id')
|
||||
# def _onchange_fixture_model_id(self):
|
||||
# for item in self:
|
||||
# if self.fixture_material_type in ['气动夹具', '转接板(锁板)夹具', '磁吸夹具', '虎钳夹具', '零点卡盘']:
|
||||
# item.brand_id = item.fixture_model_id.brand_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
|
||||
# item.tool_height = item.fixture_model_id.height
|
||||
# item.tool_weight = item.fixture_model_id.weight
|
||||
# item.materials_type_id = item.fixture_model_id.materials_model_id.id
|
||||
# item.fixture_maximum_carrying_weight = item.fixture_model_id.maximum_carrying_weight
|
||||
# item.fixture_maximum_clamping_force = item.fixture_model_id.maximum_clamping_force
|
||||
# if self.fixture_material_type in ['零点卡盘', '转接板(锁板)夹具']:
|
||||
# item.fixture_clamping_way = item.fixture_model_id.clamping_way
|
||||
# item.fixture_port_type = item.fixture_model_id.port_type
|
||||
# if self.fixture_material_type in ['气动夹具', '转接板(锁板)夹具', '磁吸夹具']:
|
||||
# item.fixture_driving_way = item.fixture_model_id.driving_way
|
||||
# if self.fixture_material_type in ['气动夹具', '磁吸夹具', '虎钳夹具', '零点卡盘']:
|
||||
# item.fixture_through_hole_size = item.fixture_model_id.through_hole_size
|
||||
# item.fixture_screw_size = item.fixture_model_id.screw_size
|
||||
# if self.fixture_material_type in ['气动夹具', '转接板(锁板)夹具', '磁吸夹具', '虎钳夹具']:
|
||||
# item.fixture_clamp_workpiece_length_max = item.fixture_model_id.clamp_workpiece_length_max
|
||||
# item.fixture_clamp_workpiece_width_max = item.fixture_model_id.clamp_workpiece_width_max
|
||||
# item.fixture_clamp_workpiece_height_max = item.fixture_model_id.clamp_workpiece_height_max
|
||||
# item.fixture_clamp_workpiece_diameter_max = item.fixture_model_id.clamp_workpiece_diameter_max
|
||||
# item.fixture_apply_machine_tool_type_ids = self._get_ids(
|
||||
# item.fixture_model_id.apply_machine_tool_type_ids)
|
||||
|
||||
# @api.onchange('fixture_model_id')
|
||||
# def _onchange_fixture_model_id(self):
|
||||
# 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
|
||||
# item.tool_height = item.fixture_model_id.height
|
||||
# item.tool_weight = item.fixture_model_id.weight
|
||||
# item.materials_type_id = item.fixture_model_id.materials_model_id.id
|
||||
# item.fixture_maximum_carrying_weight = item.fixture_model_id.maximum_carrying_weight
|
||||
# item.fixture_maximum_clamping_force = item.fixture_model_id.maximum_clamping_force
|
||||
# if self.fixture_material_type in ['零点卡盘', '转接板(锁板)夹具']:
|
||||
# item.fixture_clamping_way = item.fixture_model_id.clamping_way
|
||||
# item.fixture_port_type = item.fixture_model_id.port_type
|
||||
# if self.fixture_material_type in ['气动夹具', '转接板(锁板)夹具', '磁吸夹具']:
|
||||
# item.fixture_driving_way = item.fixture_model_id.driving_way
|
||||
# if self.fixture_material_type in ['气动夹具', '磁吸夹具', '虎钳夹具', '零点卡盘']:
|
||||
# item.fixture_through_hole_size = item.fixture_model_id.through_hole_size
|
||||
# item.fixture_screw_size = item.fixture_model_id.screw_size
|
||||
# if self.fixture_material_type in ['气动夹具', '转接板(锁板)夹具', '磁吸夹具', '虎钳夹具']:
|
||||
# item.fixture_clamp_workpiece_length_max = item.fixture_model_id.clamp_workpiece_length_max
|
||||
# item.fixture_clamp_workpiece_width_max = item.fixture_model_id.clamp_workpiece_width_max
|
||||
# item.fixture_clamp_workpiece_height_max = item.fixture_model_id.clamp_workpiece_height_max
|
||||
# item.fixture_clamp_workpiece_diameter_max = item.fixture_model_id.clamp_workpiece_diameter_max
|
||||
# item.fixture_apply_machine_tool_type_ids = self._get_ids(
|
||||
# item.fixture_model_id.apply_machine_tool_type_ids)
|
||||
|
||||
def _get_volume_uom_id_from_ir_config_parameter(self):
|
||||
product_length_in_feet_param = self.env['ir.config_parameter'].sudo().get_param('product.volume_in_cubic_feet')
|
||||
@@ -836,6 +826,145 @@ class ResProductMo(models.Model):
|
||||
return base64_data
|
||||
|
||||
|
||||
class ResProductFixture(models.Model):
|
||||
_inherit = 'product.template'
|
||||
_description = '夹具产品信息'
|
||||
|
||||
fixture_model_id = fields.Many2one('sf.fixture.model', '夹具型号')
|
||||
specification_fixture_id = fields.Many2one('sf.fixture.materials.basic.parameters', '夹具规格')
|
||||
|
||||
fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料", required=True)
|
||||
fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name')
|
||||
multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型", required=True)
|
||||
model_file = fields.Binary(string="3D模型图")
|
||||
|
||||
# 夹具物料基本参数
|
||||
# length = fields.Float('长度(mm)', digits=(16, 2))
|
||||
# width = fields.Float('宽度(mm)', digits=(16, 2))
|
||||
# height = fields.Float('高度(mm)', digits=(16, 2))
|
||||
diameter = fields.Float('直径(mm)', digits=(16, 2))
|
||||
|
||||
# '零点卡盘' 字段
|
||||
weight = fields.Float('重量(mm)', digits=(16, 2))
|
||||
orientation_dish_diameter = fields.Float('定位盘直径(mm)', digits=(16, 2))
|
||||
clamping_diameter = fields.Float('装夹直径(mm)', digits=(16, 2))
|
||||
clamping_num = fields.Selection([('1', '1'), ('2', '2'), ('4', '4'), ('6', '6'), ('8', '8')], string='装夹单元数')
|
||||
chucking_power_max = fields.Float('最大夹持力(KN)', digits=(16, 2))
|
||||
repeated_positioning_accuracy = fields.Char('重复定位精度(mm)', size=20)
|
||||
boolean_transposing_hole = fields.Boolean('是否有转位孔')
|
||||
unlocking_method = fields.Selection(
|
||||
[('手动', '手动'), ('气动', '气动'), ('液压', '液压'), ('电动', '电动'), ('其他', '其他')], string='解锁方式')
|
||||
boolean_chip_blowing_function = fields.Boolean('是否有吹屑功能')
|
||||
carrying_capacity_max = fields.Float('最大承载重量(kg)', digits=(16, 2))
|
||||
rigidity = fields.Integer('硬度HRC')
|
||||
materials_model_id = fields.Many2one('sf.materials.model', '夹具材质')
|
||||
machine_tool_type_id = fields.Many2one('sf.machine_tool.type', '适用机床型号')
|
||||
|
||||
# ’零点托盘‘ 字段
|
||||
connector_diameter = fields.Selection([('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('6', '6'), ('8', '8')],
|
||||
string='连接头直径(mm)')
|
||||
way_to_install = fields.Selection(
|
||||
[('接口式', '接口式'), ('螺栓固定', '螺栓固定'), ('磁吸式', '磁吸式'), ('其他', '其他')], string='安装方式')
|
||||
type_of_drive = fields.Selection(
|
||||
[('气动式', '气动式'), ('液压式', '液压式'), ('机械式', '机械式'), ('电动式', '电动式'), ('其他', '其他')],
|
||||
string='驱动方式')
|
||||
|
||||
# ’气动夹具‘ 字段
|
||||
gripper_length_min = fields.Float('夹持工件最小长度(mm)', digits=(16, 2))
|
||||
gripper_width_min = fields.Float('夹持工件最小宽度(mm)', digits=(16, 2))
|
||||
gripper_height_min = fields.Float('夹持工件最小高度(mm)', digits=(16, 2))
|
||||
gripper_diameter_min = fields.Float('夹持工件最小直径(mm)', digits=(16, 2))
|
||||
gripper_length_max = fields.Float('夹持工件最大长度(mm)', digits=(16, 2))
|
||||
gripper_width_max = fields.Float('夹持工件最大宽度(mm)', digits=(16, 2))
|
||||
gripper_height_max = fields.Float('夹持工件最大高度(mm)', digits=(16, 2))
|
||||
gripper_diameter_max = fields.Float('夹持工件最大直径(mm)', digits=(16, 2))
|
||||
rated_air_pressure = fields.Float('额定气压(Mpa)', digits=(16, 2))
|
||||
interface_materials_model_id = fields.Many2one('sf.materials.model', '接口类型')
|
||||
|
||||
# ‘虎钳夹具' 字段
|
||||
transverse_groove = fields.Float('横向配合槽n(mm)', digits=(16, 2))
|
||||
longitudinal_fitting_groove = fields.Float('纵向配合槽l(mm)', digits=(16, 2))
|
||||
|
||||
# '磁吸夹具' 字段
|
||||
height_tolerance_value = fields.Char('高度公差(mm)')
|
||||
rated_adsorption_force = fields.Float('额定吸附力(N/cm²)', digits=(16, 2))
|
||||
magnetic_field_height = fields.Float('磁场高度(mm)', digits=(16, 2))
|
||||
magnetic_pole_plate_grinding_allowance = fields.Float('磁极板磨削余量(mm)', digits=(16, 2))
|
||||
|
||||
# '转接板(锁板)夹具' 字段
|
||||
screw_size = fields.Float('螺牙大小(mm)', digits=(16, 2))
|
||||
via_hole_diameter = fields.Float('过孔直径(mm)', digits=(16, 2))
|
||||
|
||||
# '三爪卡盘' 字段
|
||||
mounting_hole_depth = fields.Float('安装孔深度(mm)', digits=(16, 2))
|
||||
centering_diameter = fields.Float('定心直径(mm)', digits=(16, 2))
|
||||
|
||||
# =========================待删除字段================================
|
||||
fixture_multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型")
|
||||
fixture_clamping_way = fields.Char(string="装夹方式")
|
||||
fixture_port_type = fields.Char(string="接口类型")
|
||||
fixture_model_file = fields.Binary(string="3D模型图")
|
||||
|
||||
fixture_clamp_workpiece_length_max = fields.Integer(string="夹持工件长度max(mm)")
|
||||
fixture_clamp_workpiece_width_max = fields.Integer(string="夹持工件宽度max(mm)")
|
||||
fixture_clamp_workpiece_height_max = fields.Integer(string="夹持工件高度max(mm)")
|
||||
fixture_clamp_workpiece_diameter_max = fields.Float(string="夹持工件直径max(mm)", digits=(16, 6))
|
||||
|
||||
fixture_maximum_carrying_weight = fields.Float(string="最大承载重量(kg)", digits=(16, 4))
|
||||
fixture_maximum_clamping_force = fields.Integer(string="最大夹持力(n)")
|
||||
fixture_driving_way = fields.Char(string="驱动方式")
|
||||
fixture_apply_machine_tool_type_ids = fields.Many2many('sf.machine_tool.type', 'rel_product_machine_tool_type',
|
||||
string="适用机床型号")
|
||||
fixture_through_hole_size = fields.Integer(string="过孔大小(mm)")
|
||||
fixture_screw_size = fields.Integer(string="螺牙大小(mm)")
|
||||
|
||||
# ===============================================================
|
||||
|
||||
@api.onchange('specification_fixture_id')
|
||||
def _onchange_specification_fixture_id(self):
|
||||
if self.specification_fixture_id:
|
||||
self.length = self.specification_fixture_id.length
|
||||
self.width = self.specification_fixture_id.width
|
||||
self.height = self.specification_fixture_id.height
|
||||
self.weight = self.specification_fixture_id.weight
|
||||
self.diameter = self.specification_fixture_id.diameter
|
||||
self.orientation_dish_diameter = self.specification_fixture_id.orientation_dish_diameter
|
||||
self.clamping_diameter = self.specification_fixture_id.clamping_diameter
|
||||
self.clamping_num = self.specification_fixture_id.clamping_num
|
||||
self.chucking_power_max = self.specification_fixture_id.chucking_power_max
|
||||
self.repeated_positioning_accuracy = self.specification_fixture_id.repeated_positioning_accuracy
|
||||
self.boolean_transposing_hole = self.specification_fixture_id.boolean_transposing_hole
|
||||
self.unlocking_method = self.specification_fixture_id.unlocking_method
|
||||
self.boolean_chip_blowing_function = self.specification_fixture_id.boolean_chip_blowing_function
|
||||
self.carrying_capacity_max = self.specification_fixture_id.carrying_capacity_max
|
||||
self.rigidity = self.specification_fixture_id.rigidity
|
||||
self.materials_model_id = self.specification_fixture_id.materials_model_id
|
||||
self.machine_tool_type_id = self.specification_fixture_id.machine_tool_type_id
|
||||
self.connector_diameter = self.specification_fixture_id.connector_diameter
|
||||
self.way_to_install = self.specification_fixture_id.way_to_install
|
||||
self.type_of_drive = self.specification_fixture_id.type_of_drive
|
||||
self.gripper_length_min = self.specification_fixture_id.gripper_length_min
|
||||
self.gripper_width_min = self.specification_fixture_id.gripper_width_min
|
||||
self.gripper_height_min = self.specification_fixture_id.gripper_height_min
|
||||
self.gripper_diameter_min = self.specification_fixture_id.gripper_diameter_min
|
||||
self.gripper_length_max = self.specification_fixture_id.gripper_length_max
|
||||
self.gripper_width_max = self.specification_fixture_id.gripper_width_max
|
||||
self.gripper_height_max = self.specification_fixture_id.gripper_height_max
|
||||
self.gripper_diameter_max = self.specification_fixture_id.gripper_diameter_max
|
||||
self.rated_air_pressure = self.specification_fixture_id.rated_air_pressure
|
||||
self.interface_materials_model_id = self.specification_fixture_id.interface_materials_model_id
|
||||
self.transverse_groove = self.specification_fixture_id.transverse_groove
|
||||
self.longitudinal_fitting_groove = self.specification_fixture_id.longitudinal_fitting_groove
|
||||
self.height_tolerance_value = self.specification_fixture_id.height_tolerance_value
|
||||
self.rated_adsorption_force = self.specification_fixture_id.rated_adsorption_force
|
||||
self.magnetic_field_height = self.specification_fixture_id.magnetic_field_height
|
||||
self.magnetic_pole_plate_grinding_allowance = self.specification_fixture_id.magnetic_pole_plate_grinding_allowance
|
||||
self.screw_size = self.specification_fixture_id.screw_size
|
||||
self.via_hole_diameter = self.specification_fixture_id.via_hole_diameter
|
||||
self.mounting_hole_depth = self.specification_fixture_id.mounting_hole_depth
|
||||
self.centering_diameter = self.specification_fixture_id.centering_diameter
|
||||
|
||||
|
||||
class SfMaintenanceEquipmentAndProductTemplate(models.Model):
|
||||
_inherit = 'maintenance.equipment'
|
||||
_description = '设备'
|
||||
|
||||
@@ -10,7 +10,8 @@ class FunctionalCuttingToolEntity(models.Model):
|
||||
_name = 'sf.functional.cutting.tool.entity'
|
||||
_description = '功能刀具列表'
|
||||
|
||||
# code = fields.Char('序列号')
|
||||
tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', related='functional_tool_name_id.tool_groups_id')
|
||||
code = fields.Char('编码', related='functional_tool_name_id.code')
|
||||
name = fields.Char(related='functional_tool_name_id.name')
|
||||
functional_tool_name_id = fields.Many2one('sf.functional.tool.assembly', string='功能刀具名称', readonly=True)
|
||||
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True)
|
||||
@@ -175,6 +176,8 @@ class FunctionalToolWarning(models.Model):
|
||||
_name = 'sf.functional.tool.warning'
|
||||
_description = '功能刀具预警'
|
||||
|
||||
code = fields.Char('编码', related='functional_tool_name_id.code')
|
||||
tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', related='functional_tool_name_id.tool_groups_id')
|
||||
name = fields.Char('名称', invisible=True, readonly=True, related='functional_tool_name_id.name')
|
||||
# 机床信息
|
||||
production_line_id = fields.Many2one('sf.production.line', string='生产线',
|
||||
@@ -243,6 +246,8 @@ class StockMoveLine(models.Model):
|
||||
diameter = fields.Integer(string='刀具直径(mm)', related='functional_tool_name_id.functional_tool_diameter')
|
||||
knife_tip_r_angle = fields.Float(string='刀尖R角(mm)', related='functional_tool_name_id.knife_tip_r_angle')
|
||||
install_tool_time = fields.Datetime("刀具组装时间", related='functional_tool_name_id.tool_loading_time')
|
||||
code = fields.Char('编码', related='functional_tool_name_id.code')
|
||||
tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', related='functional_tool_name_id.tool_groups_id')
|
||||
|
||||
@api.model
|
||||
def _read_group_functional_tool_type_id(self, categories, domain, order):
|
||||
@@ -254,7 +259,8 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
|
||||
_name = 'sf.real.time.distribution.of.functional.tools'
|
||||
_description = '功能刀具安全库存'
|
||||
|
||||
name = fields.Char('功能刀具名称', readonly=False)
|
||||
name = fields.Char('功能刀具名称', readonly=True, compute='_compute_name')
|
||||
tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', readonly=False, required=True)
|
||||
sf_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=False,
|
||||
group_expand='_read_mrs_cutting_tool_type_ids', store=True)
|
||||
diameter = fields.Integer(string='刀具直径(mm)', readonly=False)
|
||||
@@ -297,6 +303,14 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
|
||||
sf_functional_tool_assembly_ids = fields.Many2many('sf.functional.tool.assembly', 'sf_functional_tool_assembly_ref',
|
||||
'功能刀具组装单', readonly=True)
|
||||
|
||||
@api.depends('tool_groups_id', 'diameter', 'knife_tip_r_angle')
|
||||
def _compute_name(self):
|
||||
for obj in self:
|
||||
if obj.tool_groups_id:
|
||||
obj.name = '%s-D%sR%s' % (obj.tool_groups_id.name, obj.diameter, obj.knife_tip_r_angle)
|
||||
else:
|
||||
obj.name = None
|
||||
|
||||
@api.constrains('min_stock_num', 'max_stock_num')
|
||||
def _check_stock_num(self):
|
||||
for obj in self:
|
||||
@@ -341,6 +355,7 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
|
||||
functional_tool_assembly = tool.env['sf.functional.tool.assembly'].sudo().create({
|
||||
'functional_tool_name': tool.name,
|
||||
'functional_tool_type_id': tool.sf_cutting_tool_type_id.id,
|
||||
'tool_groups_id': tool.tool_groups_id.id,
|
||||
'functional_tool_diameter': tool.diameter,
|
||||
'knife_tip_r_angle': tool.knife_tip_r_angle,
|
||||
'coarse_middle_thin': tool.coarse_middle_thin,
|
||||
@@ -421,6 +436,8 @@ class MachineTableToolChangingApply(models.Model):
|
||||
cutter_spacing_code_id = fields.Many2one('maintenance.equipment.tool', string='刀位号', readonly=True,
|
||||
required=True, domain="[('equipment_id', '=', maintenance_equipment_id)]")
|
||||
# 功能刀具信息
|
||||
code = fields.Char('编码', related='functional_tool_name_id.code')
|
||||
tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', related='functional_tool_name_id.tool_groups_id')
|
||||
functional_tool_name = fields.Char(string='刀具名称', related='functional_tool_name_id.name', store=True)
|
||||
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', store=True,
|
||||
domain=[('product_id.name', '=', '功能刀具')],
|
||||
@@ -677,8 +694,10 @@ class FunctionalToolAssembly(models.Model):
|
||||
for obj in self:
|
||||
obj.name = obj.after_assembly_functional_tool_name
|
||||
|
||||
code = fields.Char('功能刀具编码', readonly=True)
|
||||
tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', readonly=True)
|
||||
name = fields.Char(string='名称', readonly=True, compute='_compute_name')
|
||||
assembly_order_code = fields.Char(string='编码', readonly=True)
|
||||
assembly_order_code = fields.Char(string='组装单编码', readonly=True)
|
||||
|
||||
functional_tool_name_id = fields.Many2one('product.product', string='功能刀具', readonly=True)
|
||||
functional_tool_name = fields.Char(string='功能刀具名称', readonly=True)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
<field name="barcode_id"/>
|
||||
<field name="functional_tool_name_id"/>
|
||||
<field name="image" widget='image'/>
|
||||
<field name="tool_groups_id"/>
|
||||
<field name="functional_tool_diameter"/>
|
||||
<field name="knife_tip_r_angle"/>
|
||||
<field name="coarse_middle_thin" optional="hide"/>
|
||||
@@ -80,9 +81,11 @@
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="code" readonly="1"/>
|
||||
<field name="functional_tool_name_id" invisible="False"
|
||||
placeholder="请输入20字以内的名称"/>
|
||||
<field name="sf_cutting_tool_type_id"/>
|
||||
<field name="tool_groups_id"/>
|
||||
<field name="cutting_tool_integral_model_id"
|
||||
options="{'no_create': True, 'no_quick_create': True}"
|
||||
attrs="{'invisible': [('cutting_tool_blade_model_id', '!=', False)]}"
|
||||
@@ -287,6 +290,7 @@
|
||||
<tree create="1" edit="1" delete="0">
|
||||
<field name="name"/>
|
||||
<field name="sf_cutting_tool_type_id" invisible="True"/>
|
||||
<field name="tool_groups_id"/>
|
||||
<field name="diameter"/>
|
||||
<field name="knife_tip_r_angle"/>
|
||||
<field name="coarse_middle_thin"/>
|
||||
@@ -310,7 +314,7 @@
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="name" attrs="{'readonly': [('status_create', '=', False)]}"/>
|
||||
<field name="name"/>
|
||||
</h1>
|
||||
</div>
|
||||
<field name="status_create" invisible="1"/>
|
||||
@@ -318,6 +322,8 @@
|
||||
<group>
|
||||
<field name="sf_cutting_tool_type_id"
|
||||
attrs="{'readonly': [('status_create', '=', False)]}"/>
|
||||
<field name="tool_groups_id"
|
||||
attrs="{'readonly': [('status_create', '=', False)]}"/>
|
||||
<field name="diameter"
|
||||
attrs="{'readonly': [('status_create', '=', False)]}"/>
|
||||
<field name="knife_tip_r_angle"
|
||||
@@ -487,11 +493,13 @@
|
||||
<field name="arch" type="xml">
|
||||
<tree create="0" delete="0">
|
||||
<field name="name" invisible="1"/>
|
||||
<field name="code" invisible="1"/>
|
||||
<field name="production_line_id" invisible="1"/>
|
||||
<field name="maintenance_equipment_id" invisible="1"/>
|
||||
<field name="machine_tool_code"/>
|
||||
<field name="cutter_spacing_code_id"/>
|
||||
<field name="functional_tool_name_id"/>
|
||||
<field name="tool_groups_id"/>
|
||||
<field name="diameter"/>
|
||||
<field name="knife_tip_r_angle"/>
|
||||
<field name="max_lifetime_value"/>
|
||||
@@ -513,6 +521,8 @@
|
||||
name="%(sf_tool_management.sf_tool_change_requirement_information_act)d"
|
||||
type="action"
|
||||
context="{ 'default_name':name,
|
||||
'default_code':code,
|
||||
'default_tool_groups_id':tool_groups_id,
|
||||
'default_production_line_id': production_line_id,
|
||||
'default_maintenance_equipment_id': maintenance_equipment_id,
|
||||
'default_machine_table_type_id': machine_table_type_id,
|
||||
@@ -548,6 +558,8 @@
|
||||
name="%(sf_tool_management.sf_tool_transfer_request_information_act)d"
|
||||
type="action"
|
||||
context="{ 'default_name':name,
|
||||
'default_code':code,
|
||||
'default_tool_groups_id':tool_groups_id,
|
||||
'default_production_line_id': production_line_id,
|
||||
'default_maintenance_equipment_id': maintenance_equipment_id,
|
||||
'default_machine_table_type_id': machine_table_type_id,
|
||||
@@ -587,6 +599,8 @@
|
||||
name="%(sf_tool_management.sf_tool_change_requirement_information_act)d"
|
||||
type="action"
|
||||
context="{ 'default_name':name,
|
||||
'default_code':code,
|
||||
'default_tool_groups_id':tool_groups_id,
|
||||
'default_production_line_id': production_line_id,
|
||||
'default_maintenance_equipment_id': maintenance_equipment_id,
|
||||
'default_machine_table_type_id': machine_table_type_id,
|
||||
@@ -673,9 +687,11 @@
|
||||
<group>
|
||||
<group>
|
||||
<field name="barcode_id"/>
|
||||
<field name="code"/>
|
||||
<field name="functional_tool_name_id"
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="functional_tool_type_id"/>
|
||||
<field name="tool_groups_id"/>
|
||||
<field name="diameter"/>
|
||||
<field name="knife_tip_r_angle"/>
|
||||
</group>
|
||||
@@ -856,7 +872,9 @@
|
||||
<tree create="0" delete="0">
|
||||
<field name="assembly_order_code"/>
|
||||
<field name="barcode_id" optional="hide"/>
|
||||
<field name="code" optional="hide"/>
|
||||
<field name="functional_tool_name"/>
|
||||
<field name="tool_groups_id"/>
|
||||
<field name="functional_tool_diameter" string="刀具直径"/>
|
||||
<field name="knife_tip_r_angle"/>
|
||||
<field name="coarse_middle_thin" optional="hide"/>
|
||||
@@ -878,7 +896,7 @@
|
||||
<field name="whether_standard_knife" invisible="True"/>
|
||||
<field name="reason_for_applying" invisible="True"/>
|
||||
<field name="functional_tool_type_id" invisible="True"/>
|
||||
<!-- <field name="functional_tool_cutting_type" invisible="True"/>-->
|
||||
<!-- <field name="functional_tool_cutting_type" invisible="True"/>-->
|
||||
|
||||
<button string="组装"
|
||||
name="%(sf_tool_management.sf_functional_tool_assembly_order_act)d"
|
||||
@@ -890,6 +908,7 @@
|
||||
'default_cutter_spacing_code_id':cutter_spacing_code_id,
|
||||
'default_functional_tool_name':functional_tool_name,
|
||||
'default_functional_tool_type_id':functional_tool_type_id,
|
||||
'default_tool_groups_id': tool_groups_id,
|
||||
'default_functional_tool_diameter':functional_tool_diameter,
|
||||
'default_knife_tip_r_angle':knife_tip_r_angle,
|
||||
'default_tool_loading_length':tool_loading_length,
|
||||
@@ -926,6 +945,7 @@
|
||||
'default_cutter_spacing_code_id':cutter_spacing_code_id,
|
||||
'default_functional_tool_name':functional_tool_name,
|
||||
'default_functional_tool_type_id':functional_tool_type_id,
|
||||
'default_tool_groups_id': tool_groups_id,
|
||||
'default_functional_tool_diameter':functional_tool_diameter,
|
||||
'default_knife_tip_r_angle':knife_tip_r_angle,
|
||||
'default_tool_loading_length':tool_loading_length,
|
||||
@@ -976,17 +996,22 @@
|
||||
<group>
|
||||
<group>
|
||||
<field name="barcode_id"/>
|
||||
<field name="code"/>
|
||||
<field name="after_assembly_functional_tool_name"
|
||||
string="功能刀具名称"/>
|
||||
<field name="after_assembly_functional_tool_type_id"
|
||||
string="功能刀具类型"/>
|
||||
<field name="tool_groups_id"/>
|
||||
<field name="after_assembly_functional_tool_diameter"
|
||||
string="刀具直径(mm)"/>
|
||||
<field name="after_assembly_knife_tip_r_angle" string="刀尖R角(mm)"/>
|
||||
<field name="after_assembly_new_former" string="新/旧"/>
|
||||
<field name="cut_time"/>
|
||||
<field name="cut_length"/>
|
||||
<field name="cut_number"/>
|
||||
<field name="cut_time"
|
||||
attrs="{'invisible': [('after_assembly_new_former', '=', '0')]}"/>
|
||||
<field name="cut_length"
|
||||
attrs="{'invisible': [('after_assembly_new_former', '=', '0')]}"/>
|
||||
<field name="cut_number"
|
||||
attrs="{'invisible': [('after_assembly_new_former', '=', '0')]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="after_assembly_whether_standard_knife"
|
||||
@@ -1102,6 +1127,7 @@
|
||||
<group>
|
||||
<field name="functional_tool_name"/>
|
||||
<field name="functional_tool_type_id"/>
|
||||
<field name="tool_groups_id"/>
|
||||
<field name="functional_tool_diameter" string="刀具直径(mm)"/>
|
||||
<field name="knife_tip_r_angle"/>
|
||||
<field name="tool_loading_length" string="总长度(mm)"/>
|
||||
@@ -1114,7 +1140,7 @@
|
||||
<field name="new_former"/>
|
||||
<field name="use_tool_time"/>
|
||||
<field name="reason_for_applying"/>
|
||||
<!-- <field name="functional_tool_cutting_type"/>-->
|
||||
<!-- <field name="functional_tool_cutting_type"/>-->
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
|
||||
@@ -8,6 +8,8 @@ class ToolChangeRequirementInformation(models.TransientModel):
|
||||
_name = 'sf.tool.change.requirement.information'
|
||||
_description = '换刀需求信息'
|
||||
|
||||
code = fields.Char('编码', readonly=True)
|
||||
tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', readonly=True)
|
||||
name = fields.Char('名称', related='maintenance_equipment_id.name', store=True, readonly=True)
|
||||
maintenance_equipment_id = fields.Many2one('maintenance.equipment', string='CNC机床', readonly=True)
|
||||
production_line_id = fields.Many2one('sf.production.line', string='生产线', readonly=True)
|
||||
@@ -32,7 +34,7 @@ class ToolChangeRequirementInformation(models.TransientModel):
|
||||
effective_length = fields.Float(string='有效长(mm)', readonly=True)
|
||||
|
||||
# 待换功能刀具信息
|
||||
replacement_tool_name = fields.Char(string='待换功能刀具名称', required=True)
|
||||
replacement_tool_name = fields.Char(string='待换功能刀具名称', compute='_compute_name')
|
||||
replacement_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='待换功能刀具类型')
|
||||
replacement_diameter = fields.Integer(string='待换刀具直径(mm)')
|
||||
replacement_knife_tip_r_angle = fields.Float(string='待换刀具刀尖R角(mm)', requride=True)
|
||||
@@ -52,6 +54,16 @@ class ToolChangeRequirementInformation(models.TransientModel):
|
||||
applicant = fields.Char(string='申请人', default=lambda self: self.env.user.name, readonly=True)
|
||||
reason_for_applying = fields.Char(string='申请原因')
|
||||
|
||||
@api.depends('replacement_diameter', 'replacement_knife_tip_r_angle', 'tool_groups_id')
|
||||
def _compute_name(self):
|
||||
for obj in self:
|
||||
if obj.tool_groups_id:
|
||||
obj.replacement_tool_name = '%s-D%sR%s' % (
|
||||
obj.tool_groups_id.name, obj.replacement_diameter,
|
||||
obj.replacement_knife_tip_r_angle)
|
||||
else:
|
||||
obj.replacement_tool_name = None
|
||||
|
||||
@api.constrains('replacement_knife_tip_r_angle', 'replacement_diameter', 'replacement_tool_coarse_middle_thin',
|
||||
'new_former')
|
||||
def _check_length_or_diamenter(self):
|
||||
@@ -90,6 +102,7 @@ class ToolChangeRequirementInformation(models.TransientModel):
|
||||
# 功能刀具组装创建新任务(new_assembly_task)
|
||||
sf_functional_tool_assembly = self.env['sf.functional.tool.assembly'].sudo().create({
|
||||
'functional_tool_name': self.replacement_tool_name,
|
||||
'tool_groups_id': self.tool_groups_id.id,
|
||||
'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,
|
||||
@@ -175,7 +188,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
_inherit = ["barcodes.barcode_events_mixin"]
|
||||
_description = '功能刀具组装单'
|
||||
|
||||
assembly_order_code = fields.Char(string='编码', readonly=True)
|
||||
assembly_order_code = fields.Char(string='组装单编码', readonly=True)
|
||||
tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', readonly=True)
|
||||
functional_tool_name_id = fields.Many2one('product.product', string='功能刀具', readonly=True)
|
||||
functional_tool_name = fields.Char(string='功能刀具名称', readonly=True)
|
||||
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True,
|
||||
@@ -307,7 +321,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
|
||||
# 组装功能刀具参数信息
|
||||
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号')
|
||||
after_assembly_functional_tool_name = fields.Char(string='组装后功能刀具名称', required=True)
|
||||
tool_code = fields.Char(string='功能刀具编码', readonly=True, compute='_compute_tool_code')
|
||||
after_assembly_functional_tool_name = fields.Char(string='组装后功能刀具名称', compute='_compute_name')
|
||||
after_assembly_functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model',
|
||||
string='组装后功能刀具类型',
|
||||
compute='_compute_after_assembly_functional_tool_type_id')
|
||||
@@ -331,6 +346,58 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
hiding_length = fields.Float(string='避空长(mm)')
|
||||
|
||||
# functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False)
|
||||
# res_partner_id = fields.Many2one('res.partner', '智能工厂', domain="[('is_factory', '=', True)]")
|
||||
|
||||
@api.depends('after_assembly_functional_tool_type_id', 'integral_specification_id', 'bar_specification_id',
|
||||
'pad_specification_id', 'handle_specification_id', 'after_assembly_tool_loading_length')
|
||||
def _compute_tool_code(self):
|
||||
for obj in self:
|
||||
str_1 = 'GNDJ-%s' % obj.after_assembly_functional_tool_type_id.code
|
||||
str_2 = ''
|
||||
num = None
|
||||
if obj.handle_specification_id:
|
||||
if obj.integral_specification_id:
|
||||
str_2 = '%s-D%sL%sB%sH%s-' % (
|
||||
str_1, obj.integral_specification_id.blade_diameter, obj.after_assembly_tool_loading_length,
|
||||
obj.integral_specification_id.blade_length, obj.handle_specification_id.total_length)
|
||||
num = self._get_code(str_2)
|
||||
elif obj.bar_specification_id:
|
||||
str_2 = '%s-D%sL%sB%sH%s-' % (
|
||||
str_1, obj.bar_specification_id.cutter_arbor_diameter, obj.after_assembly_tool_loading_length,
|
||||
obj.bar_specification_id.blade_length, obj.handle_specification_id.total_length)
|
||||
num = self._get_code(str_2)
|
||||
elif obj.pad_specification_id:
|
||||
str_2 = '%s-D%sL%sB%sH%s-' % (
|
||||
str_1, obj.pad_specification_id.cutter_head_diameter, obj.after_assembly_tool_loading_length,
|
||||
obj.pad_specification_id.cut_depth_max, obj.handle_specification_id.total_length,
|
||||
)
|
||||
num = self._get_code(str_2)
|
||||
obj.tool_code = str_2 + str(num)
|
||||
else:
|
||||
obj.tool_code = None
|
||||
|
||||
def _get_code(self, str_2):
|
||||
functional_tool_assembly = self.env['sf.functional.tool.assembly'].sudo().search(
|
||||
[('code', 'like', str_2)],
|
||||
limit=1,
|
||||
order="id desc"
|
||||
)
|
||||
if not functional_tool_assembly:
|
||||
num = "%03d" % 1
|
||||
else:
|
||||
m = int(functional_tool_assembly.code[-3:]) + 1
|
||||
num = "%03d" % m
|
||||
return num
|
||||
|
||||
@api.depends('after_assembly_functional_tool_diameter', 'after_assembly_knife_tip_r_angle', 'tool_groups_id')
|
||||
def _compute_name(self):
|
||||
for obj in self:
|
||||
if obj.tool_groups_id:
|
||||
obj.after_assembly_functional_tool_name = '%s-D%sR%s' % (
|
||||
obj.tool_groups_id.name, obj.after_assembly_functional_tool_diameter,
|
||||
obj.after_assembly_knife_tip_r_angle)
|
||||
else:
|
||||
obj.after_assembly_functional_tool_name = None
|
||||
|
||||
@api.onchange('integral_code_id')
|
||||
def _onchange_after_assembly_functional_tool_diameter(self):
|
||||
@@ -453,6 +520,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
def get_desc_1(self, stock_lot):
|
||||
return {
|
||||
'barcode_id': stock_lot.id,
|
||||
'code': self.tool_code,
|
||||
'tool_groups_id': self.tool_groups_id.id,
|
||||
'integral_code_id': self.integral_code_id.id,
|
||||
'blade_code_id': self.blade_code_id.id,
|
||||
'bar_code_id': self.bar_code_id.id,
|
||||
@@ -487,6 +556,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
def get_desc_2(self, stock_lot, functional_tool_assembly_id):
|
||||
return {
|
||||
'barcode_id': stock_lot.id,
|
||||
'code': self.tool_code,
|
||||
'tool_groups_id': self.tool_groups_id.id,
|
||||
'functional_tool_name_id': functional_tool_assembly_id.id,
|
||||
'sf_cutting_tool_type_id': self.after_assembly_functional_tool_type_id.id,
|
||||
'cutting_tool_integral_model_id': self.integral_code_id.product_id.id,
|
||||
|
||||
@@ -25,8 +25,10 @@
|
||||
</group>
|
||||
<group>
|
||||
<field name="barcode_id"/>
|
||||
<field name="code"/>
|
||||
<field name="functional_tool_name"/>
|
||||
<field name="functional_tool_type_id"/>
|
||||
<field name="tool_groups_id"/>
|
||||
<field name="diameter"/>
|
||||
<field name="knife_tip_r_angle"/>
|
||||
<field name="extension_length"/>
|
||||
@@ -38,6 +40,7 @@
|
||||
<field name="replacement_tool_name" string="功能刀具名称"/>
|
||||
<field name="replacement_tool_type_id" string="功能刀具类型"
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="tool_groups_id"/>
|
||||
<field name="replacement_diameter" string="刀具直径(mm)"/>
|
||||
<field name="replacement_knife_tip_r_angle" string="刀尖R角(mm)"/>
|
||||
<field name="replacement_tool_setting_length" string="总长度(mm)"/>
|
||||
@@ -178,6 +181,7 @@
|
||||
<group>
|
||||
<field name="functional_tool_name"/>
|
||||
<field name="functional_tool_type_id"/>
|
||||
<field name="tool_groups_id"/>
|
||||
<field name="functional_tool_diameter" string="刀具直径(mm)"/>
|
||||
<field name="knife_tip_r_angle"/>
|
||||
<field name="tool_loading_length"/>
|
||||
@@ -328,10 +332,12 @@
|
||||
|
||||
<group string="组装参数信息">
|
||||
<group>
|
||||
<field name="barcode_id" readonly="True"/>
|
||||
<field name="barcode_id" invisible="True"/>
|
||||
<field name="tool_code" readonly="True"/>
|
||||
<field name="after_assembly_functional_tool_name" string="功能刀具名称"/>
|
||||
<field name="after_assembly_functional_tool_type_id" string="功能刀具类型"
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="tool_groups_id"/>
|
||||
<field name="after_assembly_functional_tool_diameter" string="刀具直径(mm)"/>
|
||||
<field name="after_assembly_knife_tip_r_angle" string="刀尖R角(mm)"/>
|
||||
<field name="after_assembly_new_former" string="新/旧"/>
|
||||
|
||||
Reference in New Issue
Block a user