326 lines
18 KiB
Python
326 lines
18 KiB
Python
from odoo import models, fields, api
|
|
|
|
|
|
class ResProductMo(models.Model):
|
|
_inherit = 'product.template'
|
|
model_file = fields.Binary('模型文件')
|
|
categ_type = fields.Selection(
|
|
[("成品", "成品"), ("坯料", "坯料"), ("原材料", "原材料"), ("表面工艺", "表面工艺"), ("刀具", "刀具"),
|
|
("夹具", "夹具")],
|
|
string='产品的类别', related='categ_id.type',
|
|
store=True)
|
|
model_name = fields.Char('模型名称')
|
|
model_long = fields.Float('模型长(mm)', digits=(16, 3))
|
|
model_width = fields.Float('模型宽(mm)', digits=(16, 3))
|
|
model_height = fields.Float('模型高(mm)', digits=(16, 3))
|
|
model_volume = fields.Float('模型体积(m³)')
|
|
model_machining_precision = fields.Selection([
|
|
('0.10', '±0.10mm'),
|
|
('0.05', '±0.05mm'),
|
|
('0.03', '±0.03mm'),
|
|
('0.02', '±0.02mm'),
|
|
('0.01', '±0.01mm')], string='加工精度')
|
|
model_processing_panel = fields.Char('模型加工面板')
|
|
model_remark = fields.Char('模型备注说明')
|
|
length = fields.Float('长(mm)', digits=(16, 3))
|
|
width = fields.Float('宽(mm)', digits=(16, 3))
|
|
height = fields.Float('高(mm)', digits=(16, 3))
|
|
single_manufacturing = fields.Boolean(string="单个制造")
|
|
|
|
model_code = fields.Char('模型编码')
|
|
is_bfm = fields.Boolean('业务平台是否自动创建', default=False)
|
|
upload_model_file = fields.Many2many('ir.attachment', 'upload_model_file_attachment_ref', string='上传模型文件')
|
|
product_model_type_id = fields.Many2one('sf.model.type', string='产品模型类型')
|
|
embryo_model_type_id = fields.Many2one('sf.model.type', string='坯料模型类型')
|
|
materials_id = fields.Many2one('sf.production.materials', string='材料')
|
|
materials_type_id = fields.Many2one('sf.materials.model', string='材料型号')
|
|
server_product_process_parameters_id = fields.Many2one('sf.production.process.parameter',
|
|
string='表面工艺参数(服务产品)')
|
|
model_process_parameters_ids = fields.Many2many('sf.production.process.parameter', 'process_parameter_rel',
|
|
string='表面工艺参数')
|
|
|
|
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_model_id = fields.Many2one('sf.cutting.tool.model', string='型号',
|
|
)
|
|
cutting_tool_type_id = fields.Many2one('sf.cutting.tool.type', string='刀具类型',
|
|
domain="[('cutting_tool_material_id.name', '=', cutting_tool_type)]")
|
|
|
|
brand_id = fields.Many2one('sf.machine.brand', '品牌')
|
|
tool_length = fields.Integer('长度(mm)', size=6)
|
|
tool_width = fields.Integer('宽度(mm)', size=6)
|
|
tool_height = fields.Integer('高度(mm)', size=6)
|
|
tool_thickness = fields.Integer('厚度(mm)', size=6)
|
|
tool_weight = fields.Float('重量(kg)', size=4)
|
|
coating_material = fields.Char('涂层材质')
|
|
# 整体式刀具参数
|
|
cutting_tool_total_length = fields.Float('总长度(mm)')
|
|
cutting_tool_shank_length = fields.Float('柄部长度(mm)')
|
|
cutting_tool_blade_length = fields.Float('刃部长度(mm)')
|
|
cutting_tool_diameter = fields.Float('直径(mm)')
|
|
cutting_tool_blade_number = fields.Integer('刃数')
|
|
cutting_tool_front_angle = fields.Float('前角(°)')
|
|
cutting_tool_rear_angle = fields.Float('后角(°)')
|
|
cutting_tool_main_included_angle = fields.Float('主偏角(°)')
|
|
# cutting_tool_material_model_id = fields.Many2one('sf.materials.model', '材料型号')
|
|
cutting_tool_nut = fields.Float('配对螺母(mm)')
|
|
# 适用夹头型号可以多选
|
|
cutting_tool_chuck_ids = fields.Many2many(
|
|
'sf.cutting.tool.model',
|
|
relation='product_cutting_tool_model_handle_chuck_rel',
|
|
column1='model_id_1',
|
|
column2='model_id_2',
|
|
domain="[('cutting_tool_type', '=', '夹头')]",
|
|
string='适用夹头型号')
|
|
# 刀片参数
|
|
cutting_tool_top_angle = fields.Float('顶角(°)')
|
|
cutting_tool_jump_accuracy = fields.Float('径跳精度(um)')
|
|
cutting_tool_working_hardness = fields.Char('加工硬度(hrc)')
|
|
cutting_tool_cutter_bar_ids = fields.Many2many(
|
|
'sf.cutting.tool.model',
|
|
relation='product_cutting_tool_model_blade_cutter_bar_rel',
|
|
column1='model_id_1',
|
|
column2='model_id_2',
|
|
domain="[('cutting_tool_type', '=', '刀杆')]",
|
|
string='适用刀杆型号'
|
|
)
|
|
cutting_tool_cutter_pad_ids = fields.Many2many(
|
|
'sf.cutting.tool.model',
|
|
relation='product_cutting_tool_model_blade_cutter_pad_rel',
|
|
column1='model_id_1',
|
|
column2='model_id_2',
|
|
domain="[('cutting_tool_type', '=', '刀盘')]",
|
|
string='适用刀盘型号' # 使用空列表作为默认值
|
|
)
|
|
# 刀杆/参数
|
|
cutting_tool_blade_diameter = fields.Float('刃径(mm)')
|
|
cutting_tool_blade_ids = fields.Many2many(
|
|
'sf.cutting.tool.model',
|
|
relation='product_cutting_tool_model_pad_blade_rel',
|
|
column1='model_id_1',
|
|
column2='model_id_2',
|
|
domain="[('cutting_tool_type', '=', '刀片')]",
|
|
string='适用刀片型号' # 使用空列表作为默认值
|
|
)
|
|
cutting_tool_wrench = fields.Float('配对扳手(mm)')
|
|
cutting_tool_screw = fields.Float('配备螺丝(mm)')
|
|
cutting_tool_accuracy_level = fields.Char('精度等级')
|
|
# 刀柄参数
|
|
cutting_tool_diameter_max = fields.Float('最大直径(mm)')
|
|
cutting_tool_clamping_diameter = fields.Float('夹持直径(mm)')
|
|
cutting_tool_flange_length = fields.Float('法兰柄长度(mm)')
|
|
cutting_tool_flange_diameter = fields.Float('法兰直径(mm)')
|
|
# 夹头参数
|
|
cutting_tool_outer_diameter = fields.Float('外径(mm)')
|
|
cutting_tool_inner_diameter = fields.Float('内径(mm)')
|
|
cutting_tool_handle_ids = fields.Many2many(
|
|
'sf.cutting.tool.model',
|
|
relation='product_cutting_tool_model_chuck_handle_rel',
|
|
column1='model_id_1',
|
|
column2='model_id_2',
|
|
domain="[('cutting_tool_type', '=', '刀柄')]",
|
|
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)", size=6)
|
|
fixture_clamp_workpiece_width_max = fields.Integer(string="夹持工件宽度MAX(mm)", size=6)
|
|
fixture_clamp_workpiece_height_max = fields.Integer(string="夹持工件高度MAX(mm)", size=6)
|
|
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)", size=8)
|
|
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)", size=6)
|
|
fixture_screw_size = fields.Integer(string="螺牙大小(mm)", size=6)
|
|
# 注册状态
|
|
register_state = fields.Selection([('未注册', '未注册'), ('已注册', '已注册'), ('注册失败', '注册失败')],
|
|
string='注册状态', default='未注册')
|
|
industry_code = fields.Char('行业编码', readonly=True)
|
|
|
|
def _json_apply_machine_tool_type_item_code(self, item):
|
|
code_arr = []
|
|
for i in item.product_id.fixture_apply_machine_tool_type_ids:
|
|
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:
|
|
code_arr.append(i.code)
|
|
return code_arr
|
|
|
|
def _json_cutter_pad_item_code(self, item):
|
|
code_arr = []
|
|
for i in item.product_id.cutting_tool_cutter_pad_ids:
|
|
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:
|
|
code_arr.append(i.code)
|
|
return code_arr
|
|
|
|
def _get_ids(self, param):
|
|
type_ids = []
|
|
if not param:
|
|
return []
|
|
for item in param:
|
|
type_ids.append(item.id)
|
|
return [(6, 0, type_ids)]
|
|
|
|
@api.onchange('categ_id')
|
|
def _onchange_categ_id(self):
|
|
if self.categ_type in ('刀具', '夹具'):
|
|
self.invoice_policy = 'delivery'
|
|
self.detailed_type = 'product'
|
|
self.sale_ok = False
|
|
|
|
@api.onchange('cutting_tool_material_id')
|
|
def _onchange_cutting_tool_material_id(self):
|
|
for item in self:
|
|
if item.cutting_tool_material_id.id != item.cutting_tool_model_id.cutting_tool_material_id.id:
|
|
item.cutting_tool_model_id = False
|
|
|
|
@api.onchange('fixture_material_id')
|
|
def _onchange_fixture_material_id(self):
|
|
for item in self:
|
|
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('cutting_tool_model_id')
|
|
def _onchange_cutting_tool_model_id(self):
|
|
for item in self:
|
|
if self.cutting_tool_type is not False:
|
|
item.brand_id = item.cutting_tool_model_id.brand_id.id
|
|
item.cutting_tool_type_id = item.cutting_tool_model_id.cutting_tool_type_id.id
|
|
item.tool_length = item.cutting_tool_model_id.tool_length
|
|
item.tool_width = item.cutting_tool_model_id.tool_width
|
|
item.tool_height = item.cutting_tool_model_id.tool_height
|
|
item.tool_thickness = item.cutting_tool_model_id.tool_thickness
|
|
item.tool_weight = item.cutting_tool_model_id.tool_weight
|
|
item.coating_material = item.cutting_tool_model_id.coating_material
|
|
item.cutting_tool_total_length = item.cutting_tool_model_id.total_length
|
|
item.cutting_tool_shank_length = item.cutting_tool_model_id.shank_length
|
|
item.cutting_tool_blade_length = item.cutting_tool_model_id.blade_length
|
|
item.cutting_tool_diameter = item.cutting_tool_model_id.diameter
|
|
item.cutting_tool_blade_number = item.cutting_tool_model_id.blade_number
|
|
item.cutting_tool_front_angle = item.cutting_tool_model_id.front_angle
|
|
item.cutting_tool_rear_angle = item.cutting_tool_model_id.rear_angle
|
|
item.cutting_tool_main_included_angle = item.cutting_tool_model_id.main_included_angle
|
|
item.materials_type_id = item.cutting_tool_model_id.material_model_id.id
|
|
item.cutting_tool_nut = item.cutting_tool_model_id.nut
|
|
item.cutting_tool_top_angle = item.cutting_tool_model_id.top_angle
|
|
item.cutting_tool_jump_accuracy = item.cutting_tool_model_id.jump_accuracy
|
|
item.cutting_tool_working_hardness = item.cutting_tool_model_id.working_hardness
|
|
item.cutting_tool_blade_diameter = item.cutting_tool_model_id.blade_diameter
|
|
item.cutting_tool_wrench = item.cutting_tool_model_id.wrench
|
|
item.cutting_tool_screw = item.cutting_tool_model_id.screw
|
|
item.cutting_tool_accuracy_level = item.cutting_tool_model_id.accuracy_level
|
|
item.cutting_tool_diameter_max = item.cutting_tool_model_id.diameter_max
|
|
item.cutting_tool_clamping_diameter = item.cutting_tool_model_id.clamping_diameter
|
|
item.cutting_tool_flange_length = item.cutting_tool_model_id.flange_length
|
|
item.cutting_tool_flange_diameter = item.cutting_tool_model_id.flange_diameter
|
|
item.cutting_tool_outer_diameter = item.cutting_tool_model_id.outer_diameter
|
|
item.cutting_tool_inner_diameter = item.cutting_tool_model_id.inner_diameter
|
|
item.cutting_tool_chuck_ids = self._get_ids(item.cutting_tool_model_id.chuck_ids)
|
|
item.cutting_tool_cutter_bar_ids = self._get_ids(item.cutting_tool_model_id.cutter_bar_ids)
|
|
item.cutting_tool_cutter_pad_ids = self._get_ids(item.cutting_tool_model_id.cutter_pad_ids)
|
|
item.cutting_tool_blade_ids = self._get_ids(item.cutting_tool_model_id.blade_ids)
|
|
item.cutting_tool_handle_ids = self._get_ids(item.cutting_tool_model_id.handle_ids)
|
|
else:
|
|
item.brand_id = False
|
|
item.cutting_tool_type_id = False
|
|
item.brand_id = False
|
|
item.tool_length = False
|
|
item.tool_width = False
|
|
item.tool_height = False
|
|
item.tool_thickness = False
|
|
item.tool_weight = False
|
|
item.coating_material = False
|
|
item.cutting_tool_total_length = False
|
|
item.cutting_tool_shank_length = False
|
|
item.cutting_tool_blade_length = False
|
|
item.cutting_tool_diameter = False
|
|
item.cutting_tool_blade_number = False
|
|
item.cutting_tool_front_angle = False
|
|
item.cutting_tool_rear_angle = False
|
|
item.cutting_tool_main_included_angle = False
|
|
item.materials_type_id = False
|
|
item.cutting_tool_nut = False
|
|
item.cutting_tool_top_angle = False
|
|
item.cutting_tool_jump_accuracy = False
|
|
item.cutting_tool_working_hardness = False
|
|
item.cutting_tool_blade_diameter = False
|
|
item.cutting_tool_wrench = False
|
|
item.cutting_tool_screw = False
|
|
item.cutting_tool_accuracy_level = False
|
|
item.cutting_tool_diameter_max = False
|
|
item.cutting_tool_clamping_diameter = False
|
|
item.cutting_tool_flange_length = False
|
|
item.cutting_tool_flange_diameter = False
|
|
item.cutting_tool_outer_diameter = False
|
|
item.cutting_tool_inner_diameter = False
|
|
item.cutting_tool_chuck_ids = False
|
|
item.cutting_tool_cutter_bar_ids = False
|
|
item.cutting_tool_cutter_pad_ids = False
|
|
item.cutting_tool_blade_ids = False
|
|
item.cutting_tool_handle_ids = False
|
|
|
|
|
|
class ResMrpBomMo(models.Model):
|
|
_inherit = 'mrp.bom'
|
|
|
|
subcontractor_id = fields.Many2one('res.partner', string='外包商')
|