Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/制造优化
This commit is contained in:
@@ -8,7 +8,6 @@ from . import mrp_routing_workcenter
|
||||
from . import stock
|
||||
from . import res_user
|
||||
from . import production_line_base
|
||||
from . import tool_other_features
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
from odoo import models, fields, api
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.modules import get_resource_path
|
||||
from odoo.addons.sf_base.commons.common import Common
|
||||
from OCC.Extend.DataExchange import read_step_file
|
||||
from OCC.Extend.DataExchange import write_stl_file
|
||||
import logging
|
||||
import base64
|
||||
import hashlib
|
||||
import os
|
||||
import requests
|
||||
import json
|
||||
|
||||
|
||||
class ResProductMo(models.Model):
|
||||
@@ -44,7 +47,6 @@ class ResProductMo(models.Model):
|
||||
width = fields.Float('宽(mm)', digits=(16, 3))
|
||||
height = fields.Float('高(mm)', digits=(16, 3))
|
||||
single_manufacturing = fields.Boolean(string="单个制造")
|
||||
|
||||
model_code = fields.Char('模型编码')
|
||||
is_bfm = fields.Boolean('业务平台是否自动创建', default=False)
|
||||
upload_model_file = fields.Many2many('ir.attachment', 'upload_model_file_attachment_ref', string='上传模型文件')
|
||||
@@ -60,16 +62,18 @@ class ResProductMo(models.Model):
|
||||
cutting_tool_material_id = fields.Many2one('sf.cutting.tool.material', string='刀具物料')
|
||||
cutting_tool_type = fields.Char(string="刀具物料类型", related='cutting_tool_material_id.name', store=True)
|
||||
|
||||
cutting_tool_model_id = fields.Many2one('sf.cutting.tool.model', string='型号',
|
||||
)
|
||||
cutting_tool_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='型号')
|
||||
specification_id = fields.Many2one('sf.tool.materials.basic.parameters', string='规格')
|
||||
|
||||
cutting_tool_type_id = fields.Many2one('sf.cutting.tool.type', string='类型',
|
||||
domain="[('cutting_tool_material_id.name', '=', cutting_tool_type)]")
|
||||
|
||||
brand_id = fields.Many2one('sf.machine.brand', '品牌')
|
||||
|
||||
tool_length = fields.Float('长度(mm)')
|
||||
tool_width = fields.Float('宽度(mm)')
|
||||
tool_height = fields.Float('高度(mm)')
|
||||
tool_thickness = fields.Integer('厚度(mm)')
|
||||
tool_thickness = fields.Float('厚度(mm)')
|
||||
tool_weight = fields.Float('重量(kg)')
|
||||
tool_hardness = fields.Integer('硬度(hrc)')
|
||||
|
||||
@@ -77,7 +81,7 @@ class ResProductMo(models.Model):
|
||||
# 整体式刀具特有字段
|
||||
cutting_tool_total_length = fields.Float('总长度(mm)', digits=(6, 1))
|
||||
cutting_tool_shank_length = fields.Float('柄部长度(mm)', digits=(6, 1))
|
||||
cutting_tool_blade_length = fields.Float('刃部长度(mm)', digits=(6, 1))
|
||||
cutting_tool_blade_length = fields.Char('刃部长度(mm)')
|
||||
cutting_tool_blade_number = fields.Selection(
|
||||
[('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('6', '6'), ('7', '7'), ('8', '8')], '刃数(个)')
|
||||
# 整体式刀具新增字段
|
||||
@@ -88,13 +92,21 @@ class ResProductMo(models.Model):
|
||||
cutting_tool_blade_tip_taper = fields.Integer('刀尖锥度(°)')
|
||||
cutting_tool_blade_helix_angle = fields.Integer('刃部螺旋角(°)')
|
||||
cutting_tool_blade_type = fields.Char('刃部类型')
|
||||
cutting_tool_pitch = fields.Char('牙距(mm)', size=20)
|
||||
cutting_tool_blade_width = fields.Char('刃部宽度(mm)', size=20)
|
||||
cutting_tool_blade_depth = fields.Char('刃部深度(mm)', size=20)
|
||||
cutting_tool_cut_depth = fields.Char('切削深度(mm)', size=20)
|
||||
cutting_tool_cut_depth_max = fields.Char('最大切削深度(mm)', size=20)
|
||||
cutting_tool_coarse_medium_fine = fields.Selection([('粗', '粗'), ('中', '中'), ('精', '精')], '粗/中/精')
|
||||
cutting_tool_run_out_accuracy_max = fields.Float('端跳精度max', digits=(6, 1))
|
||||
cutting_tool_run_out_accuracy_min = fields.Float('端跳精度min', digits=(6, 1))
|
||||
cutting_tool_blade_tip_working_size = fields.Char('刀尖处理尺寸(R半径mm/倒角)', size=20)
|
||||
fit_blade_shape_id = fields.Many2many('maintenance.equipment.image', 'rel_fit_blade_shape_product_template',
|
||||
'适配刀片形状', domain=[('type', '=', '刀片形状')])
|
||||
suitable_machining_method_ids = fields.Many2many('maintenance.equipment.image',
|
||||
'rel_machining_product_template', '适合加工方式',
|
||||
domain=[('type', '=', '加工能力')])
|
||||
blade_tip_characteristics_ids = fields.Many2many('maintenance.equipment.image',
|
||||
blade_tip_characteristics_id = fields.Many2many('maintenance.equipment.image',
|
||||
'rel_blade_tip_product_template', '刀尖特征',
|
||||
domain=[('type', '=', '刀尖特征')])
|
||||
handle_type_ids = fields.Many2many('maintenance.equipment.image', 'rel_handle_product_template', '柄部类型',
|
||||
@@ -103,6 +115,215 @@ class ResProductMo(models.Model):
|
||||
'走刀方向', domain=[('type', '=', '走刀方向')])
|
||||
suitable_coolant_ids = fields.Many2many('maintenance.equipment.image', 'rel_coolant_product_template',
|
||||
'适合冷却液', domain=[('type', '=', '冷却液')])
|
||||
compaction_way_ids = fields.Many2many('maintenance.equipment.image', 'rel_compaction_product_template',
|
||||
'压紧方式', domain=[('type', '=', '压紧方式')]) \
|
||||
|
||||
@api.onchange('cutting_tool_material_id')
|
||||
def _onchange_cutting_tool_material_id(self):
|
||||
for item in self:
|
||||
if item.cutting_tool_material_id.id != item.cutting_tool_model_id.cutting_tool_material_id.id:
|
||||
item.cutting_tool_model_id = False
|
||||
item.specification_id = False
|
||||
item.cutting_tool_type_id = False
|
||||
item.brand_id = False
|
||||
item.tool_hardness = False
|
||||
item.cutting_tool_run_out_accuracy_max = False
|
||||
item.cutting_tool_run_out_accuracy_min = False
|
||||
item.materials_type_id = False
|
||||
item.cutting_tool_blade_type = False
|
||||
item.cutting_tool_total_length = False
|
||||
item.cutting_tool_clamping_way = False
|
||||
item.cutting_tool_blade_diameter = False
|
||||
item.cutting_tool_shank_length = False
|
||||
item.cutting_tool_blade_length = False
|
||||
item.cutting_tool_blade_number = False
|
||||
item.cutting_tool_neck_length = False
|
||||
item.cutting_tool_neck_diameter = False
|
||||
item.cutting_tool_shank_diameter = False
|
||||
item.cutting_tool_blade_tip_diameter = False
|
||||
item.cutting_tool_blade_tip_taper = False
|
||||
item.cutting_tool_blade_helix_angle = False
|
||||
item.cutting_tool_blade_type = False
|
||||
item.cutting_tool_pitch = False
|
||||
item.cutting_tool_blade_width = False
|
||||
item.cutting_tool_blade_depth = False
|
||||
item.cutting_tool_cut_depth = False
|
||||
item.cutting_tool_coarse_medium_fine = False
|
||||
item.cutting_tool_run_out_accuracy_max = False
|
||||
item.cutting_tool_run_out_accuracy_min = False
|
||||
item.cutting_tool_blade_tip_working_size = False
|
||||
item.fit_blade_shape_id = False
|
||||
item.suitable_machining_method_ids = False
|
||||
item.blade_tip_characteristics_id = False
|
||||
item.handle_type_ids = False
|
||||
item.cutting_direction_ids = False
|
||||
item.suitable_coolant_ids = False
|
||||
item.compaction_way_ids = False
|
||||
item.cutting_speed_ids = False
|
||||
item.feed_per_tooth_ids = False
|
||||
|
||||
# def choice(self):
|
||||
# if self.cutting_tool_type == '整体式刀具':
|
||||
# tree_view = self.env.ref('sf_base.view_sf_tool_materials_basic_parameters_integral_tree')
|
||||
# elif self.cutting_tool_type == '刀片':
|
||||
# tree_view = self.env.ref('sf_base.view_sf_tool_materials_basic_parameters_blade_tree')
|
||||
# elif self.cutting_tool_type == '刀杆':
|
||||
# tree_view = self.env.ref('sf_base.view_sf_tool_materials_basic_parameters_cutter_bar_tree')
|
||||
# elif self.cutting_tool_type == '刀盘':
|
||||
# tree_view = self.env.ref('sf_base.view_sf_tool_materials_basic_parameters_tree')
|
||||
# elif self.cutting_tool_type == '刀柄':
|
||||
# tree_view = self.env.ref('sf_base.view_sf_tool_materials_basic_parameters_tree')
|
||||
# else :
|
||||
# tree_view = self.env.ref('sf_base.view_sf_tool_materials_basic_parameters_tree')
|
||||
# return {
|
||||
# 'name': _('规格'),
|
||||
# 'view_mode': 'list',
|
||||
# 'view_id': tree_view.id,
|
||||
# 'type': 'ir.actions.act_window',
|
||||
# 'res_model': 'sf.tool.materials.basic.parameters',
|
||||
# 'target': 'new',
|
||||
# 'domain': [('cutting_tool_type', '=', self.cutting_tool_type),
|
||||
# ('standard_library_id', '=', self.cutting_tool_model_id.id)],
|
||||
# }
|
||||
|
||||
@api.onchange('specification_id')
|
||||
def _onchange_specification(self):
|
||||
if self.specification_id:
|
||||
self.cutting_tool_type_id = self.cutting_tool_model_id.cutting_tool_type_id.id
|
||||
self.brand_id = self.cutting_tool_model_id.brand_id.id
|
||||
self.tool_hardness = self.cutting_tool_model_id.tool_hardness
|
||||
self.cutting_tool_blade_type = self.cutting_tool_model_id.blade_type
|
||||
self.cutting_tool_coarse_medium_fine = self.cutting_tool_model_id.integral_coarse_medium_fine
|
||||
self.materials_type_id = self.cutting_tool_model_id.material_model_id.id
|
||||
self.coating_material = self.cutting_tool_model_id.coating_material
|
||||
if self.cutting_tool_type == '整体式刀具':
|
||||
self.cutting_tool_total_length = self.specification_id.total_length
|
||||
self.cutting_tool_run_out_accuracy_max = self.cutting_tool_model_id.integral_run_out_accuracy_max
|
||||
self.cutting_tool_run_out_accuracy_min = self.cutting_tool_model_id.integral_run_out_accuracy_min
|
||||
self.cutting_tool_blade_diameter = self.specification_id.blade_diameter
|
||||
self.cutting_tool_blade_length = self.specification_id.blade_length
|
||||
self.cutting_tool_blade_number = self.specification_id.blade_number
|
||||
self.cutting_tool_blade_type = self.cutting_tool_model_id.blade_type
|
||||
self.cutting_tool_shank_diameter = self.specification_id.handle_diameter
|
||||
self.cutting_tool_blade_tip_diameter = self.specification_id.blade_tip_diameter
|
||||
self.cutting_tool_blade_tip_taper = self.specification_id.blade_tip_taper
|
||||
self.cutting_tool_blade_helix_angle = self.specification_id.blade_helix_angle
|
||||
self.cutting_tool_pitch = self.specification_id.pitch
|
||||
self.cutting_tool_blade_width = self.specification_id.blade_width
|
||||
self.cutting_tool_blade_depth = self.specification_id.blade_depth
|
||||
self.cutting_tool_cut_depth = self.specification_id.cutting_depth
|
||||
self.cutting_speed_ids = self.cutting_tool_model_id.cutting_speed_ids
|
||||
self.feed_per_tooth_ids = [(0, 0, {'product_template_id': product_template.id,
|
||||
'cutting_speed': product_template.cutting_speed,
|
||||
'machining_method': product_template.machining_method,
|
||||
'blade_diameter': product_template.blade_diameter,
|
||||
'materials_type_id': product_template.materials_type_id.id}) for
|
||||
product_template in
|
||||
self.cutting_tool_model_id.feed_per_tooth_ids.filtered(
|
||||
lambda r: r.blade_diameter == self.specification_id.blade_diameter)]
|
||||
elif self.cutting_tool_type == '夹头':
|
||||
self.cutting_tool_clamping_length = self.specification_id.clamping_length
|
||||
self.cutting_tool_clamping_tolerance = self.specification_id.clamping_tolerance
|
||||
self.cutting_tool_clamping_diameter_min = self.specification_id.min_clamping_diameter
|
||||
self.cutting_tool_clamping_diameter_min = self.specification_id.max_clamping_diameter
|
||||
self.cutting_tool_clamping_way = self.specification_id.clamping_mode
|
||||
self.cutting_tool_top_diameter = self.specification_id.top_diameter
|
||||
self.cutting_tool_outer_diameter = self.specification_id.outer_diameter
|
||||
self.cutting_tool_inner_diameter = self.specification_id.inner_diameter
|
||||
self.tool_weight = self.specification_id.weight
|
||||
self.cutting_tool_jump_accuracy = self.specification_id.run_out_accuracy
|
||||
self.cutting_tool_max_load_capacity = self.specification_id.max_load_capacity
|
||||
self.cutting_tool_er_size_model = self.specification_id.er_size_model
|
||||
self.cutting_tool_handle_ids = self.cutting_tool_model_id.handle_ids
|
||||
self.cooling_suit_type_ids = self.specification_id.cooling_jacket
|
||||
elif self.cutting_tool_type == '刀片':
|
||||
self.cutting_tool_total_length = self.specification_id.total_length
|
||||
self.tool_length = self.specification_id.length
|
||||
self.tool_thickness = self.specification_id.thickness
|
||||
self.tool_width = self.specification_id.width
|
||||
self.cutting_tool_cut_blade_length = self.specification_id.cutting_blade_length
|
||||
self.cutting_tool_blade_tip_circular_arc_radius = self.specification_id.blade_tip_circular_arc_radius
|
||||
self.cutting_tool_blade_tip_height_tolerance = self.specification_id.blade_tip_height_tolerance
|
||||
self.cutting_tool_inscribed_circle_diameter = self.specification_id.inscribed_circle_diameter
|
||||
self.cutting_tool_inscribed_circle_tolerance = self.specification_id.inscribed_circle_tolerance
|
||||
self.cutting_tool_install_aperture_diameter = self.specification_id.install_aperture_diameter
|
||||
self.cutting_tool_chip_breaker_groove = self.specification_id.chip_breaker_groove
|
||||
# self.cutting_tool_cut_depth_max = self.specification_id.blade_blade_number
|
||||
self.cutting_tool_blade_blade_number = self.specification_id.blade_blade_number
|
||||
self.cutting_tool_blade_width = self.specification_id.blade_width
|
||||
self.cutting_tool_rear_angle = self.specification_id.relief_angle
|
||||
self.cutting_tool_main_included_angle = self.specification_id.main_included_angle
|
||||
self.cutting_tool_top_angle = self.specification_id.top_angle
|
||||
self.cutting_tool_blade_tip_dip_angle = self.specification_id.blade_tip_dip_angle
|
||||
self.cutting_tool_side_cutting_edge_angle = self.specification_id.side_cutting_edge_angle
|
||||
self.cutting_tool_pitch = self.specification_id.pitch
|
||||
self.cutting_tool_bladed_teeth_model = self.specification_id.blade_teeth_model
|
||||
self.cutting_tool_thickness_tolerance = self.specification_id.thickness_tolerance
|
||||
self.cutting_tool_thread_model = self.specification_id.thread_model
|
||||
self.cutting_tool_thread_num = self.specification_id.thread_num
|
||||
self.cutting_tool_cutter_bar_ids = self.cutting_tool_model_id.cutter_bar_ids.ids
|
||||
self.cutting_tool_cutter_pad_ids = self.cutting_tool_model_id.cutter_pad_ids.ids
|
||||
self.cutting_speed_ids = self.cutting_tool_model_id.cutting_speed_ids
|
||||
self.feed_per_tooth_ids = self.cutting_tool_model_id.feed_per_tooth_ids
|
||||
elif self.cutting_tool_type in ('刀盘', '刀杆'):
|
||||
self.cutting_tool_total_length = self.specification_id.total_length
|
||||
self.tool_length = self.specification_id.length
|
||||
self.tool_thickness = self.specification_id.thickness
|
||||
self.tool_width = self.specification_id.width
|
||||
self.cutting_tool_cut_blade_length = self.specification_id.cutting_blade_length
|
||||
self.cutting_tool_blade_tip_circular_arc_radius = self.specification_id.blade_tip_circular_arc_radius
|
||||
self.cutting_tool_blade_tip_height_tolerance = self.specification_id.blade_tip_height_tolerance
|
||||
self.cutting_tool_inscribed_circle_diameter = self.specification_id.inscribed_circle_diameter
|
||||
self.cutting_tool_inscribed_circle_tolerance = self.specification_id.inscribed_circle_tolerance
|
||||
self.cutting_tool_install_aperture_diameter = self.specification_id.install_aperture_diameter
|
||||
self.cutting_tool_chip_breaker_groove = self.specification_id.chip_breaker_groove
|
||||
# self.cutting_tool_cut_depth_max = self.specification_id.blade_blade_number
|
||||
self.cutting_tool_blade_blade_number = self.specification_id.blade_blade_number
|
||||
self.cutting_tool_blade_width = self.specification_id.blade_width
|
||||
self.cutting_tool_rear_angle = self.specification_id.relief_angle
|
||||
self.cutting_tool_main_included_angle = self.specification_id.main_included_angle
|
||||
self.cutting_tool_top_angle = self.specification_id.top_angle
|
||||
self.cutting_tool_blade_tip_dip_angle = self.specification_id.blade_tip_dip_angle
|
||||
if self.cutting_tool_type == '刀盘':
|
||||
self.cutting_tool_blade_length = self.specification_id.blade_length
|
||||
self.cutting_tool_cutter_head_diameter = self.specification_id.cutter_head_diameter
|
||||
self.cutting_tool_interface_diameter = self.specification_id.interface_diameter
|
||||
else:
|
||||
self.cutting_tool_knife_head_height = self.specification_id.knife_head_height
|
||||
self.cutting_tool_knife_head_width = self.specification_id.knife_head_width
|
||||
self.cutting_tool_knife_head_length = self.specification_id.knife_head_length
|
||||
elif self.cutting_tool_type == '刀柄':
|
||||
self.cutting_tool_total_length = self.specification_id.total_length
|
||||
self.cutting_tool_standard_speed = self.specification_id.standard_rotate_speed
|
||||
self.cutting_tool_speed_max = self.specification_id.speed_max
|
||||
self.cutting_tool_change_time = self.specification_id.change_time
|
||||
self.cutting_tool_total_length = self.specification_id.total_length
|
||||
self.cutting_tool_clamping_diameter_max = self.specification_id.max_clamping_diameter
|
||||
self.cutting_tool_clamping_diameter_min = self.specification_id.min_clamping_diameter
|
||||
self.cutting_tool_flange_length = self.specification_id.flange_shank_length
|
||||
self.cutting_tool_shank_outer_diameter = self.specification_id.handle_external_diameter
|
||||
self.cutting_tool_shank_inner_diameter = self.specification_id.handle_inside_diameter
|
||||
self.suitable_machining_method_ids = [(6, 0,
|
||||
[])] if not self.cutting_tool_model_id.suitable_machining_method_ids else [
|
||||
(6, 0, self.cutting_tool_model_id.suitable_machining_method_ids.ids)]
|
||||
self.blade_tip_characteristics_id = [(6, 0,
|
||||
[])] if not self.cutting_tool_model_id.blade_tip_characteristics_id else [
|
||||
(6, 0, self.cutting_tool_model_id.blade_tip_characteristics_id.ids)]
|
||||
|
||||
self.handle_type_ids = [(6, 0,
|
||||
[])] if not self.cutting_tool_model_id.handle_type_ids else [
|
||||
(6, 0, self.cutting_tool_model_id.handle_type_ids.ids)]
|
||||
|
||||
self.cutting_direction_ids = [(6, 0,
|
||||
[])] if not self.cutting_tool_model_id.cutting_direction_ids else [
|
||||
(6, 0, self.cutting_tool_model_id.cutting_direction_ids.ids)]
|
||||
|
||||
self.suitable_coolant_ids = [(6, 0,
|
||||
[])] if not self.cutting_tool_model_id.suitable_coolant_ids else [
|
||||
(6, 0, self.cutting_tool_model_id.suitable_coolant_ids.ids)]
|
||||
self.compaction_way_ids = [(6, 0,
|
||||
[])] if not self.cutting_tool_model_id.compaction_way_ids else [
|
||||
(6, 0, self.cutting_tool_model_id.compaction_way_ids.ids)]
|
||||
|
||||
|
||||
# @api.constrains('suitable_machining_method_ids')
|
||||
@@ -193,52 +414,91 @@ class ResProductMo(models.Model):
|
||||
cutting_tool_rear_angle = fields.Integer('后角(°)')
|
||||
cutting_tool_main_included_angle = fields.Integer('主偏角(°)')
|
||||
# cutting_tool_material_model_id = fields.Many2one('sf.materials.model', '材料型号')
|
||||
cutting_tool_nut = fields.Float('配对螺母(mm)')
|
||||
# 适用夹头型号可以多选
|
||||
cutting_tool_chuck_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
relation='product_cutting_tool_model_handle_chuck_rel',
|
||||
'sf.cutting_tool.standard.library',
|
||||
relation='product_cutting_tool_library_handle_chuck_rel',
|
||||
column1='model_id_1',
|
||||
column2='model_id_2',
|
||||
domain="[('cutting_tool_type', '=', '夹头')]",
|
||||
string='适用夹头型号')
|
||||
# 刀片参数
|
||||
cutting_tool_cut_blade_length = fields.Char('切削刃长(mm)', size=20)
|
||||
cutting_tool_blade_tip_circular_arc_radius = fields.Char('刀尖圆弧半径(mm)', size=20)
|
||||
cutting_tool_top_angle = fields.Integer('顶角(°)')
|
||||
cutting_tool_jump_accuracy = fields.Float('径跳精度(mm)')
|
||||
cutting_tool_inscribed_circle_diameter = fields.Char('内接圆直径(mm)', size=20)
|
||||
cutting_tool_install_aperture_diameter = fields.Char('安装孔直径(mm)', size=20)
|
||||
cutting_tool_chip_breaker_groove = fields.Selection([('无', '无'), ('单面', '单面'), ('双面', '双面')],
|
||||
string='有无断屑槽')
|
||||
cutting_tool_bladed_teeth_model = fields.Selection(
|
||||
[('无', '无'), ('V牙型', 'V牙型'), ('米制全牙型', '米制全牙型'), ('美制全牙型', '美制全牙型'),
|
||||
('惠氏全牙型', '惠氏全牙型'), ('BSPT全牙型', 'BSPT全牙型'), ('NPT全牙型', 'NPT全牙型'),
|
||||
('UNJ全牙型', 'UNJ全牙型'), ('DIN405圆牙型', 'DIN405圆牙型'), ('ACME梯形', 'ACME梯形'),
|
||||
('石油管螺纹刀片', '石油管螺纹刀片'), ('矮牙ACME梯形', '矮牙ACME梯形'),
|
||||
('Trapeze30° 103', 'Trapeze30° 103')], string='刀片牙型', default='无')
|
||||
cutting_tool_blade_blade_number = fields.Selection(
|
||||
[('0', '0'), ('1', '1'), ('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('6', '6'),
|
||||
('7', '7'), ('8', '8'), ('9', '9'), ('10', '10')],
|
||||
string='刀片的刃数(个)')
|
||||
|
||||
cutting_tool_blade_tip_dip_angle = fields.Integer('刀尖倾角(°)')
|
||||
cutting_tool_side_cutting_edge_angle = fields.Integer('侧切削角(°)')
|
||||
cutting_tool_thread_model = fields.Selection([('无', '无'), ('外螺纹', '外螺纹'), ('内螺纹', '内螺纹')],
|
||||
string='螺纹类型')
|
||||
cutting_tool_thread_num = fields.Char('每英寸螺纹数(tpi)', size=20)
|
||||
cutting_tool_blade_tip_height_tolerance = fields.Char('刀尖高度公差(mm)', size=20)
|
||||
cutting_tool_inscribed_circle_tolerance = fields.Char('内接圆公差(mm)', size=20)
|
||||
cutting_tool_thickness_tolerance = fields.Char('厚度公差(mm)', size=20)
|
||||
|
||||
cutting_tool_jump_accuracy = fields.Char('径跳精度(mm)')
|
||||
cutting_tool_working_hardness = fields.Char('加工硬度(hrc)')
|
||||
cutting_tool_cutter_bar_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
relation='product_cutting_tool_model_blade_cutter_bar_rel',
|
||||
'sf.cutting_tool.standard.library',
|
||||
relation='product_cutting_tool_library_cutter_bar_rel',
|
||||
column1='model_id_1',
|
||||
column2='model_id_2',
|
||||
domain="[('cutting_tool_type', '=', '刀杆')]",
|
||||
string='适用刀杆型号'
|
||||
)
|
||||
cutting_tool_cutter_pad_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
relation='product_cutting_tool_model_blade_cutter_pad_rel',
|
||||
'sf.cutting_tool.standard.library',
|
||||
relation='product_cutting_tool_library_cutter_pad_rel',
|
||||
column1='model_id_1',
|
||||
column2='model_id_2',
|
||||
domain="[('cutting_tool_type', '=', '刀盘')]",
|
||||
string='适用刀盘型号' # 使用空列表作为默认值
|
||||
)
|
||||
# 刀杆/参数
|
||||
cutting_tool_knife_head_height = fields.Float('刀头高度(mm)')
|
||||
cutting_tool_knife_head_width = fields.Float('刀头宽度(mm)')
|
||||
cutting_tool_knife_head_length = fields.Float('刀头长度(mm)')
|
||||
cutting_tool_blade_diameter = fields.Float('刃径/刃部直径(mm)')
|
||||
cutting_tool_cutter_arbor_diameter = fields.Char('刀杆直径(mm)', size=20)
|
||||
cutting_tool_min_machining_aperture = fields.Char('最小加工孔径(mm)', size=20)
|
||||
cutting_tool_install_blade_tip_num = fields.Char('可装刀片数/齿数(个)', size=20)
|
||||
cutting_tool_installing_structure = fields.Char('安装结构', size=20)
|
||||
cutting_tool_blade_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
relation='product_cutting_tool_model_pad_blade_rel',
|
||||
'sf.cutting_tool.standard.library',
|
||||
relation='product_cutting_tool_library_pad_blade_rel',
|
||||
column1='model_id_1',
|
||||
column2='model_id_2',
|
||||
domain="[('cutting_tool_type', '=', '刀片')]",
|
||||
string='适用刀片型号' # 使用空列表作为默认值
|
||||
)
|
||||
cutting_tool_wrench = fields.Float('配对扳手(mm)')
|
||||
# cutting_tool_screw = fields.Float('配备螺丝(mm)')
|
||||
cutting_tool_accuracy_level = fields.Char('精度等级')
|
||||
cutting_tool_tool_shim = fields.Char('适配刀垫型号', size=50)
|
||||
cutting_tool_cotter_pin = fields.Char('适配销钉型号', size=50)
|
||||
cutting_tool_pressing_plate = fields.Char('适配压板型号', size=50)
|
||||
cutting_tool_screw = fields.Char('适配螺钉型号', size=50)
|
||||
cutting_tool_wrench = fields.Char('适配扳手型号')
|
||||
cutting_tool_is_cooling_hole = fields.Boolean('有无冷却孔', default=False)
|
||||
cutting_tool_locating_slot_code = fields.Char('定位槽代号', size=20)
|
||||
# 刀盘参数
|
||||
cutting_tool_cutter_head_diameter = fields.Char('刀盘直径(mm)', size=20)
|
||||
cutting_tool_interface_diameter = fields.Char('接口直径(mm)', size=20)
|
||||
|
||||
# 刀柄参数
|
||||
cutting_tool_head_diameter = fields.Float('头部直径')
|
||||
cutting_tool_diameter_max = fields.Float('最大直径(mm)')
|
||||
cutting_tool_clamping_diameter = fields.Float('夹持直径(mm)')
|
||||
cutting_tool_shank_outer_diameter = fields.Float('柄部外径(mm)')
|
||||
cutting_tool_shank_inner_diameter = fields.Float('柄部内径(mm)')
|
||||
cutting_tool_clamping_length = fields.Float('夹持长度(mm)')
|
||||
cutting_tool_clamping_tolerance = fields.Float('夹持公差(mm)')
|
||||
cutting_tool_clamping_diameter_max = fields.Float('最大夹持直径')
|
||||
@@ -248,34 +508,30 @@ class ResProductMo(models.Model):
|
||||
cutting_tool_is_rough_finish = fields.Boolean('可粗加工', default=False)
|
||||
cutting_tool_is_finish = fields.Boolean('可精加工', default=False)
|
||||
cutting_tool_is_drill_hole = fields.Boolean('可钻孔', default=False)
|
||||
cutting_tool_is_safety_lock = fields.Boolean('安全锁', default=False)
|
||||
cutting_tool_is_safety_lock = fields.Boolean('有无安全锁', default=False)
|
||||
cutting_tool_is_high_speed_cutting = fields.Boolean('可高速切削', default=False)
|
||||
cutting_tool_dynamic_balance_class = fields.Char('动平衡等级')
|
||||
cutting_tool_change_time = fields.Integer('换刀时间(s)')
|
||||
cutting_tool_clamping_way = fields.Char('夹持方式')
|
||||
cutting_tool_standard_speed = fields.Integer('标准转速(n/min)')
|
||||
cutting_tool_standard_speed = fields.Char('标准转速(n/min)')
|
||||
cutting_tool_speed_max = fields.Integer('最大转速(n/min)')
|
||||
cutting_tool_cooling_type = fields.Char('冷却类型')
|
||||
cutting_tool_body_accuracy = fields.Float('本体精度(mm)')
|
||||
apply_lock_nut_model = fields.Char('适用锁紧螺母型号')
|
||||
apply_lock_wrench_model = fields.Char('适用锁紧扳手型号')
|
||||
cutting_tool_detection_accuracy_max = fields.Float('最大检测精度(mm)')
|
||||
cutting_tool_detection_accuracy_min = fields.Float('最小检测精度(mm)')
|
||||
# 夹头参数
|
||||
cutting_tool_taper = fields.Integer('锥度(°)')
|
||||
cutting_tool_top_diameter = fields.Float('顶部直径')
|
||||
cutting_tool_outer_diameter = fields.Float('外径(mm)')
|
||||
cutting_tool_inner_diameter = fields.Float('内径(mm)')
|
||||
cooling_suit_type_ids = fields.Char('适用冷却套型号')
|
||||
# cooling_suit_type_ids = fields.Many2many('冷却类型')
|
||||
cutting_tool_max_load_capacity = fields.Char('最大负载能力(kg)')
|
||||
cutting_tool_er_size_model = fields.Char('ER尺寸型号')
|
||||
cutting_tool_handle_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
relation='product_cutting_tool_model_chuck_handle_rel',
|
||||
'sf.cutting_tool.standard.library',
|
||||
relation='product_cutting_tool_library_chuck_handle_rel',
|
||||
column1='model_id_1',
|
||||
column2='model_id_2',
|
||||
domain="[('cutting_tool_type', '=', '刀柄')]",
|
||||
string='适用刀柄型号'
|
||||
)
|
||||
|
||||
# 夹具参数
|
||||
fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料")
|
||||
fixture_model_id = fields.Many2one('sf.fixture.model', string="夹具型号")
|
||||
@@ -404,12 +660,6 @@ class ResProductMo(models.Model):
|
||||
self.detailed_type = 'product'
|
||||
self.sale_ok = False
|
||||
|
||||
@api.onchange('cutting_tool_material_id')
|
||||
def _onchange_cutting_tool_material_id(self):
|
||||
for item in self:
|
||||
if item.cutting_tool_material_id.id != item.cutting_tool_model_id.cutting_tool_material_id.id:
|
||||
item.cutting_tool_model_id = False
|
||||
|
||||
@api.onchange('fixture_material_id')
|
||||
def _onchange_fixture_material_id(self):
|
||||
for item in self:
|
||||
@@ -446,119 +696,6 @@ class ResProductMo(models.Model):
|
||||
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):
|
||||
# for item in self:
|
||||
# if self.cutting_tool_type is not False:
|
||||
# item.brand_id = item.cutting_tool_model_id.brand_id.id
|
||||
# item.cutting_tool_type_id = item.cutting_tool_model_id.cutting_tool_type_id.id
|
||||
# item.tool_length = item.cutting_tool_model_id.tool_length
|
||||
# item.tool_width = item.cutting_tool_model_id.tool_width
|
||||
# item.tool_height = item.cutting_tool_model_id.tool_height
|
||||
# item.tool_thickness = item.cutting_tool_model_id.tool_thickness
|
||||
# item.tool_weight = item.cutting_tool_model_id.tool_weight
|
||||
# item.coating_material = item.cutting_tool_model_id.coating_material
|
||||
# item.cutting_tool_total_length = item.cutting_tool_model_id.total_length
|
||||
# item.cutting_tool_shank_length = item.cutting_tool_model_id.shank_length
|
||||
# item.cutting_tool_neck_length = item.cutting_tool_model_id.cutting_tool_neck_length
|
||||
# item.cutting_tool_shank_diameter = item.cutting_tool_model_id.cutting_tool_shank_diameter
|
||||
# item.cutting_tool_blade_diameter = item.cutting_tool_model_id.cutting_tool_blade_diameter
|
||||
# item.cutting_tool_neck_diameter = item.cutting_tool_model_id.cutting_tool_neck_diameter
|
||||
# item.cutting_tool_blade_tip_diameter = item.cutting_tool_model_id.cutting_tool_blade_tip_diameter
|
||||
# item.cutting_tool_blade_tip_taper = item.cutting_tool_model_id.cutting_tool_blade_tip_taper
|
||||
# item.cutting_tool_blade_helix_angle = item.cutting_tool_model_id.cutting_tool_blade_helix_angle
|
||||
# item.cutting_tool_blade_type = item.cutting_tool_model_id.cutting_tool_blade_type
|
||||
# item.cutting_tool_coarse_medium_fine = item.cutting_tool_model_id.cutting_tool_coarse_medium_fine
|
||||
# item.tool_hardness = item.cutting_tool_model_id.tool_hardness
|
||||
# item.cutting_tool_run_out_accuracy_max = item.cutting_tool_model_id.cutting_tool_run_out_accuracy_max
|
||||
# item.cutting_tool_run_out_accuracy_min = item.cutting_tool_model_id.cutting_tool_run_out_accuracy_min
|
||||
# item.suitable_machining_method_ids = self._get_ids(
|
||||
# item.cutting_tool_model_id.suitable_machining_method_ids)
|
||||
# item.blade_tip_characteristics_ids = self._get_ids(
|
||||
# item.cutting_tool_model_id.blade_tip_characteristics_ids)
|
||||
# item.handle_type_ids = self._get_ids(item.cutting_tool_model_id.handle_type_ids)
|
||||
# item.cutting_direction_ids = self._get_ids(item.cutting_tool_model_id.cutting_direction_ids)
|
||||
# item.suitable_coolant_ids = self._get_ids(item.cutting_tool_model_id.suitable_coolant_ids)
|
||||
# item.cutting_tool_diameter = item.cutting_tool_model_id.diameter
|
||||
# item.cutting_tool_blade_number = item.cutting_tool_model_id.blade_number
|
||||
# item.cutting_tool_front_angle = item.cutting_tool_model_id.front_angle
|
||||
# item.cutting_tool_rear_angle = item.cutting_tool_model_id.rear_angle
|
||||
# item.cutting_tool_main_included_angle = item.cutting_tool_model_id.main_included_angle
|
||||
# item.materials_type_id = item.cutting_tool_model_id.material_model_id.id
|
||||
# item.cutting_tool_nut = item.cutting_tool_model_id.nut
|
||||
# item.cutting_tool_top_angle = item.cutting_tool_model_id.top_angle
|
||||
# item.cutting_tool_jump_accuracy = item.cutting_tool_model_id.jump_accuracy
|
||||
# item.cutting_tool_working_hardness = item.cutting_tool_model_id.working_hardness
|
||||
# item.cutting_tool_blade_diameter = item.cutting_tool_model_id.blade_diameter
|
||||
# item.cutting_tool_wrench = item.cutting_tool_model_id.wrench
|
||||
# # item.cutting_tool_screw = item.cutting_tool_model_id.screw
|
||||
# item.cutting_tool_accuracy_level = item.cutting_tool_model_id.accuracy_level
|
||||
# item.cutting_tool_diameter_max = item.cutting_tool_model_id.diameter_max
|
||||
# item.cutting_tool_clamping_diameter = item.cutting_tool_model_id.clamping_diameter
|
||||
# item.cutting_tool_flange_length = item.cutting_tool_model_id.flange_length
|
||||
# item.cutting_tool_flange_diameter = item.cutting_tool_model_id.flange_diameter
|
||||
# item.cutting_tool_outer_diameter = item.cutting_tool_model_id.outer_diameter
|
||||
# item.cutting_tool_inner_diameter = item.cutting_tool_model_id.inner_diameter
|
||||
# item.cutting_tool_chuck_ids = self._get_ids(item.cutting_tool_model_id.chuck_ids)
|
||||
# item.cutting_tool_cutter_bar_ids = self._get_ids(item.cutting_tool_model_id.cutter_bar_ids)
|
||||
# item.cutting_tool_cutter_pad_ids = self._get_ids(item.cutting_tool_model_id.cutter_pad_ids)
|
||||
# item.cutting_tool_blade_ids = self._get_ids(item.cutting_tool_model_id.blade_ids)
|
||||
# item.cutting_tool_handle_ids = self._get_ids(item.cutting_tool_model_id.handle_ids)
|
||||
# else:
|
||||
# item.brand_id = False
|
||||
# item.cutting_tool_type_id = False
|
||||
# item.brand_id = False
|
||||
# item.tool_length = False
|
||||
# item.tool_width = False
|
||||
# item.tool_height = False
|
||||
# item.tool_thickness = False
|
||||
# item.tool_weight = False
|
||||
# item.coating_material = False
|
||||
# item.cutting_tool_total_length = False
|
||||
# item.cutting_tool_shank_length = False
|
||||
# item.cutting_tool_blade_length = False
|
||||
# item.cutting_tool_neck_length = False
|
||||
# item.cutting_tool_shank_diameter = False
|
||||
# item.cutting_tool_blade_diameter = False
|
||||
# item.cutting_tool_neck_diameter = False
|
||||
# item.cutting_tool_blade_tip_diameter = False
|
||||
# item.cutting_tool_blade_tip_taper = False
|
||||
# item.cutting_tool_blade_helix_angle = False
|
||||
# item.cutting_tool_blade_type = False
|
||||
# item.cutting_tool_coarse_medium_fine = False
|
||||
# item.tool_hardness = False
|
||||
# item.cutting_tool_run_out_accuracy_max = False
|
||||
# item.cutting_tool_run_out_accuracy_min = False
|
||||
# item.suitable_machining_method_ids = False
|
||||
# item.blade_tip_characteristics_ids = False
|
||||
# item.handle_type_ids = False
|
||||
# item.cutting_direction_ids = False
|
||||
# item.suitable_coolant_ids = False
|
||||
# item.cutting_tool_diameter = False
|
||||
# item.cutting_tool_blade_number = False
|
||||
# item.cutting_tool_front_angle = False
|
||||
# item.cutting_tool_rear_angle = False
|
||||
# item.cutting_tool_main_included_angle = False
|
||||
# item.materials_type_id = False
|
||||
# item.cutting_tool_nut = False
|
||||
# item.cutting_tool_top_angle = False
|
||||
# item.cutting_tool_jump_accuracy = False
|
||||
# item.cutting_tool_working_hardness = False
|
||||
# item.cutting_tool_blade_diameter = False
|
||||
# item.cutting_tool_wrench = False
|
||||
# # item.cutting_tool_screw = False
|
||||
# item.cutting_tool_accuracy_level = False
|
||||
# item.cutting_tool_diameter_max = False
|
||||
# item.cutting_tool_clamping_diameter = False
|
||||
# item.cutting_tool_flange_length = False
|
||||
# item.cutting_tool_flange_diameter = False
|
||||
# item.cutting_tool_outer_diameter = False
|
||||
# item.cutting_tool_inner_diameter = False
|
||||
# item.cutting_tool_chuck_ids = False
|
||||
# item.cutting_tool_cutter_bar_ids = False
|
||||
# item.cutting_tool_cutter_pad_ids = False
|
||||
# item.cutting_tool_blade_ids = False
|
||||
# item.cutting_tool_handle_ids = False
|
||||
|
||||
def _get_volume_uom_id_from_ir_config_parameter(self):
|
||||
product_length_in_feet_param = self.env['ir.config_parameter'].sudo().get_param('product.volume_in_cubic_feet')
|
||||
@@ -736,9 +873,9 @@ class ResProductMo(models.Model):
|
||||
|
||||
# 将attach的datas内容转为glb文件
|
||||
def transition_glb_file(self, report_path, code):
|
||||
shapes = read_step_file(report_path)
|
||||
# shapes = read_step_file(report_path)
|
||||
output_file = os.path.join('/tmp', str(code) + '.stl')
|
||||
write_stl_file(shapes, output_file, 'binary', 0.03, 0.5)
|
||||
# write_stl_file(shapes, output_file, 'binary', 0.03, 0.5)
|
||||
# 转化为glb
|
||||
output_glb_file = os.path.join('/tmp', str(code) + '.glb')
|
||||
util_path = get_resource_path('sf_dlm', 'static/util')
|
||||
@@ -783,6 +920,7 @@ class ResMrpBomMo(models.Model):
|
||||
# 坯料BOM组件:选取当前坯料原材料,
|
||||
# 然后根据当前的坯料的体积得出需要的原材料重量(立方米m³) *材料密度 * 1000 = 所需原材料重量KG(公斤)
|
||||
# 坯料所需原材料公式:当前的坯料的体积(立方米m³) *材料密度 * 1000 = 所需原材料重量KG(公斤)
|
||||
|
||||
def bom_create_line(self, embryo):
|
||||
# 选取当前坯料原材料
|
||||
raw_bom_line = self.get_raw_bom(embryo)
|
||||
@@ -801,7 +939,6 @@ class ResMrpBomMo(models.Model):
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
# 查询材料型号默认排第一的供应商
|
||||
|
||||
def get_supplier(self, materials_type):
|
||||
@@ -862,7 +999,8 @@ class SfMaintenanceEquipmentTool(models.Model):
|
||||
_description = '机床刀位'
|
||||
|
||||
equipment_id = fields.Many2one('maintenance.equipment', string='设备')
|
||||
product_template_id = fields.Many2one('product.template', string='功能刀具名称', domain="[('categ_type', '=', '刀具')]")
|
||||
product_template_id = fields.Many2one('product.template', string='功能刀具名称',
|
||||
domain="[('categ_type', '=', '刀具')]")
|
||||
image_1920 = fields.Binary('图片', related='product_template_id.image_1920')
|
||||
categ_type = fields.Char(string='功能刀具类型')
|
||||
diameter = fields.Char('直径')
|
||||
@@ -874,4 +1012,3 @@ class SfMaintenanceEquipmentTool(models.Model):
|
||||
alarm_value = fields.Char('报警值')
|
||||
used_value = fields.Char('已使用值')
|
||||
code = fields.Char('机床刀位号')
|
||||
|
||||
|
||||
@@ -1,249 +0,0 @@
|
||||
from odoo import fields, models, api
|
||||
|
||||
|
||||
class SuitableMachiningMethod(models.Model):
|
||||
_name = 'sf.suitable.machining.method'
|
||||
_description = '适合加工方式'
|
||||
|
||||
name = fields.Char('名称')
|
||||
image = fields.Image('图片')
|
||||
|
||||
@api.model
|
||||
def name_search(self, name='', args=None, operator='ilike', limit=100):
|
||||
# 调用父类的name_search方法,获取原始的结果列表
|
||||
res = super().name_search(name, args, operator, limit)
|
||||
# 定义一个空字典用来存储id和name的映射关系
|
||||
name_dict = {}
|
||||
# 遍历结果列表,将id和name存入字典中
|
||||
for item in res:
|
||||
id = item[0]
|
||||
name = item[1]
|
||||
name_dict[id] = name
|
||||
# 根据id列表搜索符合条件的记录
|
||||
records = self.browse(name_dict.keys())
|
||||
# 定义一个新的结果列表用来存储修改后的结果
|
||||
new_res = []
|
||||
# 遍历每条记录
|
||||
for record in records:
|
||||
# 获取记录的id,name和image属性
|
||||
id = record.id
|
||||
name = name_dict[id]
|
||||
image = record.image
|
||||
# 如果image不为空,将其转换为data URI scheme
|
||||
if image:
|
||||
data_uri = f"data:image/png;base64,{image.decode('utf-8')}"
|
||||
else:
|
||||
data_uri = ""
|
||||
# 将这三个属性组成一个数组,并添加到结果列表中 result.append([id, name, data_uri]) # 返回结果列表 return result
|
||||
new_res.append([id, name, data_uri])
|
||||
# 返回新的结果列表
|
||||
return new_res
|
||||
|
||||
|
||||
class BladeTipCharacteristics(models.Model):
|
||||
_name = 'sf.blade.tip.characteristics'
|
||||
_description = '刀尖特征'
|
||||
|
||||
name = fields.Char('名称')
|
||||
image = fields.Image('图片')
|
||||
|
||||
@api.model
|
||||
def name_search(self, name='', args=None, operator='ilike', limit=100):
|
||||
# 调用父类的name_search方法,获取原始的结果列表
|
||||
res = super().name_search(name, args, operator, limit)
|
||||
# 定义一个空字典用来存储id和name的映射关系
|
||||
name_dict = {}
|
||||
# 遍历结果列表,将id和name存入字典中
|
||||
for item in res:
|
||||
id = item[0]
|
||||
name = item[1]
|
||||
name_dict[id] = name
|
||||
# 根据id列表搜索符合条件的记录
|
||||
records = self.browse(name_dict.keys())
|
||||
# 定义一个新的结果列表用来存储修改后的结果
|
||||
new_res = []
|
||||
# 遍历每条记录
|
||||
for record in records:
|
||||
# 获取记录的id,name和image属性
|
||||
id = record.id
|
||||
name = name_dict[id]
|
||||
image = record.image
|
||||
# 如果image不为空,将其转换为data URI scheme
|
||||
if image:
|
||||
data_uri = f"data:image/png;base64,{image.decode('utf-8')}"
|
||||
else:
|
||||
data_uri = ""
|
||||
# 将这三个属性组成一个数组,并添加到结果列表中 result.append([id, name, data_uri]) # 返回结果列表 return result
|
||||
new_res.append([id, name, data_uri])
|
||||
# 返回新的结果列表
|
||||
return new_res
|
||||
|
||||
|
||||
class HandleType(models.Model):
|
||||
_name = 'sf.handle.type'
|
||||
_description = '柄部类型'
|
||||
|
||||
name = fields.Char('名称')
|
||||
image = fields.Image('图片')
|
||||
|
||||
@api.model
|
||||
def name_search(self, name='', args=None, operator='ilike', limit=100):
|
||||
# 调用父类的name_search方法,获取原始的结果列表
|
||||
res = super().name_search(name, args, operator, limit)
|
||||
# 定义一个空字典用来存储id和name的映射关系
|
||||
name_dict = {}
|
||||
# 遍历结果列表,将id和name存入字典中
|
||||
for item in res:
|
||||
id = item[0]
|
||||
name = item[1]
|
||||
name_dict[id] = name
|
||||
# 根据id列表搜索符合条件的记录
|
||||
records = self.browse(name_dict.keys())
|
||||
# 定义一个新的结果列表用来存储修改后的结果
|
||||
new_res = []
|
||||
# 遍历每条记录
|
||||
for record in records:
|
||||
# 获取记录的id,name和image属性
|
||||
id = record.id
|
||||
name = name_dict[id]
|
||||
image = record.image
|
||||
# 如果image不为空,将其转换为data URI scheme
|
||||
if image:
|
||||
data_uri = f"data:image/png;base64,{image.decode('utf-8')}"
|
||||
else:
|
||||
data_uri = ""
|
||||
# 将这三个属性组成一个数组,并添加到结果列表中 result.append([id, name, data_uri]) # 返回结果列表 return result
|
||||
new_res.append([id, name, data_uri])
|
||||
# 返回新的结果列表
|
||||
return new_res
|
||||
|
||||
|
||||
class CuttingDirection(models.Model):
|
||||
_name = 'sf.cutting.direction'
|
||||
_description = '走刀方向'
|
||||
|
||||
name = fields.Char('名称')
|
||||
image = fields.Image('图片')
|
||||
|
||||
@api.model
|
||||
def name_search(self, name='', args=None, operator='ilike', limit=100):
|
||||
# 调用父类的name_search方法,获取原始的结果列表
|
||||
res = super().name_search(name, args, operator, limit)
|
||||
# 定义一个空字典用来存储id和name的映射关系
|
||||
name_dict = {}
|
||||
# 遍历结果列表,将id和name存入字典中
|
||||
for item in res:
|
||||
id = item[0]
|
||||
name = item[1]
|
||||
name_dict[id] = name
|
||||
# 根据id列表搜索符合条件的记录
|
||||
records = self.browse(name_dict.keys())
|
||||
# 定义一个新的结果列表用来存储修改后的结果
|
||||
new_res = []
|
||||
# 遍历每条记录
|
||||
for record in records:
|
||||
# 获取记录的id,name和image属性
|
||||
id = record.id
|
||||
name = name_dict[id]
|
||||
image = record.image
|
||||
# 如果image不为空,将其转换为data URI scheme
|
||||
if image:
|
||||
data_uri = f"data:image/png;base64,{image.decode('utf-8')}"
|
||||
else:
|
||||
data_uri = ""
|
||||
# 将这三个属性组成一个数组,并添加到结果列表中 result.append([id, name, data_uri]) # 返回结果列表 return result
|
||||
new_res.append([id, name, data_uri])
|
||||
# 返回新的结果列表
|
||||
return new_res
|
||||
|
||||
|
||||
class SuitableCoolant(models.Model):
|
||||
_name = 'sf.suitable.coolant'
|
||||
_description = '适合冷却液'
|
||||
|
||||
name = fields.Char('名称')
|
||||
image = fields.Image('图片')
|
||||
|
||||
@api.model
|
||||
def name_search(self, name='', args=None, operator='ilike', limit=100):
|
||||
# 调用父类的name_search方法,获取原始的结果列表
|
||||
res = super().name_search(name, args, operator, limit)
|
||||
# 定义一个空字典用来存储id和name的映射关系
|
||||
name_dict = {}
|
||||
# 遍历结果列表,将id和name存入字典中
|
||||
for item in res:
|
||||
id = item[0]
|
||||
name = item[1]
|
||||
name_dict[id] = name
|
||||
# 根据id列表搜索符合条件的记录
|
||||
records = self.browse(name_dict.keys())
|
||||
# 定义一个新的结果列表用来存储修改后的结果
|
||||
new_res = []
|
||||
# 遍历每条记录
|
||||
for record in records:
|
||||
# 获取记录的id,name和image属性
|
||||
id = record.id
|
||||
name = name_dict[id]
|
||||
image = record.image
|
||||
# 如果image不为空,将其转换为data URI scheme
|
||||
if image:
|
||||
data_uri = f"data:image/png;base64,{image.decode('utf-8')}"
|
||||
else:
|
||||
data_uri = ""
|
||||
# 将这三个属性组成一个数组,并添加到结果列表中 result.append([id, name, data_uri]) # 返回结果列表 return result
|
||||
new_res.append([id, name, data_uri])
|
||||
# 返回新的结果列表
|
||||
return new_res
|
||||
|
||||
|
||||
class CuttingSpeed(models.Model):
|
||||
_name = 'sf.cutting.speed'
|
||||
_description = '切削速度Vc'
|
||||
|
||||
# def _get_order(self):
|
||||
# last_tool = self.search([], order='id desc', limit=1)
|
||||
# if last_tool:
|
||||
# last_order = int(last_tool.order)
|
||||
# new_order = last_order + 1
|
||||
# else:
|
||||
# new_order = '1'
|
||||
# return new_order
|
||||
#
|
||||
# order = fields.Char('序', default=_get_order, readonly=True)
|
||||
|
||||
product_template_id = fields.Many2one('product.template', string='产品')
|
||||
|
||||
execution_standard_id = fields.Char('执行标准')
|
||||
material_code = fields.Char('材料代号')
|
||||
material_name = fields.Char('材料名称')
|
||||
material_grade = fields.Char('材料牌号')
|
||||
tensile_strength = fields.Float('拉伸强度 (N/mm²)')
|
||||
hardness = fields.Float('硬度(HRC)')
|
||||
|
||||
cutting_speed_n1 = fields.Char('径向切宽 ae=100%D1 ap=1*D1 切削速度Vc')
|
||||
cutting_speed_n2 = fields.Char('径向切宽 ae=50%D1 ap=1.5*D1 切削速度Vc')
|
||||
cutting_speed_n3 = fields.Char('径向切宽 ae=25%D1 ap=L1max 切削速度Vc')
|
||||
cutting_speed_n4 = fields.Char('径向切宽 ae=15%D1 ap=L1max 切削速度Vc')
|
||||
cutting_speed_n5 = fields.Char('径向切宽 ae=5%D1 ap=L1max 切削速度Vc')
|
||||
rough_machining = fields.Char('粗加工 Vc(m/min)')
|
||||
precision_machining = fields.Char('精加工 Vc(m/min)')
|
||||
application = fields.Selection([('主应用', '主应用'), ('次应用', '次应用')], '主/次应用')
|
||||
|
||||
|
||||
class FeedPerTooth(models.Model):
|
||||
_name = 'sf.feed.per.tooth'
|
||||
_description = '每齿走刀量fz'
|
||||
|
||||
product_template_id = fields.Many2one('product.template', string='产品')
|
||||
|
||||
cutting_speed = fields.Char('径向切宽 ae(mm)')
|
||||
machining_method = fields.Selection([('直铣', '直铣'), ('坡铣', '坡铣')], string='加工方式')
|
||||
materials_type_id = fields.Many2one('sf.materials.model', string='材料型号')
|
||||
blade_diameter = fields.Float('刃部直径D1(mm)', readonly=True, related='product_template_id.cutting_tool_blade_diameter')
|
||||
feed_per_tooth = fields.Char('每齿走刀量 (mm/z)')
|
||||
unit = fields.Char('单位', default='fz')
|
||||
|
||||
# @api.depends('product_template_id')
|
||||
# def _compute_product_template_id(self):
|
||||
# if self.product_template_id is not None:
|
||||
# self.blade_diameter = self.product_template_id.cutting_tool_blade_diameter
|
||||
Reference in New Issue
Block a user