夹具物料注册
This commit is contained in:
@@ -161,7 +161,7 @@
|
||||
<field name="name">夹具型号</field>
|
||||
<field name="model">sf.fixture.model</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="夹具型号" create="0" edit="0" delete="0">
|
||||
<tree string="夹具型号">
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="brand_id"/>
|
||||
@@ -175,7 +175,7 @@
|
||||
<field name="name">夹具型号</field>
|
||||
<field name="model">sf.fixture.model</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="夹具型号" create="0" edit="0" delete="0">
|
||||
<form string="夹具型号">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
|
||||
@@ -227,7 +227,7 @@
|
||||
<group string="参数"
|
||||
attrs='{"invisible": ["|",("fixture_model_id", "=", False),("fixture_material_type","not in",("气动托盘","转接板(锁板)托盘","磁吸托盘","虎钳托盘","零点卡盘"))]}'>
|
||||
<group>
|
||||
<label for="tool_length" string="尺寸[mm]"/>
|
||||
<label for="tool_length" string="尺寸(mm)"/>
|
||||
<div class="o_address_format">
|
||||
<label for="tool_length" string="长"/>
|
||||
<field name="tool_length" class="o_address_zip"
|
||||
@@ -242,7 +242,7 @@
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<field name="tool_weight"></field>
|
||||
<label for="fixture_clamp_workpiece_length_max" string="夹持工件最大尺寸[mm]"
|
||||
<label for="fixture_clamp_workpiece_length_max" string="夹持工件最大尺寸(mm)"
|
||||
attrs='{"invisible": [("fixture_material_type","=",("零点卡盘"))]}'/>
|
||||
<div class="o_address_format"
|
||||
attrs='{"invisible": [("fixture_material_type","=",("零点卡盘"))]}'>
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
from odoo import models, fields, api
|
||||
from odoo.addons.sf_base.commons.common import Common
|
||||
from odoo.exceptions import ValidationError,UserError
|
||||
import requests
|
||||
import json
|
||||
|
||||
|
||||
class ResProductMo(models.Model):
|
||||
@@ -14,10 +10,10 @@ class ResProductMo(models.Model):
|
||||
string='产品的类别', related='categ_id.type',
|
||||
store=True)
|
||||
model_name = fields.Char('模型名称')
|
||||
model_long = fields.Float('模型长[mm]', digits=(16, 3))
|
||||
model_width = fields.Float('模型宽[mm]', digits=(16, 3))
|
||||
model_height = fields.Float('模型高[mm]', digits=(16, 3))
|
||||
model_volume = fields.Float('模型体积[m³]')
|
||||
model_long = fields.Float('模型长(mm)', digits=(16, 3))
|
||||
model_width = fields.Float('模型宽(mm)', digits=(16, 3))
|
||||
model_height = fields.Float('模型高(mm)', digits=(16, 3))
|
||||
model_volume = fields.Float('模型体积(m³)')
|
||||
model_machining_precision = fields.Selection([
|
||||
('0.10', '±0.10mm'),
|
||||
('0.05', '±0.05mm'),
|
||||
@@ -26,9 +22,9 @@ class ResProductMo(models.Model):
|
||||
('0.01', '±0.01mm')], string='加工精度')
|
||||
model_processing_panel = fields.Char('模型加工面板')
|
||||
model_remark = fields.Char('模型备注说明')
|
||||
length = fields.Float('长[mm]', digits=(16, 3))
|
||||
width = fields.Float('宽[mm]', digits=(16, 3))
|
||||
height = fields.Float('高[mm]', digits=(16, 3))
|
||||
length = fields.Float('长(mm)', digits=(16, 3))
|
||||
width = fields.Float('宽(mm)', digits=(16, 3))
|
||||
height = fields.Float('高(mm)', digits=(16, 3))
|
||||
single_manufacturing = fields.Boolean(string="单个制造")
|
||||
|
||||
model_code = fields.Char('模型编码')
|
||||
@@ -50,21 +46,22 @@ class ResProductMo(models.Model):
|
||||
)
|
||||
|
||||
brand_id = fields.Many2one('sf.machine.brand', '品牌')
|
||||
tool_length = fields.Integer('长度L[mm]', size=6)
|
||||
tool_width = fields.Integer('宽度D[mm])', size=6)
|
||||
tool_height = fields.Integer('高度T[mm]', size=6)
|
||||
tool_weight = fields.Float('重量[kg]', size=4)
|
||||
manufacturer_model_number = fields.Char('厂家型号')
|
||||
tool_length = fields.Integer('长度L(mm)', size=6)
|
||||
tool_width = fields.Integer('宽度D(mm)', size=6)
|
||||
tool_height = fields.Integer('高度T(mm)', size=6)
|
||||
tool_weight = fields.Float('重量(kg)', size=4)
|
||||
# 整体式刀具参数
|
||||
cutting_tool_total_length = fields.Float('总长度[mm]')
|
||||
cutting_tool_shank_length = fields.Float('柄部长度[mm]')
|
||||
cutting_tool_blade_length = fields.Float('刃部长度[mm]')
|
||||
cutting_tool_diameter = fields.Float('直径[mm]')
|
||||
cutting_tool_total_length = fields.Float('总长度(mm)')
|
||||
cutting_tool_shank_length = fields.Float('柄部长度(mm)')
|
||||
cutting_tool_blade_length = fields.Float('刃部长度(mm)')
|
||||
cutting_tool_diameter = fields.Float('直径(mm)')
|
||||
cutting_tool_blade_number = fields.Integer('刃数')
|
||||
cutting_tool_front_angle = fields.Float('前角[°]')
|
||||
cutting_tool_rear_angle = fields.Float('后角[°]')
|
||||
cutting_tool_main_included_angle = fields.Float('主偏角[°]')
|
||||
cutting_tool_front_angle = fields.Float('前角(°)')
|
||||
cutting_tool_rear_angle = fields.Float('后角(°)')
|
||||
cutting_tool_main_included_angle = fields.Float('主偏角(°)')
|
||||
cutting_tool_material_model_id = fields.Many2one('sf.materials.model', '材料型号')
|
||||
cutting_tool_nut = fields.Float('配对螺母[mm]')
|
||||
cutting_tool_nut = fields.Float('配对螺母(mm)')
|
||||
# 适用夹头型号可以多选
|
||||
cutting_tool_chuck_model_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
@@ -76,8 +73,8 @@ class ResProductMo(models.Model):
|
||||
cutting_tool_scope = fields.Char('适用范围')
|
||||
# 刀片参数
|
||||
|
||||
cutting_tool_top_angle = fields.Float('顶角[°]')
|
||||
cutting_tool_r_angle = fields.Float('R角[°]')
|
||||
cutting_tool_top_angle = fields.Float('顶角(°)')
|
||||
cutting_tool_r_angle = fields.Float('R角(°)')
|
||||
cutting_tool_working_hardness = fields.Char('加工硬度')
|
||||
cutting_tool_cutter_bar_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
@@ -95,11 +92,11 @@ class ResProductMo(models.Model):
|
||||
domain="[('mrs_cutting_tool_material_id.name', '=', '刀盘')]",
|
||||
string='适用刀盘型号' # 使用空列表作为默认值
|
||||
)
|
||||
cutting_tool_radius = fields.Float('刀尖半径[mm]')
|
||||
cutting_tool_radius = fields.Float('刀尖半径(mm)')
|
||||
# 刀杆/刀盘参数
|
||||
cutting_tool_c_diameter = fields.Float('C柄径[mm]')
|
||||
cutting_tool_l_total_length = fields.Float('L总长[mm]')
|
||||
cutting_tool_d_diameter = fields.Float('D刃径[mm]')
|
||||
cutting_tool_c_diameter = fields.Float('C柄径(mm)')
|
||||
cutting_tool_l_total_length = fields.Float('L总长(mm)')
|
||||
cutting_tool_d_diameter = fields.Float('D刃径(mm)')
|
||||
cutting_tool_blade_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
relation='product_cutting_tool_model_pad_blade_rel',
|
||||
@@ -108,25 +105,25 @@ class ResProductMo(models.Model):
|
||||
domain="[('mrs_cutting_tool_material_id.name', '=', '刀片')]",
|
||||
string='适用刀片型号' # 使用空列表作为默认值
|
||||
)
|
||||
cutting_tool_wrench = fields.Float('配对扳手[mm]')
|
||||
cutting_tool_screw = fields.Float('配备螺丝[mm]')
|
||||
cutting_tool_wrench = fields.Float('配对扳手(mm)')
|
||||
cutting_tool_screw = fields.Float('配备螺丝(mm)')
|
||||
cutting_tool_accuracy_level = fields.Char('精度等级')
|
||||
cutting_tool_rounded_corner = fields.Float('刀尖圆角半径[mm]')
|
||||
cutting_tool_hardness = fields.Char('硬度[°]')
|
||||
cutting_tool_rounded_corner = fields.Float('刀尖圆角半径(mm)')
|
||||
cutting_tool_hardness = fields.Char('硬度(°)')
|
||||
# 刀柄参数
|
||||
cutting_tool_handle_length = fields.Float('L[mm]')
|
||||
cutting_tool_length1 = fields.Float('L1[mm]')
|
||||
cutting_tool_diameter1 = fields.Float('D1[mm]')
|
||||
cutting_tool_handle_length = fields.Float('L(mm)')
|
||||
cutting_tool_length1 = fields.Float('L1(mm)')
|
||||
cutting_tool_diameter1 = fields.Float('D1(mm)')
|
||||
|
||||
cutting_tool_body_accuracy = fields.Float('本体精度[mm]')
|
||||
cutting_tool_clamping_range = fields.Float('夹持范围[mm]')
|
||||
cutting_tool_body_accuracy = fields.Float('本体精度(mm)')
|
||||
cutting_tool_clamping_range = fields.Float('夹持范围(mm)')
|
||||
cutting_tool_detection_accuracy = fields.Float('检测精度')
|
||||
cutting_tool_detection_hardness = fields.Float('检测硬度')
|
||||
cutting_tool_standard_speed = fields.Float('标准转速')
|
||||
# 夹头参数
|
||||
cutting_tool_accuracy = fields.Float('精度[mm]')
|
||||
cutting_tool_outer_diameter = fields.Float('外径[mm]')
|
||||
cutting_tool_inner_diameter = fields.Float('内径[mm]')
|
||||
cutting_tool_accuracy = fields.Float('精度(mm)')
|
||||
cutting_tool_outer_diameter = fields.Float('外径(mm)')
|
||||
cutting_tool_inner_diameter = fields.Float('内径(mm)')
|
||||
cutting_tool_handle_model_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
relation='product_cutting_tool_model_chuck_handle_rel',
|
||||
@@ -144,21 +141,23 @@ class ResProductMo(models.Model):
|
||||
fixture_clamping_way = fields.Char(string="装夹方式")
|
||||
fixture_port_type = fields.Char(string="接口类型")
|
||||
fixture_model_file = fields.Binary(string="3D模型图")
|
||||
fixture_clamp_workpiece_length_max = fields.Integer(string="夹持工件长度MAX[mm]", size=6)
|
||||
fixture_clamp_workpiece_width_max = fields.Integer(string="夹持工件宽度MAX[mm]", size=6)
|
||||
fixture_clamp_workpiece_height_max = fields.Integer(string="夹持工件高度MAX[mm]", size=6)
|
||||
fixture_clamp_workpiece_diameter_max = fields.Float(string="夹持工件直径MAX[mm]", digits=(16, 6))
|
||||
fixture_maximum_carrying_weight = fields.Float(string="最大承载重量[kg]", digits=(16, 4))
|
||||
fixture_maximum_clamping_force = fields.Integer(string="最大夹持力[n]", size=8)
|
||||
fixture_clamp_workpiece_length_max = fields.Integer(string="夹持工件长度MAX(mm)", size=6)
|
||||
fixture_clamp_workpiece_width_max = fields.Integer(string="夹持工件宽度MAX(mm)", size=6)
|
||||
fixture_clamp_workpiece_height_max = fields.Integer(string="夹持工件高度MAX(mm)", size=6)
|
||||
fixture_clamp_workpiece_diameter_max = fields.Float(string="夹持工件直径MAX(mm)", digits=(16, 6))
|
||||
fixture_maximum_carrying_weight = fields.Float(string="最大承载重量(kg)", digits=(16, 4))
|
||||
fixture_maximum_clamping_force = fields.Integer(string="最大夹持力(n)", size=8)
|
||||
fixture_driving_way = fields.Char(string="驱动方式")
|
||||
fixture_apply_machine_tool_type_ids = fields.Many2many('sf.machine_tool.type', 'rel_product_machine_tool_type',
|
||||
string="适用机床型号")
|
||||
fixture_through_hole_size = fields.Integer(string="过孔大小[mm]", size=6)
|
||||
fixture_screw_size = fields.Integer(string="螺牙大小[mm]", size=6)
|
||||
fixture_through_hole_size = fields.Integer(string="过孔大小(mm)", size=6)
|
||||
fixture_screw_size = fields.Integer(string="螺牙大小(mm)", size=6)
|
||||
# 注册状态
|
||||
register_state = fields.Selection([('未注册', '未注册'), ('已注册', '已注册'),('注册失败','注册失败')], string='注册状态', default='未注册')
|
||||
|
||||
def _json_apply_machine_tool_type_item_code(self, item):
|
||||
code_arr = []
|
||||
for i in item.fixture_apply_machine_tool_type_ids:
|
||||
for i in item.product_id.fixture_apply_machine_tool_type_ids:
|
||||
code_arr.append(i.code)
|
||||
return code_arr
|
||||
|
||||
@@ -216,7 +215,7 @@ class ResProductMo(models.Model):
|
||||
item.fixture_clamp_workpiece_width_max = item.fixture_model_id.clamp_workpiece_width_max
|
||||
item.fixture_clamp_workpiece_height_max = item.fixture_model_id.clamp_workpiece_height_max
|
||||
item.fixture_clamp_workpiece_diameter_max = item.fixture_model_id.clamp_workpiece_diameter_max
|
||||
item.fixture_apply_machine_tool_type_id = self._get_ids(item.fixture_model_id.apply_machine_tool_type_ids)
|
||||
item.fixture_apply_machine_tool_type_ids = self._get_ids(item.fixture_model_id.apply_machine_tool_type_ids)
|
||||
|
||||
@api.onchange('cutting_tool_model_id')
|
||||
def _onchange_cutting_tool_model_id(self):
|
||||
@@ -360,42 +359,6 @@ class ResProductMo(models.Model):
|
||||
item.cutting_tool_standard_speed = False
|
||||
item.image_1920 = False
|
||||
|
||||
# 将采购到的夹具注册到Cloud
|
||||
def _register_fixture(self):
|
||||
config = self.env['res.config.settings'].get_values()
|
||||
headers = Common.get_headers(self, config['token'], config['sf_secret_key'])
|
||||
strurl = config['sf_url'] + self.crea_url
|
||||
for item in self:
|
||||
val = {
|
||||
'factory_token': config['token'],
|
||||
'name': item.name,
|
||||
'brand_id': item.brand_id.code,
|
||||
'materials_type_id': item.materials_type_id.code,
|
||||
'fixture_material_code': item.fixture_material_id.code,
|
||||
'fixture_multi_mounting_type_id': item.fixture_multi_mounting_type_id.code,
|
||||
'fixture_clamping_way': item.fixture_clamping_way,
|
||||
'fixture_port_type': item.fixture_port_type,
|
||||
'fixture_clamp_workpiece_length_max': item.fixture_clamp_workpiece_length_max,
|
||||
'fixture_clamp_workpiece_width_max': item.fixture_clamp_workpiece_width_max,
|
||||
'fixture_clamp_workpiece_height_max': item.fixture_clamp_workpiece_height_max.id,
|
||||
'fixture_clamp_workpiece_diameter_max': item.fixture_clamp_workpiece_diameter_max,
|
||||
'fixture_maximum_carrying_weight': item.fixture_maximum_carrying_weight,
|
||||
'fixture_maximum_clamping_force': item.fixture_maximum_clamping_force,
|
||||
'fixture_driving_way': item.fixture_driving_way,
|
||||
'fixture_apply_machine_tool_type_ids': self._json_apply_machine_tool_type_item_code(item),
|
||||
'fixture_through_hole_size': item.fixture_through_hole_size,
|
||||
'fixture_screw_size': item.fixture_screw_size,
|
||||
}
|
||||
try:
|
||||
ret = requests.post(strurl, json={}, data=val, headers=headers)
|
||||
ret = ret.json()
|
||||
if ret['status'] == 200:
|
||||
raise UserError(ret['message'])
|
||||
else:
|
||||
raise UserError(ret['message'])
|
||||
except Exception as e:
|
||||
raise UserError("注册夹具到云端失败,请联系管理员!")
|
||||
|
||||
|
||||
class ResMrpBomMo(models.Model):
|
||||
_inherit = 'mrp.bom'
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from collections import defaultdict, namedtuple
|
||||
from odoo.addons.stock.models.stock_rule import ProcurementException
|
||||
from odoo.addons.sf_base.commons.common import Common
|
||||
from odoo.exceptions import ValidationError, UserError
|
||||
import requests
|
||||
import json
|
||||
from re import findall as regex_findall
|
||||
from datetime import datetime
|
||||
from re import split as regex_split
|
||||
@@ -278,9 +282,56 @@ class StockPicking(models.Model):
|
||||
_('该入库单对应的单号为%s的出库单还未完成,不能进行验证操作!' % picking_out.name))
|
||||
# 采购单验证(夹具和刀具)
|
||||
if self.product_id.categ_type in ['刀具', '夹具']:
|
||||
self._register_fixture()
|
||||
res = super().button_validate()
|
||||
return res
|
||||
|
||||
# 将采购到的夹具注册到Cloud
|
||||
def _register_fixture(self):
|
||||
create_url = '/api/fixture/create'
|
||||
config = self.env['res.config.settings'].get_values()
|
||||
headers = Common.get_headers(self, config['token'], config['sf_secret_key'])
|
||||
strurl = config['sf_url'] + create_url
|
||||
for item in self:
|
||||
val = {
|
||||
'token': config['token'],
|
||||
'name': item.name,
|
||||
'brand_code': self.env['sf.machine.brand'].search([('id', '=', item.product_id.brand_id.id)]).code,
|
||||
'manufacturer_model_number': item.product_id.manufacturer_model_number,
|
||||
'fixture_material_code': self.env['sf.fixture.material'].search(
|
||||
[('id', '=', item.product_id.fixture_material_id.id)]).code,
|
||||
'fixture_multi_mounting_type_code': self.env['sf.multi_mounting.type'].search(
|
||||
[('id', '=', item.product_id.fixture_multi_mounting_type_id.id)]).code,
|
||||
'fixture_materials_type_code': self.env['sf.materials.model'].search(
|
||||
[('id', '=', item.product_id.materials_type_id.id)]).materials_no,
|
||||
'fixture_clamping_way': item.product_id.fixture_clamping_way,
|
||||
'fixture_port_type': item.product_id.fixture_port_type,
|
||||
'fixture_length': item.product_id.tool_length,
|
||||
'fixture_width': item.product_id.tool_width,
|
||||
'fixture_height': item.product_id.tool_height,
|
||||
'fixture_weight': item.product_id.tool_weight,
|
||||
'fixture_clamp_workpiece_length_max': item.product_id.fixture_clamp_workpiece_length_max,
|
||||
'fixture_clamp_workpiece_width_max': item.product_id.fixture_clamp_workpiece_width_max,
|
||||
'fixture_clamp_workpiece_height_max': item.product_id.fixture_clamp_workpiece_height_max,
|
||||
'fixture_clamp_workpiece_diameter_max': item.product_id.fixture_clamp_workpiece_diameter_max,
|
||||
'fixture_maximum_carrying_weight': item.product_id.fixture_maximum_carrying_weight,
|
||||
'fixture_maximum_clamping_force': item.product_id.fixture_maximum_clamping_force,
|
||||
'fixture_driving_way': item.product_id.fixture_driving_way,
|
||||
'fixture_apply_machine_tool_type_codes': self.env[
|
||||
'product.template']._json_apply_machine_tool_type_item_code(item),
|
||||
'fixture_through_hole_size': item.product_id.fixture_through_hole_size,
|
||||
'fixture_screw_size': item.product_id.fixture_screw_size,
|
||||
}
|
||||
try:
|
||||
ret = requests.post(strurl, json={}, data=val, headers=headers)
|
||||
ret = ret.json()
|
||||
if ret['status'] == 200:
|
||||
item.product_id.write({'register_state': '已注册'})
|
||||
else:
|
||||
item.product_id.write({'register_state': '注册失败'})
|
||||
except Exception as e:
|
||||
raise UserError("注册夹具到云端失败,请联系管理员!")
|
||||
|
||||
# 创建 外协出库入单
|
||||
def create_outcontract_picking(self, sorted_workorders_arr, item):
|
||||
m = 0
|
||||
|
||||
Reference in New Issue
Block a user