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('特性') @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): 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='外包商')