from odoo import models, fields, api from odoo.addons.sf_base.commons.common import Common from odoo.exceptions import ValidationError import requests import json class FunctionalFixtureType(models.Model): _name = 'sf.functional.fixture.type' _description = "功能夹具类型" code = fields.Char(string='编码', readonly=True) name = fields.Char(string="名称", size=15) remark = fields.Char(string="备注") active = fields.Boolean(string="有效", default=True) class FunctionalFixture(models.Model): _name = 'sf.functional.fixture' _description = "功能夹具" code = fields.Char(string='编码', readonly=True) type_id = fields.Many2one('sf.functional.fixture.type', string="功能夹具类型", required=True) type = fields.Char(related='type_id.name', string="功能夹具类别", store=True) zero_chuck_model_ids = fields.Many2many('sf.fixture.model', 'rel_fixture_model_zero_chuck', string="零点卡盘型号", required=True, domain=[('fixture_material_type', '=', '零点卡盘')]) transfer_tray_model_ids = fields.Many2many('sf.fixture.model', 'rel_fixture_model_transfer_tray', string="转接板(锁板)托盘型号", domain=[('fixture_material_type', '=', '转接板(锁板)托盘')]) pneumatic_tray_model_ids = fields.Many2many('sf.fixture.model', 'rel_fixture_model_pneumatic_tray', string="气动托盘型号", domain=[('fixture_material_type', '=', '气动托盘')]) magnetic_tray_model_ids = fields.Many2many('sf.fixture.model', 'rel_fixture_model_magnetic_tray', string="磁吸托盘型号", domain=[('fixture_material_type', '=', '磁吸托盘')]) vice_tray_model_ids = fields.Many2many('sf.fixture.model', 'rel_fixture_model_vice_tray', string="虎钳托盘型号", domain=[('fixture_material_type', '=', '虎钳托盘')]) registration_status = fields.Selection([("已注册", "已注册"), ("未注册", "未注册")], string="注册状态", default='未注册', tracking=True) @api.onchange('type_id') def _onchange_type_id(self): if self.type_id: functional_fixture_type = self.search( [('type', '=', self.type)], limit=1, order='id desc') if not functional_fixture_type: num = "%04d" % 1 else: m = int(functional_fixture_type.code[-3:]) + 1 num = "%04d" % m self.code = "%s%s-%s" % ('JKM-C-GNJJ-', self.type_id.code, num) _sql_constraints = [ ('code_uniq', 'unique (code)', '编码不能重复') ] @api.depends('transfer_tray_model_ids', 'pneumatic_tray_model_ids', 'magnetic_tray_model_ids', 'vice_tray_model_ids', 'type') def _get_name(self): for record in self: if record.type: if not record.transfer_tray_model_ids and not record.pneumatic_tray_model_ids and not record.magnetic_tray_model_ids and not record.vice_tray_model_ids: record.name = '' if record.transfer_tray_model_ids: for i in record.transfer_tray_model_ids: record.name = '%s%s%s' % ( i.display_name.split('-')[0], record.type, '功能夹具') if record.pneumatic_tray_model_ids: for i in record.pneumatic_tray_model_ids: record.name = '%s%s%s' % ( i.display_name.split('-')[0], record.type, '功能夹具') if record.magnetic_tray_model_ids: for i in record.magnetic_tray_model_ids: record.name = '%s%s%s' % ( i.display_name.split('-')[0], record.type, '功能夹具') if record.vice_tray_model_ids: for i in record.vice_tray_model_ids: record.name = '%s%s%s' % ( i.display_name.split('-')[0], record.type, '功能夹具') else: record.name = '' name = fields.Char(string="名称", compute=_get_name, readonly=True) def _json_zero_chuck_model_item_code(self, item): code_arr = [] for i in item.zero_chuck_model_ids: code_arr.append(i.code) return code_arr def _json_transfer_tray_model_item_code(self, item): code_arr = [] for i in item.transfer_tray_model_ids: code_arr.append(i.code) return code_arr def _json_vice_tray_item_code(self, item): code_arr = [] for i in item.vice_tray_model_ids: code_arr.append(i.code) return code_arr def _json_magnetic_tray_model_item_code(self, item): code_arr = [] for i in item.magnetic_tray_model_ids: code_arr.append(i.code) return code_arr def _json_pneumatic_tray_model_item_code(self, item): code_arr = [] for i in item.pneumatic_tray_model_ids: code_arr.append(i.code) return code_arr # 注册到cloud的功能夹具中 def register_functional_fixture(self): registration_url = 'api/functional_fixture/create' sf_sync_config = self.env['res.config.settings'].get_values() token = sf_sync_config['token'] sf_secret_key = sf_sync_config['sf_secret_key'] headers = Common.get_headers(self, token, sf_secret_key) strurl = sf_sync_config['sf_url'] + self.registration_url objs_self = self.search([('code', '=', self.code)]) functional_fixture_list = [] if objs_self: for item in objs_self: val = { 'factory_token': token, 'name': item.name, 'code': item.code, 'type_code': self.env['sf.functional.fixture.type'].search( [('id', '=', item.type_id.id)]).code, 'zero_chuck_model_codes': self.env['sf.functional.fixture']._json_zero_chuck_model_item_code( item), 'transfer_tray_model_codes': self.env['sf.functional.fixture']._json_transfer_tray_model_item_code( item), 'pneumatic_tray_model_codes': self.env[ 'sf.functional.fixture']._json_pneumatic_tray_model_item_code( item), 'magnetic_tray_model_codes': self.env['sf.functional.fixture']._json_magnetic_tray_model_item_code( item), 'vice_tray_model_codes': self.env['sf.functional.fixture']._json_vice_tray_item_code( item), } functional_fixture_list.append(val) # kw = machine_tool_list kw = json.dumps(functional_fixture_list, ensure_ascii=False) r = requests.post(strurl, json={}, data={'kw': kw, 'token': token}, headers=headers) ret = r.json() self.code = ret['message'] if r == 200: self.registration_status = "已注册" return "功能夹具注册成功" else: raise ValidationError("没有功能夹具注册信息")