160 lines
7.5 KiB
Python
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("没有功能夹具注册信息")
|