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=50, required=True) fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料", required=True) fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name') multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型", required=True) brand_id = fields.Many2one('sf.machine.brand', string="品牌") model_file = fields.Binary(string="3D模型图") status = fields.Boolean('状态') active = fields.Boolean('有效', default=False) zero_chuck_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='零点卡盘基本参数') zero_tray_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='零点托盘基本参数') pneumatic_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='气动夹具基本参数') jaw_vice_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='虎钳夹具基本参数') magnet_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='磁吸夹具基本参数') adapter_board_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='转接板(锁板)夹具基本参数') scroll_chuck_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='三爪卡盘基本参数') 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 self.fixture_material_id.name == "气动夹具": code = self._get_code("JKM-C-JJWL-QDJJ-") elif self.fixture_material_id.name == "转接板(锁板)夹具": code = self._get_code("JKM-C-JJWL-ZJJJ-") elif self.fixture_material_id.name == "磁吸夹具": code = self._get_code("JKM-C-JJWL-CXJJ-") elif self.fixture_material_id.name == "虎钳夹具": code = self._get_code("JKM-C-JJWL-HQJJ-") elif self.fixture_material_id.name == "零点托盘": code = self._get_code("JKM-C-JJWL-LDTP-") elif self.fixture_material_id.name == "三爪卡盘": code = self._get_code("JKM-C-JJWL-SZKP-") 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