# -*- coding: utf-8 -*- import logging from datetime import datetime import requests import json from odoo import fields, models, api from odoo.exceptions import ValidationError from odoo.http import request from odoo.addons.sf_base.commons.common import Common _logger = logging.getLogger(__name__) class MachineBrandTags(models.Model): _name = 'mrs.machine.brand.tags' _description = '标签' name = fields.Char('名称', size=50) color = fields.Integer('颜色', default=0) class MachineControlSystem(models.Model): _name = 'mrs.machine.control_system' _description = '控制系统' code = fields.Char('编码', size=10) name = fields.Char('名称', size=10) brand_id = fields.Many2one('mrs.machine.brand', '品牌') active = fields.Boolean('有效', default=True) # 品牌标签 class MachineBrand(models.Model): _name = 'mrs.machine.brand' _description = '品牌' name = fields.Char('名称') tag_ids = fields.Many2many('mrs.machine.brand.tags', 'rel_machine_brand_tags', string='类别') image_brand = fields.Image("品牌图片") active = fields.Boolean('有效', default=True) code = fields.Char('编码') # 机床 class MachineTool(models.Model): _name = 'mrs.machine_tool' _description = '机床' MTcode = fields.Char("编码") code = fields.Char('行业编码') name = fields.Char('名称') knife_type = fields.Selection( [("BT40", "BT40"), ("BT30", "BT30")], default="", string="刀把类型") number_of_knife_library = fields.Integer('刀库数量') rotate_speed = fields.Integer('转速') number_of_axles = fields.Selection( [("三轴", "三轴"), ("四轴", "四轴"), ("五轴", "五轴")], default="", string="轴数") # 加工进程 x_axis = fields.Integer('X轴') y_axis = fields.Integer('Y轴') z_axis = fields.Integer('Z轴') b_axis = fields.Integer('B轴') c_axis = fields.Integer('C轴') remark = fields.Text('备注') precision = fields.Float('加工精度') control_system_id = fields.Many2one('mrs.machine.control_system', string="控制系统") # 多个机床型号对应一个机床 type_id = fields.Many2one('mrs.machine_tool.type', '型号') brand_id = fields.Many2one('mrs.machine.brand', string='品牌') state = fields.Selection( [("正常", "正常"), ("故障", "故障"), ("不可用", "不可用")], default='正常', string="状态") # 一个机床对应一個加工工厂,一个加工工厂对应多个机床 factory_id = fields.Many2one('res.partner', string='所属工厂', domain="[('is_factory', '=', True)]") # 一个机床对应一个供应商,一个供应商对应多个机床 supplier_id = fields.Many2one('res.partner', string='制造商', domain="[('is_vendor', '=', True)]") registration_date = fields.Date('注册日期') active = fields.Boolean('有效', default=True) @api.constrains('rotate_speed') def _check_rotate_speed(self): if self.rotate_speed <= 0: raise ValidationError("转速不能为0") @api.constrains('precision') def _check_precision(self): if self.precision <= 0.00: raise ValidationError("加工精度不能为0") @api.constrains('number_of_knife_library') def _check_number_of_knife_library(self): if self.number_of_knife_library <= 0: raise ValidationError("刀库数量不能为0") @api.constrains('x_axis') def _check_x_axis(self): if self.x_axis <= 0: raise ValidationError("加工行程里x轴不能为0") @api.constrains('y_axis') def _check_y_axis(self): if self.y_axis <= 0: raise ValidationError("加工行程里y轴不能为0") @api.constrains('z_axis') def _check_z_axis(self): if self.z_axis <= 0: raise ValidationError("加工行程里z轴不能为0") @api.constrains('b_axis') def _check_b_axis(self): if self.number_of_axles == '四轴': print(self.number_of_axles) if self.b_axis <= 0: raise ValidationError("加工行程里b轴不能为0") @api.constrains('c_axis') def _check_c_axis(self): if self.number_of_axles == '五轴': if self.c_axis <= 0: raise ValidationError("加工行程里c轴不能为0") @api.onchange('type_id') def get_type_info(self): for item in self: item.knife_type = item.type_id.knife_type item.number_of_knife_library = item.type_id.number_of_knife_library item.number_of_axles = item.type_id.number_of_axles item.rotate_speed = item.type_id.rotate_speed item.precision = item.type_id.precision item.control_system_id = item.type_id.control_system_id item.x_axis = item.type_id.x_axis item.y_axis = item.type_id.y_axis item.z_axis = item.type_id.z_axis item.b_axis = item.type_id.b_axis item.c_axis = item.type_id.c_axis # 注册同步机床 def enroll_machine_tool(self): sf_sync_config = self.env['res.config.settings'].get_values() token = sf_sync_config['token'] mrs_secret_key = sf_sync_config['mrs_secret_key'] headers = Common.get_headers(self, token, mrs_secret_key) strurl = sf_sync_config['mrs_url'] + self.crea_url objs_all = request.env['mrs.machine_tool'].sudo().search([]) machine_tool_list = [] if objs_all: for item in objs_all: val = { 'factory_token': token, 'id': item.id, 'name': item.name, 'code': item.code, 'precision': item.precision, 'knife_type': item.knife_type, 'number_of_knife_library': item.number_of_knife_library, 'rotate_speed': item.rotate_speed, 'number_of_axles': item.number_of_axles, 'control_system_id': self.env['mrs.machine.control_system'].search( [('id', '=', item.control_system_id.id)]).code, 'type_id': self.env['mrs.machine_tool.type'].search([('id', '=', item.type_id.id)]).code, 'brand_id': self.env['mrs.machine.brand'].search([('id', '=', item.brand_id.id)]).code, 'supplier_id': item.supplier_id.id, 'x_axis': item.x_axis, 'y_axis': item.y_axis, 'z_axis': item.z_axis, 'b_axis': item.b_axis, 'c_axis': item.c_axis, 'state': item.state, 'active': item.active, } machine_tool_list.append(val) # kw = machine_tool_list kw = json.dumps(machine_tool_list, ensure_ascii=False) r = requests.post(strurl, json={}, data={'kw': kw}, headers=headers) print(r) if r == 200: raise ValidationError("机床注册成功") else: raise ValidationError("没有注册机床信息") class MachineToolType(models.Model): _name = 'mrs.machine_tool.type' _description = '机床型号' # _order = 'priority desc, code, name, id' name = fields.Char('名称') brand_id = fields.Many2one('mrs.machine.brand', string='品牌') knife_type = fields.Selection( [("BT40", "BT40"), ("BT30", "BT30")], default="", string="刀把类型") number_of_knife_library = fields.Integer('刀库数量') rotate_speed = fields.Integer('转速') # 多个型号对应一个机床 machine_tool_id = fields.Many2one('mrs.machine_tool', '机床') number_of_axles = fields.Selection( [("三轴", "三轴"), ("四轴", "四轴"), ("五轴", "五轴")], default="", string="轴数") # 加工进程 x_axis = fields.Integer('X轴') y_axis = fields.Integer('Y轴') z_axis = fields.Integer('Z轴') b_axis = fields.Integer('B轴') c_axis = fields.Integer('C轴') remark = fields.Text('备注') precision = fields.Float('加工精度') control_system_id = fields.Many2one('mrs.machine.control_system', string="控制系统") active = fields.Boolean('有效', default=True) code = fields.Char('编码') # 刀具 class CuttingTool(models.Model): _name = 'mrs.cutting_tool.category' _description = '刀具类别' code = fields.Char('编码') name = fields.Char('名称') remark = fields.Text('备注') active = fields.Boolean('有效', default=True) class CuttingToolType(models.Model): _name = 'mrs.cutting_tool.type' _description = '刀具型号' code = fields.Char('编码') name = fields.Char('名称') diameter = fields.Integer('直径') long_blade = fields.Integer('避空长/刃长') cone_angle_pitch = fields.Integer('锥角/节距') shank_diameter = fields.Integer('柄径') taper_shank_length = fields.Integer('锥柄长') tool_length = fields.Integer('刀具总长') blade_number = fields.Integer('刃数') category_id = fields.Many2one('mrs.cutting_tool.category', string='刀具类别') brand_id = fields.Many2one('mrs.machine.brand', string='品牌') remark = fields.Text('备注') active = fields.Boolean('有效', default=True) class CNCprocessing(models.Model): _name = 'cnc.processing' _description = "CNC加工" cnc_id = fields.Many2one('ir.attachment') FNo = fields.Char(string="序号") FPGName = fields.Char(string="程序名") FKnifeName = fields.Char(string="刀具名称") FDNo = fields.Char(string="刀号") FWorkType = fields.Char(string="加工类型") FXY = fields.Char(string="余量_X/Y") FZ = fields.Char(string="余量_Z") FJGSD = fields.Char(string="加工深度(Z)") FSCCD = fields.Char(string="刀具伸出长度") FDJSpec = fields.Char(string="刀柄型号") FJGDate = fields.Datetime(string="预计加工时间") FComment = fields.Char(string="备注")