Files
test/sf_base/models/functional_fixture.py
jinling.yang 6e6b0b66d3 去掉警告
2023-08-29 10:22:12 +08:00

160 lines
7.5 KiB
Python

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='未注册')
active = fields.Boolean('有效', default=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("没有功能夹具注册信息")