import json import base64 import requests from odoo import models, api from odoo.addons.sf_base.commons.common import Common from odoo.exceptions import UserError class StockLot(models.Model): _inherit = 'stock.lot' _description = '夹具物料序列号注册' def enroll_fixture_material_stock(self): 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) str_url = sf_sync_config['sf_url'] + "/api/fixture_material_stock/create" objs_all = self.env['stock.lot'].search([('id', '=', self.id)]) fixture_material_stock_list = [] if objs_all: for item in objs_all: val = { 'name': item.name, 'tool_material_status': item.tool_material_status, 'location': [] if not item.quant_ids else item.quant_ids[-1].location_id.name, 'fixture_material_search_id': item.fixture_material_search_id.id, } fixture_material_stock_list.append(val) kw = json.dumps(fixture_material_stock_list, ensure_ascii=False) r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) ret = r.json() if ret.get('code') == 200: return '夹具物料序列号注册成功' else: raise UserError("没有注册夹具物料序列号信息") class FixtureMaterialSearch(models.Model): _inherit = 'sf.fixture.material.search' _description = '夹具物料搜索注册' crea_url = "/api/fixture_material/create" def enroll_fixture_material(self): 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) str_url = sf_sync_config['sf_url'] + self.crea_url objs_all = self.search([('id', '=', self.id)]) fixture_material_list = [] if objs_all: for obj in objs_all: val = { 'name': obj.name, 'id': obj.id, 'fixture_material_code': obj.fixture_material_id.code, 'fixture_model_code': obj.fixture_model_id.code, 'specification_name': obj.specification_fixture_id.name, 'image': '' if not obj.image else base64.b64encode(obj.image).decode('utf-8'), 'number': obj.number, 'usable_num': obj.usable_num, 'have_been_used_num': obj.have_been_used_num, 'scrap_num': obj.scrap_num } fixture_material_list.append(val) kw = json.dumps(fixture_material_list, ensure_ascii=False) r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) ret = r.json() if ret.get('code') == 200: return '夹具物料注册成功' else: raise UserError("没有注册夹具物料信息") @api.model_create_multi def create(self, vals_list): records = super(FixtureMaterialSearch, self).create(vals_list) for record in records: if record: record.enroll_fixture_material() return records