# -*- 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', '品牌', domain="[('tag_ids.name', 'ilike', '刀具')]") 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)') 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)