from odoo import models, fields, api class FixtureMaterial(models.Model): _name = 'sf.fixture.material' _description = "夹具物料" code = fields.Char(string='编码') name = fields.Char(string="名称", size=15) category = fields.Selection([('零点夹具', '零点夹具')], string="类别") remark = fields.Char(string="备注") active = fields.Boolean(string="有效", default=True) class Multi_MountingType(models.Model): _name = 'sf.multi_mounting.type' _description = "联装类型" code = fields.Char(string='编码') name = fields.Char(string="名称", size=15) remark = fields.Char(string="备注") active = fields.Boolean(string="有效", default=True) class FixtureModel(models.Model): _name = 'sf.fixture.model' _description = "夹具型号" name = fields.Char(string="名称", size=15) fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料", ) fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name', store=True) multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型") brand_id = fields.Many2one('sf.machine.brand', string="品牌", domain="[('tag_ids.name', 'ilike', '夹具')]") clamping_way = fields.Char(string="装夹方式") port_type = fields.Char(string="接口类型") model_file = fields.Binary(string="3D模型图") length = fields.Char(string="长度(mm)") width = fields.Char(string="宽度(mm)") height = fields.Char(string="高度(mm)") weight = fields.Char(string="重量(kg)") clamp_workpiece_length_max = fields.Integer(string="夹持工件长度max(mm)") clamp_workpiece_width_max = fields.Integer(string="夹持工件宽度max(mm)") clamp_workpiece_height_max = fields.Integer(string="夹持工件高度max(mm)") clamp_workpiece_diameter_max = fields.Float(string="夹持工件直径max(mm)") maximum_carrying_weight = fields.Float(string="最大承载重量(kg)") maximum_clamping_force = fields.Integer(string="最大夹持力(n)") materials_model_id = fields.Many2one('sf.materials.model', string="材料型号") driving_way = fields.Selection([('气动', '气动'), ('液压', '液压'), ('机械', '机械')], string="驱动方式") apply_machine_tool_type_ids = fields.Many2many('sf.machine_tool.type', 'rel_fixture_model_machine_tool_type', string="适用机床型号") through_hole_size = fields.Integer(string="过孔大小[mm]") screw_size = fields.Integer(string="螺牙大小[mm]") active = fields.Boolean('有效', default=True) def _get_code(self, fixture_model_type_code): fixture_model = self.env['sf.fixture.model'].sudo().search( [('code', 'ilike', fixture_model_type_code)], limit=1, order="id desc") if not fixture_model: num = "%03d" % 1 else: m = int(fixture_model.code[-3:]) + 1 num = "%03d" % m return "%s%s" % (fixture_model_type_code, num) code = fields.Char(string='编码', readonly=True) def _onchange_fixture_material_id(self, fixture_material_id): if fixture_material_id: if fixture_material_id.name == "气动夹具": code = self._get_code("JKM-C-JJWL-QDJJ-") elif fixture_material_id.name == "转接板(锁板)夹具": code = self._get_code("JKM-C-JJWL-ZJBJJ-") elif fixture_material_id.name == "磁吸夹具": code = self._get_code("JKM-C-JJWL-CXJJ-") elif fixture_material_id.name == "虎钳夹具": code = self._get_code("JKM-C-JJWL-HQJJ-") else: code = self._get_code("JKM-C-JJWL-LDKP-") return code @api.model_create_multi def create(self, vals): obj = super(FixtureModel, self).create(vals) if obj.fixture_material_id: code = self._onchange_fixture_material_id(obj.fixture_material_id) obj.code = code return obj