303 lines
20 KiB
Python
303 lines
20 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_parameter_brand_id = fields.Many2one('sf.machine.brand', '品牌')
|
|
# 整体式刀具参数
|
|
cutting_tool_parameter_total_length = fields.Float('总长度[mm]')
|
|
cutting_tool_parameter_shank_length = fields.Float('柄部长度[mm]')
|
|
cutting_tool_parameter_blade_length = fields.Float('刃部长度[mm]')
|
|
cutting_tool_parameter_diameter = fields.Float('直径[mm]')
|
|
cutting_tool_parameter_blade_number = fields.Integer('刃数')
|
|
cutting_tool_parameter_front_angle = fields.Float('前角(°)')
|
|
cutting_tool_parameter_rear_angle = fields.Float('后角(°)')
|
|
cutting_tool_parameter_main_included_angle = fields.Float('主偏角(°)')
|
|
cutting_tool_parameter_material_model_id = fields.Many2one('sf.materials.model', '材料型号')
|
|
cutting_tool_parameter_nut = fields.Float('配对螺母[mm]')
|
|
# 适用夹头型号可以多选
|
|
cutting_tool_parameter_chuck_model_ids = fields.Many2many(
|
|
'sf.cutting.tool.model',
|
|
relation='product_cutting_tool_model_handle_chuck_rel',
|
|
column1='model_id_1',
|
|
column2='model_id_2',
|
|
domain="[('mrs_cutting_tool_material_id.name', '=', '夹头')]",
|
|
string='适用夹头型号')
|
|
cutting_tool_parameter_scope = fields.Char('适用范围')
|
|
# 刀片参数
|
|
cutting_tool_parameter_length = fields.Float('长度L[mm]')
|
|
cutting_tool_parameter_width = fields.Float('宽度D[mm])')
|
|
cutting_tool_parameter_height = fields.Float('高度T[mm]')
|
|
cutting_tool_parameter_top_angle = fields.Float('顶角(°)')
|
|
cutting_tool_parameter_r_angle = fields.Float('R角(°)')
|
|
cutting_tool_parameter_working_hardness = fields.Char('加工硬度')
|
|
cutting_tool_parameter_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="[('mrs_cutting_tool_material_id.name', '=', '刀杆')]",
|
|
string='适用刀杆型号'
|
|
)
|
|
cutting_tool_parameter_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="[('mrs_cutting_tool_material_id.name', '=', '刀盘')]",
|
|
string='适用刀盘型号' # 使用空列表作为默认值
|
|
)
|
|
cutting_tool_parameter_radius = fields.Float('刀尖半径[mm]')
|
|
# 刀杆/刀盘参数
|
|
cutting_tool_parameter_c_diameter = fields.Float('C柄径[mm]')
|
|
cutting_tool_parameter_l_total_length = fields.Float('L总长[mm]')
|
|
cutting_tool_parameter_d_diameter = fields.Float('D刃径[mm]')
|
|
cutting_tool_parameter_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="[('mrs_cutting_tool_material_id.name', '=', '刀片')]",
|
|
string='适用刀片型号' # 使用空列表作为默认值
|
|
)
|
|
cutting_tool_parameter_wrench = fields.Float('配对扳手[mm]')
|
|
cutting_tool_parameter_screw = fields.Float('配备螺丝[mm]')
|
|
cutting_tool_parameter_accuracy_level = fields.Char('精度等级')
|
|
cutting_tool_parameter_rounded_corner = fields.Float('刀尖圆角半径[mm]')
|
|
cutting_tool_parameter_hardness = fields.Char('硬度(°)')
|
|
# 刀柄参数
|
|
cutting_tool_parameter_handle_length = fields.Float('L[mm]')
|
|
cutting_tool_parameter_length1 = fields.Float('L1[mm]')
|
|
cutting_tool_parameter_diameter1 = fields.Float('D1[mm]')
|
|
cutting_tool_parameter_weight = fields.Float('重量(kg)')
|
|
cutting_tool_parameter_body_accuracy = fields.Float('本体精度[mm]')
|
|
cutting_tool_parameter_clamping_range = fields.Float('夹持范围[mm]')
|
|
cutting_tool_parameter_detection_accuracy = fields.Float('检测精度')
|
|
cutting_tool_parameter_detection_hardness = fields.Float('检测硬度')
|
|
cutting_tool_parameter_standard_speed = fields.Float('标准转速')
|
|
# 夹头参数
|
|
cutting_tool_parameter_accuracy = fields.Float('精度[mm]')
|
|
cutting_tool_parameter_outer_diameter = fields.Float('外径[mm]')
|
|
cutting_tool_parameter_inner_diameter = fields.Float('内径[mm]')
|
|
cutting_tool_parameter_handle_model_ids = fields.Many2many(
|
|
'sf.cutting.tool.model',
|
|
relation='product_cutting_tool_model_chuck_handle_rel',
|
|
column1='model_id_1',
|
|
column2='model_id_2',
|
|
domain="[('mrs_cutting_tool_material_id.name', '=', '刀柄')]",
|
|
string='适用刀柄型号'
|
|
)
|
|
cutting_tool_parameter_feature = fields.Char('特性')
|
|
|
|
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 == '刀具':
|
|
self.invoice_policy = 'delivery'
|
|
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.mrs_cutting_tool_material_id.id:
|
|
item.cutting_tool_model_id = False
|
|
|
|
@api.onchange('cutting_tool_model_id')
|
|
def _onchange_cutting_tool_model_id_id(self):
|
|
for item in self:
|
|
if self.cutting_tool_type == '整体式刀具':
|
|
item.cutting_tool_parameter_brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
|
|
item.cutting_tool_parameter_total_length = item.cutting_tool_model_id.integral_total_length
|
|
item.cutting_tool_parameter_shank_length = item.cutting_tool_model_id.integral_shank_length
|
|
item.cutting_tool_parameter_blade_length = item.cutting_tool_model_id.integral_blade_length
|
|
item.cutting_tool_parameter_diameter = item.cutting_tool_model_id.integral_diameter
|
|
item.cutting_tool_parameter_nut = item.cutting_tool_model_id.integral_nut
|
|
item.cutting_tool_parameter_blade_number = item.cutting_tool_model_id.integral_blade_number
|
|
item.cutting_tool_parameter_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
|
|
item.cutting_tool_parameter_front_angle = item.cutting_tool_model_id.integral_front_angle
|
|
item.cutting_tool_parameter_rear_angle = item.cutting_tool_model_id.integral_rear_angle
|
|
item.cutting_tool_parameter_main_included_angle = item.cutting_tool_model_id.integral_main_included_angle
|
|
# item.cutting_tool_parameter_chuck_model_ids = self._get_ids(
|
|
# item.cutting_tool_model_id.mrs_materials_model_id.id)
|
|
item.cutting_tool_parameter_scope = item.cutting_tool_model_id.integral_scope
|
|
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
|
|
elif self.cutting_tool_type == '刀片':
|
|
item.cutting_tool_parameter_brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
|
|
item.cutting_tool_parameter_top_angle = item.cutting_tool_model_id.blade_top_angle
|
|
item.cutting_tool_parameter_front_angle = item.cutting_tool_model_id.blade_front_angle
|
|
item.cutting_tool_parameter_rear_angle = item.cutting_tool_model_id.blade_rear_angle
|
|
item.cutting_tool_parameter_main_included_angle = item.cutting_tool_model_id.blade_main_included_angle
|
|
item.cutting_tool_parameter_r_angle = item.cutting_tool_model_id.blade_r_angle
|
|
item.cutting_tool_parameter_working_hardness = item.cutting_tool_model_id.blade_hardness
|
|
item.cutting_tool_parameter_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
|
|
item.cutting_tool_parameter_length = item.cutting_tool_model_id.blade_length
|
|
item.cutting_tool_parameter_width = item.cutting_tool_model_id.blade_width
|
|
item.cutting_tool_parameter_height = item.cutting_tool_model_id.blade_height
|
|
item.cutting_tool_parameter_radius = item.cutting_tool_model_id.blade_radius
|
|
item.cutting_tool_parameter_nut = item.cutting_tool_model_id.blade_nut
|
|
item.cutting_tool_parameter_cutter_bar_ids = self._get_ids(
|
|
item.cutting_tool_model_id.mrs_cutting_tool_model_blade_cutter_bar_ids)
|
|
item.cutting_tool_parameter_cutter_pad_ids = self._get_ids(
|
|
item.cutting_tool_model_id.mrs_cutting_tool_model_blade_cutter_pad_ids)
|
|
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
|
|
elif self.cutting_tool_type == '刀杆':
|
|
item.cutting_tool_parameter_brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
|
|
item.cutting_tool_parameter_c_diameter = item.cutting_tool_model_id.bar_c_diameter
|
|
item.cutting_tool_parameter_d_diameter = item.cutting_tool_model_id.bar_d_diameter
|
|
item.cutting_tool_parameter_l_total_length = item.cutting_tool_model_id.bar_total_length
|
|
item.cutting_tool_parameter_wrench = item.cutting_tool_model_id.bar_wrench
|
|
item.cutting_tool_parameter_screw = item.cutting_tool_model_id.bar_screw
|
|
item.cutting_tool_parameter_blade_ids = self._get_ids(
|
|
item.cutting_tool_model_id.mrs_cutting_tool_model_pad_blade_ids)
|
|
item.cutting_tool_parameter_scope = item.cutting_tool_model_id.bar_scope
|
|
item.cutting_tool_parameter_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
|
|
item.cutting_tool_parameter_rounded_corner = item.cutting_tool_model_id.bar_radius
|
|
item.cutting_tool_parameter_accuracy_level = item.cutting_tool_model_id.bar_accuracy
|
|
item.cutting_tool_parameter_blade_number = item.cutting_tool_model_id.bar_blade_number
|
|
item.cutting_tool_parameter_hardness = item.cutting_tool_model_id.bar_hardness
|
|
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
|
|
elif self.cutting_tool_type == '刀盘':
|
|
item.cutting_tool_parameter_brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
|
|
item.cutting_tool_parameter_c_diameter = item.cutting_tool_model_id.pad_c_diameter
|
|
item.cutting_tool_parameter_d_diameter = item.cutting_tool_model_id.pad_d_diameter
|
|
item.cutting_tool_parameter_l_total_length = item.cutting_tool_model_id.pad_total_length
|
|
item.cutting_tool_parameter_wrench = item.cutting_tool_model_id.pad_wrench
|
|
item.cutting_tool_parameter_screw = item.cutting_tool_model_id.pad_screw
|
|
item.cutting_tool_parameter_blade_ids = self._get_ids(
|
|
item.cutting_tool_model_id.mrs_cutting_tool_model_pad_blade_ids)
|
|
item.cutting_tool_parameter_scope = item.cutting_tool_model_id.pad_scope
|
|
item.cutting_tool_parameter_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
|
|
item.cutting_tool_parameter_rounded_corner = item.cutting_tool_model_id.pad_radius
|
|
item.cutting_tool_parameter_accuracy_level = item.cutting_tool_model_id.pad_accuracy
|
|
item.cutting_tool_parameter_blade_number = item.cutting_tool_model_id.pad_blade_number
|
|
item.cutting_tool_parameter_hardness = item.cutting_tool_model_id.pad_hardness
|
|
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
|
|
elif self.cutting_tool_type == '刀柄':
|
|
item.cutting_tool_parameter_brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
|
|
item.cutting_tool_parameter_handle_length = item.cutting_tool_model_id.handle_length
|
|
item.cutting_tool_parameter_length1 = item.cutting_tool_model_id.handle_length
|
|
item.cutting_tool_parameter_diameter1 = item.cutting_tool_model_id.handle_diameter
|
|
item.cutting_tool_parameter_body_accuracy = item.cutting_tool_model_id.handle_body_accuracy
|
|
item.cutting_tool_parameter_nut = item.cutting_tool_model_id.handle_nut
|
|
item.cutting_tool_parameter_clamping_range = item.cutting_tool_model_id.handle_clamping_range
|
|
item.cutting_tool_parameter_weight = item.cutting_tool_model_id.handle_weight
|
|
item.cutting_tool_parameter_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
|
|
item.cutting_tool_parameter_chuck_model_ids = self._get_ids(
|
|
item.cutting_tool_model_id.mrs_cutting_tool_model_handle_chuck_model_ids)
|
|
item.cutting_tool_parameter_detection_accuracy = item.cutting_tool_model_id.handle_detection_accuracy
|
|
item.cutting_tool_parameter_detection_hardness = item.cutting_tool_model_id.handle_detection_hardness
|
|
item.cutting_tool_parameter_standard_speed = item.cutting_tool_model_id.handle_standard_speed
|
|
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
|
|
elif self.cutting_tool_type == '夹头':
|
|
item.cutting_tool_parameter_brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
|
|
item.cutting_tool_parameter_outer_diameter = item.cutting_tool_model_id.chuck_diameter
|
|
item.cutting_tool_parameter_inner_diameter = item.cutting_tool_model_id.chuck_inner_diameter
|
|
item.cutting_tool_parameter_accuracy = item.cutting_tool_model_id.chuck_accuracy
|
|
item.cutting_tool_parameter_nut = item.cutting_tool_model_id.chuck_nut
|
|
item.cutting_tool_parameter_clamping_range = item.cutting_tool_model_id.chuck_clamping_range
|
|
item.cutting_tool_parameter_handle_model_ids = self._get_ids(
|
|
item.cutting_tool_model_id.mrs_cutting_tool_model_chuck_handle_model_ids)
|
|
item.cutting_tool_parameter_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
|
|
item.cutting_tool_parameter_height = item.cutting_tool_model_id.chuck_height
|
|
item.cutting_tool_parameter_feature = item.cutting_tool_model_id.chuck_feature
|
|
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
|
|
else:
|
|
item.cutting_tool_parameter_brand_id = False
|
|
item.cutting_tool_parameter_total_length = False
|
|
item.cutting_tool_parameter_shank_length = False
|
|
item.cutting_tool_parameter_blade_length = False
|
|
item.cutting_tool_parameter_diameter = False
|
|
item.cutting_tool_parameter_nut = False
|
|
item.cutting_tool_parameter_blade_number = False
|
|
item.cutting_tool_parameter_material_model_id = False
|
|
item.cutting_tool_parameter_front_angle = False
|
|
item.cutting_tool_parameter_rear_angle = False
|
|
item.cutting_tool_parameter_main_included_angle = False
|
|
item.cutting_tool_parameter_chuck_model_ids = False
|
|
item.cutting_tool_parameter_scope = False
|
|
item.cutting_tool_parameter_top_angle = False
|
|
item.cutting_tool_parameter_r_angle = False
|
|
item.cutting_tool_parameter_working_hardness = False
|
|
item.cutting_tool_parameter_length = False
|
|
item.cutting_tool_parameter_width = False
|
|
item.cutting_tool_parameter_height = False
|
|
item.cutting_tool_parameter_radius = False
|
|
item.cutting_tool_parameter_cutter_bar_ids = False
|
|
item.cutting_tool_parameter_cutter_pad_ids = False
|
|
item.cutting_tool_parameter_c_diameter = False
|
|
item.cutting_tool_parameter_d_diameter = False
|
|
item.cutting_tool_parameter_l_total_length = False
|
|
item.cutting_tool_parameter_wrench = False
|
|
item.cutting_tool_parameter_screw = False
|
|
item.cutting_tool_parameter_blade_ids = False
|
|
item.cutting_tool_parameter_rounded_corner = False
|
|
item.cutting_tool_parameter_accuracy_level = False
|
|
item.cutting_tool_parameter_hardness = False
|
|
item.cutting_tool_parameter_handle_length = False
|
|
item.cutting_tool_parameter_length1 = False
|
|
item.cutting_tool_parameter_diameter1 = False
|
|
item.cutting_tool_parameter_body_accuracy = False
|
|
item.cutting_tool_parameter_clamping_range = False
|
|
item.cutting_tool_parameter_weight = False
|
|
item.cutting_tool_parameter_detection_accuracy = False
|
|
item.cutting_tool_parameter_detection_hardness = False
|
|
item.cutting_tool_parameter_standard_speed = False
|
|
item.image_1920 = False
|
|
# if self.cutting_tool_material_id != self.cutting_tool_model_id.mrs_cutting_tool_material_id:
|
|
# self.cutting_tool_model_id = False
|
|
|
|
|
|
class ResMrpBomMo(models.Model):
|
|
_inherit = 'mrp.bom'
|
|
|
|
subcontractor_id = fields.Many2one('res.partner', string='外包商')
|