255 lines
12 KiB
Python
255 lines
12 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import fields, models, api
|
|
|
|
|
|
# from datetime import datetime
|
|
# from odoo.exceptions import ValidationError
|
|
|
|
|
|
# 刀具物料
|
|
class CuttingToolMaterial(models.Model):
|
|
_name = 'sf.cutting.tool.material'
|
|
_description = '刀具物料'
|
|
|
|
code = fields.Char('编码')
|
|
name = fields.Char('名称')
|
|
remark = fields.Char('备注')
|
|
active = fields.Boolean('有效', default=True)
|
|
|
|
|
|
# 功能刀具
|
|
class FunctionalCuttingTool(models.Model):
|
|
_name = 'sf.functional.cutting.tool'
|
|
_description = '功能刀具'
|
|
|
|
code = fields.Char('编码')
|
|
name = fields.Char('名称')
|
|
active = fields.Boolean('有效', default=True)
|
|
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='刀具型号')
|
|
|
|
# # 整体式刀具型号
|
|
# mrs_cutting_tool_integral_model_ids = fields.Many2many('sf.cutting.tool.model', 'rel_integral_model_functional_sf',
|
|
# string='整体式刀具型号', domain=
|
|
# [('cutting_tool_type', '=', '整体式刀具')])
|
|
# # 刀片型号
|
|
# mrs_cutting_tool_blade_model_ids = fields.Many2many('sf.cutting.tool.model', 'rel_blade_model_functional_sf',
|
|
# string='刀片型号', domain=
|
|
# [('cutting_tool_type', '=', '刀片')])
|
|
# # 刀杆型号
|
|
# mrs_cutting_tool_cutterbar_model_ids = fields.Many2many('sf.cutting.tool.model',
|
|
# 'rel_cutterbar_model_functional_sf',
|
|
# string='刀杆型号', domain=
|
|
# [('cutting_tool_type', '=', '刀杆')])
|
|
# # 刀盘型号
|
|
# mrs_cutting_tool_cutterpad_model_ids = fields.Many2many('sf.cutting.tool.model',
|
|
# 'rel_cutterpad_model_functional_sf',
|
|
# string='刀盘型号', domain=
|
|
# [('cutting_tool_type', '=', '刀盘')])
|
|
# # 刀柄型号
|
|
# mrs_cutting_tool_cutterhandle_model_ids = fields.Many2many('sf.cutting.tool.model',
|
|
# 'rel_cutterhandle_model_functional_sf',
|
|
# string='刀柄型号',
|
|
# domain=
|
|
# [('cutting_tool_type', '=', '刀柄')])
|
|
# # 夹头型号
|
|
# mrs_cutting_tool_cutterhead_model_ids = fields.Many2many('sf.cutting.tool.model',
|
|
# 'rel_cutterhead_model_functional_sf',
|
|
# string='夹头型号', domain=
|
|
# [('cutting_tool_type', '=', '夹头')])
|
|
#
|
|
# diameter = fields.Float('直径(mm)')
|
|
# tool_grade = fields.Selection([('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'P4'), ('5', 'P5'), ('6', 'P6')],
|
|
# string='刀具等级')
|
|
# machining_accuracy = fields.Float('加工精度(mm)')
|
|
# tool_length = fields.Float('装刀长')
|
|
# blade_number = fields.Integer('刃数')
|
|
# integral_blade_length = fields.Float('整体刃长(mm)')
|
|
# effective_blade_length = fields.Float('有效刃长(mm)')
|
|
# max_life = fields.Float('最大寿命值')
|
|
# is_standard = fields.Boolean('是否标准刀')
|
|
# applicable_range = fields.Char('适用范围')
|
|
# image = fields.Binary('图片')
|
|
# active = fields.Boolean('有效', default=True)
|
|
#
|
|
# def _get_functional_tool_model_ids(self, functional_tool_model_code):
|
|
# functional_tool_model_ids = []
|
|
# for item in functional_tool_model_code:
|
|
# functional_tool_model = self.env['sf.cutting.tool.model'].search([('code', '=', item)])
|
|
# functional_tool_model_ids.append(functional_tool_model.id)
|
|
# return [(6, 0, functional_tool_model_ids)]
|
|
|
|
|
|
# 功能刀具类型
|
|
class FunctionalCuttingToolModel(models.Model):
|
|
_name = 'sf.functional.cutting.tool.model'
|
|
_description = '功能刀具类型'
|
|
|
|
name = fields.Char('名称', required=True)
|
|
code = fields.Char('编码', required=True)
|
|
remark = fields.Char('备注')
|
|
active = fields.Boolean('有效', default=True)
|
|
|
|
|
|
# 刀具型号
|
|
class CuttingToolModel(models.Model):
|
|
_name = 'sf.cutting.tool.model'
|
|
_description = '刀具型号'
|
|
|
|
name = fields.Char('名称')
|
|
cutting_tool_material_id = fields.Many2one('sf.cutting.tool.material', string='刀具物料')
|
|
cutting_tool_type = fields.Char(string="刀具物料类型", related='cutting_tool_material_id.name', store=True)
|
|
cutting_tool_type_id = fields.Many2one('sf.cutting.tool.type', string='刀具类型',
|
|
)
|
|
brand_id = fields.Many2one('sf.machine.brand', '品牌')
|
|
tool_length = fields.Integer('长度(mm)')
|
|
tool_width = fields.Integer('宽度(mm)')
|
|
tool_height = fields.Integer('高度(mm)')
|
|
tool_thickness = fields.Integer('厚度(mm)')
|
|
tool_weight = fields.Float('重量(kg)')
|
|
coating_material = fields.Char('涂层材质')
|
|
|
|
# 整体式刀具参数
|
|
total_length = fields.Float('总长度(mm)')
|
|
shank_length = fields.Float('柄部长度(mm)')
|
|
blade_length = fields.Float('刃部长度(mm)')
|
|
# 整体式刀具新增字段
|
|
integral_neck_length = fields.Float('整体式刀具颈部长度(mm)', digits=(6, 1))
|
|
integral_shank_diameter = fields.Float('整体式刀具柄部直径(mm)', digits=(6, 1))
|
|
integral_blade_diameter = fields.Float('整体式刀具刃部直径(mm)', digits=(6, 1))
|
|
integral_neck_diameter = fields.Float('整体式刀具颈部直径(mm)', digits=(6, 1))
|
|
integral_blade_tip_diameter = fields.Float('整体式刀具刀尖直径(mm)', digits=(6, 1))
|
|
integral_blade_tip_taper = fields.Float('整体式刀具刀尖锥度(°)', digits=(6, 1))
|
|
integral_blade_helix_angle = fields.Float('整体式刀具刃部螺旋角(°)', digits=(6, 1))
|
|
integral_blade_type = fields.Char('整体式刀具刃部类型')
|
|
integral_coarse_medium_fine = fields.Selection([('粗', '粗'), ('中', '中'), ('精', '精')], '整体式刀具粗/中/精')
|
|
integral_hardness = fields.Integer('整体式刀具硬度(HRC)')
|
|
integral_run_out_accuracy_max = fields.Float('整体式刀具端跳精度max', digits=(6, 1))
|
|
integral_run_out_accuracy_min = fields.Float('整体式刀具端跳精度min', digits=(6, 1))
|
|
suitable_machining_method_ids = fields.Many2many('sf.suitable.machining.method',
|
|
'rel_suitable_machining_method_cutting_tool', '适合加工方式')
|
|
blade_tip_characteristics_ids = fields.Many2many('sf.blade.tip.characteristics',
|
|
'rel_blade_tip_characteristics_cutting_tool', '刀尖特征')
|
|
handle_type_ids = fields.Many2many('sf.handle.type', 'rel_handle_type_cutting_tool', '柄部类型')
|
|
cutting_direction_ids = fields.Many2many('sf.cutting.direction', 'rel_cutting_direction_cutting_tool',
|
|
'走刀方向')
|
|
suitable_coolant_ids = fields.Many2many('sf.suitable.coolant', 'rel_suitable_coolant_cutting_tool',
|
|
'适合冷却液')
|
|
|
|
diameter = fields.Float('直径(mm)')
|
|
blade_number = fields.Integer('刃数')
|
|
front_angle = fields.Float('前角(°)')
|
|
rear_angle = fields.Float('后角(°)')
|
|
main_included_angle = fields.Float('主偏角(°)')
|
|
material_model_id = fields.Many2one('sf.materials.model', '材料型号')
|
|
nut = fields.Float('配对螺母(mm)')
|
|
# 适用夹头型号可以多选
|
|
chuck_ids = fields.Many2many(
|
|
'sf.cutting.tool.model',
|
|
relation='cutting_tool_model_handle_chuck_rel',
|
|
column1='model_id_1',
|
|
column2='model_id_2',
|
|
domain="[('cutting_tool_type', '=', '夹头')]",
|
|
string='适用夹头型号')
|
|
# 刀片参数
|
|
top_angle = fields.Float('顶角(°)')
|
|
jump_accuracy = fields.Float('径跳精度(um)')
|
|
working_hardness = fields.Char('加工硬度(hrc)')
|
|
cutter_bar_ids = fields.Many2many(
|
|
'sf.cutting.tool.model',
|
|
relation='cutting_tool_model_blade_cutter_bar_rel',
|
|
column1='model_id_1',
|
|
column2='model_id_2',
|
|
domain="[('cutting_tool_type', '=', '刀杆')]",
|
|
string='适用刀杆型号'
|
|
)
|
|
cutter_pad_ids = fields.Many2many(
|
|
'sf.cutting.tool.model',
|
|
relation='cutting_tool_model_blade_cutter_pad_rel',
|
|
column1='model_id_1',
|
|
column2='model_id_2',
|
|
domain="[('cutting_tool_type', '=', '刀盘')]",
|
|
string='适用刀盘型号' # 使用空列表作为默认值
|
|
)
|
|
# 刀杆/参数
|
|
blade_diameter = fields.Float('刃径(mm)')
|
|
blade_ids = fields.Many2many(
|
|
'sf.cutting.tool.model',
|
|
relation='cutting_tool_model_pad_blade_rel',
|
|
column1='model_id_1',
|
|
column2='model_id_2',
|
|
domain="[('cutting_tool_type', '=', '刀片')]",
|
|
string='适用刀片型号' # 使用空列表作为默认值
|
|
)
|
|
wrench = fields.Float('配对扳手(mm)')
|
|
screw = fields.Float('配备螺丝(mm)')
|
|
accuracy_level = fields.Char('精度等级')
|
|
# 刀柄参数
|
|
diameter_max = fields.Float('最大直径(mm)')
|
|
clamping_diameter = fields.Float('夹持直径(mm)')
|
|
flange_length = fields.Float('法兰柄长度(mm)')
|
|
flange_diameter = fields.Float('法兰直径(mm)')
|
|
# 夹头参数
|
|
outer_diameter = fields.Float('外径(mm)')
|
|
inner_diameter = fields.Float('内径(mm)')
|
|
handle_ids = fields.Many2many(
|
|
'sf.cutting.tool.model',
|
|
relation='cutting_tool_model_chuck_handle_rel',
|
|
column1='model_id_1',
|
|
column2='model_id_2',
|
|
domain="[('cutting_tool_type', '=', '刀柄')]",
|
|
string='适用刀柄型号'
|
|
)
|
|
active = fields.Boolean('有效', default=True)
|
|
|
|
def _get_code(self, cutting_tool_type_code):
|
|
cutting_tool_model = self.search(
|
|
[('code', 'ilike', cutting_tool_type_code)],
|
|
limit=1,
|
|
order="id desc")
|
|
if not cutting_tool_model:
|
|
num = "%03d" % 1
|
|
else:
|
|
m = int(cutting_tool_model.code[-3:]) + 1
|
|
num = "%03d" % m
|
|
return "%s%s" % (cutting_tool_type_code, num)
|
|
|
|
code = fields.Char(string='编码', readonly=True)
|
|
|
|
def _onchange_cutting_tool_material_id(self, cutting_tool_material_id):
|
|
if cutting_tool_material_id:
|
|
if cutting_tool_material_id.name == "整体式刀具":
|
|
code = self._get_code("JKM-T-DJWL-ZTDJ-")
|
|
elif cutting_tool_material_id.name == "刀片":
|
|
code = self._get_code("JKM-T-DJWL-DPIA-")
|
|
elif cutting_tool_material_id.name == "刀杆":
|
|
code = self._get_code("JKM-T-DJWL-DGAN-")
|
|
elif cutting_tool_material_id.name == "刀盘":
|
|
code = self._get_code("JKM-T-DJWL-DPAN-")
|
|
elif cutting_tool_material_id.name == "夹头":
|
|
code = self._get_code("JKM-T-DJWL-DJIA-")
|
|
else:
|
|
code = self._get_code("JKM-T-DJWL-DBIN-")
|
|
return code
|
|
|
|
@api.model_create_multi
|
|
def create(self, vals):
|
|
obj = super(CuttingToolModel, self).create(vals)
|
|
if obj.cutting_tool_material_id:
|
|
code = self._onchange_cutting_tool_material_id(obj.cutting_tool_material_id)
|
|
obj.code = code
|
|
return obj
|
|
|
|
|
|
# 刀具类型
|
|
class CuttingToolType(models.Model):
|
|
_name = 'sf.cutting.tool.type'
|
|
_description = '刀具类型'
|
|
|
|
code = fields.Char('编码')
|
|
name = fields.Char('名称')
|
|
# 关联刀具物料
|
|
cutting_tool_material_id = fields.Many2one('sf.cutting.tool.material', '刀具物料')
|
|
remark = fields.Char('备注')
|
|
active = fields.Boolean('有效', default=True)
|