From 155c5eb3298f04b1d7b0dbe3f8dabba982a6ea49 Mon Sep 17 00:00:00 2001 From: guanhuan Date: Wed, 25 Sep 2024 10:48:35 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=9D=AF=E6=96=99=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_message/models/sf_message_purchase.py | 10 +--------- sf_message/models/sf_message_sale.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/sf_message/models/sf_message_purchase.py b/sf_message/models/sf_message_purchase.py index e9fe3956..cf0d2333 100644 --- a/sf_message/models/sf_message_purchase.py +++ b/sf_message/models/sf_message_purchase.py @@ -6,12 +6,4 @@ class SFMessagePurchase(models.Model): _name = 'purchase.order' _inherit = ['purchase.order', 'jikimo.message.dispatch'] - @api.model_create_multi - def create(self, vals_list): - res = super(SFMessagePurchase, self).create(vals_list) - if res: - try: - res.add_queue('坯料采购提醒') - except Exception as e: - logging.info('add_queue error:%s' % e) - return res + diff --git a/sf_message/models/sf_message_sale.py b/sf_message/models/sf_message_sale.py index fb9d5976..7d6cd7cd 100644 --- a/sf_message/models/sf_message_sale.py +++ b/sf_message/models/sf_message_sale.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import logging from odoo import models, fields, api, _ @@ -21,6 +22,17 @@ class SFMessageSale(models.Model): if res is True: try: self.add_queue('确认接单') + picking_ids = self.mrp_production_ids + purchase_order_id = [] + if picking_ids: + for picking_id in picking_ids: + purchase_order_ids = ( + picking_id.procurement_group_id.stock_move_ids.created_purchase_line_id.order_id | picking_id.procurement_group_id.stock_move_ids.move_orig_ids.purchase_line_id.order_id).ids + purchase_order_id.extend(purchase_order_ids) + if purchase_order_id: + purchase_order_list = self.env['purchase.order'].search([('id', 'in', purchase_order_id)]) + for purchase_order_info in purchase_order_list: + purchase_order_info.add_queue('坯料采购提醒') except Exception as e: logging.info('add_queue error:%s' % e) return res From 7c3ac138b591d6ede0523b44a5d62484e9ac338b Mon Sep 17 00:00:00 2001 From: guanhuan Date: Wed, 25 Sep 2024 14:31:31 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=B7=B2=E4=B8=8B?= =?UTF-8?q?=E5=8F=91=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_message/models/sf_message_purchase.py | 5 +---- sf_message/models/sf_message_sale.py | 3 ++- sf_message/models/sf_message_stock_picking.py | 4 ++-- sf_message/models/sf_message_workorder.py | 5 +++-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/sf_message/models/sf_message_purchase.py b/sf_message/models/sf_message_purchase.py index cf0d2333..8d95ffaf 100644 --- a/sf_message/models/sf_message_purchase.py +++ b/sf_message/models/sf_message_purchase.py @@ -1,9 +1,6 @@ -import logging from odoo import models, fields, api, _ class SFMessagePurchase(models.Model): _name = 'purchase.order' - _inherit = ['purchase.order', 'jikimo.message.dispatch'] - - + _inherit = ['purchase.order', 'jikimo.message.dispatch'] diff --git a/sf_message/models/sf_message_sale.py b/sf_message/models/sf_message_sale.py index 7d6cd7cd..6519b7a1 100644 --- a/sf_message/models/sf_message_sale.py +++ b/sf_message/models/sf_message_sale.py @@ -27,7 +27,8 @@ class SFMessageSale(models.Model): if picking_ids: for picking_id in picking_ids: purchase_order_ids = ( - picking_id.procurement_group_id.stock_move_ids.created_purchase_line_id.order_id | picking_id.procurement_group_id.stock_move_ids.move_orig_ids.purchase_line_id.order_id).ids + picking_id.procurement_group_id.stock_move_ids.created_purchase_line_id.order_id | + picking_id.procurement_group_id.stock_move_ids.move_orig_ids.purchase_line_id.order_id).ids purchase_order_id.extend(purchase_order_ids) if purchase_order_id: purchase_order_list = self.env['purchase.order'].search([('id', 'in', purchase_order_id)]) diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py index a1611652..0c3045cb 100644 --- a/sf_message/models/sf_message_stock_picking.py +++ b/sf_message/models/sf_message_stock_picking.py @@ -43,7 +43,7 @@ class SFMessageStockPicking(models.Model): '{{number}}', str(i)).replace('{{request_url}}', url) product_id.append(mrp_production_info.product_id.id) contents.append(content) + return contents else: res = super(SFMessageStockPicking, self)._get_message(message_queue_id) - contents.append(res) - return contents + return res diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py index 2462b3f1..0f211198 100644 --- a/sf_message/models/sf_message_workorder.py +++ b/sf_message/models/sf_message_workorder.py @@ -8,8 +8,9 @@ class SFMessageWork(models.Model): @api.depends('production_availability', 'blocked_by_workorder_ids.state') def _compute_state(self): super(SFMessageWork, self)._compute_state() - if self.state == 'ready' and self.routing_type == '装夹预调': - self.add_queue('工单已下发通知') + for workorder in self: + if workorder.state == 'ready' and workorder.routing_type == '装夹预调': + workorder.add_queue('工单已下发通知') def _get_message(self, message_queue_ids): contents = [] From 93efbf742ef6a605baad32fd07a4bcb7e6119b51 Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Wed, 25 Sep 2024 14:36:32 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=88=80=E5=85=B7?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E7=89=A9=E6=96=99=E4=B8=8E=E7=89=A9=E6=96=99?= =?UTF-8?q?=E5=8F=B7=E6=95=B0=E6=8D=AE=E5=85=B3=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/product_template.py | 437 +++++++++++++++----- 1 file changed, 327 insertions(+), 110 deletions(-) diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index b18ab04c..6329dd9e 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -42,8 +42,11 @@ class ResProductMo(models.Model): product_model_type_id = fields.Many2one('sf.model.type', string='产品模型类型') embryo_model_type_id = fields.Many2one('sf.model.type', string='坯料模型类型') materials_id = fields.Many2one('sf.production.materials', string='材料') - materials_type_id = fields.Many2one('sf.materials.model', string='材料型号', + # materials_type_id = fields.Many2one('sf.materials.model', string='材料型号', + # domain="[('materials_id', '=', materials_id)]") + materials_type_id = fields.Many2one(related='cutting_tool_model_id.material_model_id', string='材料型号', domain="[('materials_id', '=', materials_id)]") + # cutting_tool_model_id.material_model_id server_product_process_parameters_id = fields.Many2one('sf.production.process.parameter', string='表面工艺参数(服务产品)') model_process_parameters_ids = fields.Many2many('sf.production.process.parameter', 'process_parameter_rel', @@ -55,43 +58,102 @@ class ResProductMo(models.Model): 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='类型', + # cutting_tool_type_id = fields.Many2one('sf.cutting.tool.type', string='类型', + # domain="[('cutting_tool_material_id.name', '=', cutting_tool_type)]") + cutting_tool_type_id = fields.Many2one(related='cutting_tool_model_id.cutting_tool_type_id', 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)') + # brand_id = fields.Many2one('sf.machine.brand', '品牌') + brand_id = fields.Many2one(related='cutting_tool_model_id.brand_id', string='品牌') + # cutting_tool_model_id.brand_id + # tool_length = fields.Float('长度(mm)') + tool_length = fields.Float(related='specification_id.length', string='长度(mm)') + # specification_id.length + # tool_width = fields.Float('宽度(mm)') + tool_width = fields.Float(related='specification_id.width', string='宽度(mm)') + # specification_id.width tool_height = fields.Float('高度(mm)') - tool_thickness = fields.Float('厚度(mm)') - tool_weight = fields.Float('重量(kg)') - tool_hardness = fields.Integer('硬度(hrc)') - coating_material = fields.Char('涂层材质') + # tool_thickness = fields.Float('厚度(mm)') + tool_thickness = fields.Float(related='specification_id.thickness', string='厚度(mm)') + # specification_id.thickness + # tool_weight = fields.Float('重量(kg)') + tool_weight = fields.Float(related='specification_id.weight', string='重量(kg)') + # specification_id.weight + # tool_hardness = fields.Integer('硬度(hrc)') + tool_hardness = fields.Integer(related='cutting_tool_model_id.tool_hardness', string='硬度(hrc)') + # cutting_tool_model_id.tool_hardness + # coating_material = fields.Char('涂层材质') + coating_material = fields.Char(related='cutting_tool_model_id.coating_material', string='涂层材质') + # cutting_tool_model_id.coating_material # 整体式刀具特有字段 - 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)') - cutting_tool_blade_number = fields.Selection( - [('0', '0'), ('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('6', '6'), ('7', '7'), ('8', '8')], - string='刃数(个)', default='0') + # cutting_tool_total_length = fields.Float('总长度(mm)', digits=(6, 1)) + cutting_tool_total_length = fields.Float(related='specification_id.total_length', string='总长度(mm)', digits=(6, 1)) + # specification_id.total_length + # cutting_tool_shank_length = fields.Float('柄部长度(mm)', digits=(6, 1)) + cutting_tool_shank_length = fields.Float(related='specification_id.handle_length', string='柄部长度(mm)', + digits=(6, 1)) + # specification_id.handle_length + # cutting_tool_blade_length = fields.Float('刃部长度(mm)') + cutting_tool_blade_length = fields.Float(related='specification_id.blade_length', string='刃部长度(mm)') + # specification_id.blade_length + # cutting_tool_blade_number = fields.Selection( + # [('0', '0'), ('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('6', '6'), ('7', '7'), ('8', '8')], + # string='刃数(个)', default='0') + cutting_tool_blade_number = fields.Selection(related='specification_id.blade_number', string='刃数(个)') + # specification_id.blade_number # 整体式刀具新增字段 - cutting_tool_neck_length = fields.Float('颈部长度(mm)', digits=(6, 1)) - cutting_tool_neck_diameter = fields.Float('颈部直径(mm)', digits=(6, 1)) - cutting_tool_shank_diameter = fields.Float('柄部直径(mm)', digits=(6, 1)) - cutting_tool_blade_tip_diameter = fields.Float('刀尖直径(mm)', digits=(6, 1)) - cutting_tool_blade_tip_taper = fields.Integer('刀尖锥度(°)') - cutting_tool_blade_helix_angle = fields.Integer('刃部螺旋角(°)') - cutting_tool_blade_type = fields.Char('刃部类型') - cutting_tool_pitch = fields.Float('牙距(mm)') - cutting_tool_blade_width = fields.Float('刃部宽度(mm)') - cutting_tool_blade_depth = fields.Float('刃部深度(mm)') + # cutting_tool_neck_length = fields.Float('颈部长度(mm)', digits=(6, 1)) + cutting_tool_neck_length = fields.Float(related='specification_id.neck_length', string='颈部长度(mm)', digits=(6, 1)) + # specification_id.neck_length + # cutting_tool_neck_diameter = fields.Float('颈部直径(mm)', digits=(6, 1)) + cutting_tool_neck_diameter = fields.Float(related='specification_id.neck_diameter', string='颈部直径(mm)', + digits=(6, 1)) + # specification_id.neck_diameter + # cutting_tool_shank_diameter = fields.Float('柄部直径(mm)', digits=(6, 1)) + cutting_tool_shank_diameter = fields.Float(related='specification_id.handle_diameter', string='柄部直径(mm)', digits=(6, 1)) + # specification_id.handle_diameter + # cutting_tool_blade_tip_diameter = fields.Float('刀尖直径(mm)', digits=(6, 1)) + cutting_tool_blade_tip_diameter = fields.Float(related='specification_id.blade_tip_diameter', string='刀尖直径(mm)', + digits=(6, 1)) + # specification_id.blade_tip_diameter + # cutting_tool_blade_tip_taper = fields.Integer('刀尖锥度(°)') + cutting_tool_blade_tip_taper = fields.Integer(related='specification_id.blade_tip_taper', string='刀尖锥度(°)') + # specification_id.blade_tip_taper + # cutting_tool_blade_helix_angle = fields.Integer('刃部螺旋角(°)') + cutting_tool_blade_helix_angle = fields.Integer(related='specification_id.blade_helix_angle', string='刃部螺旋角(°)') + # specification_id.blade_helix_angle + # cutting_tool_blade_type = fields.Char('刃部类型') + cutting_tool_blade_type = fields.Char(related='cutting_tool_model_id.blade_type', string='刃部类型') + # cutting_tool_pitch = fields.Float('牙距(mm)') + cutting_tool_pitch = fields.Float(related='specification_id.pitch', string='牙距(mm)') + # specification_id.pitch + # cutting_tool_blade_width = fields.Float('刃部宽度(mm)') + cutting_tool_blade_width = fields.Float(related='specification_id.blade_width', string='刃部宽度(mm)') + # specification_id.blade_width + # cutting_tool_blade_depth = fields.Float('刃部深度(mm)') + cutting_tool_blade_depth = fields.Float(related='specification_id.blade_depth', string='刃部深度(mm)') + # specification_id.blade_depth cutting_tool_cut_depth = fields.Float('切削深度(mm)') - cutting_tool_cut_depth_max = fields.Float('最大切削深度(mm)') - 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('刀尖倒角度(°)', size=20) - cutting_tool_blade_tip_r_size = fields.Float('刀尖R角(mm)') + # cutting_tool_cut_depth_max = fields.Float('最大切削深度(mm)') + cutting_tool_cut_depth_max = fields.Float(related='specification_id.cut_depth_max', string='最大切削深度(mm)') + # specification_id.cut_depth_max + # cutting_tool_coarse_medium_fine = fields.Selection([('粗', '粗'), ('中', '中'), ('精', '精')], '粗/中/精') + cutting_tool_coarse_medium_fine = fields.Selection(related='cutting_tool_model_id.integral_coarse_medium_fine', string='粗/中/精') + # cutting_tool_model_id.integral_coarse_medium_fine + # cutting_tool_run_out_accuracy_max = fields.Float('端跳精度max', digits=(6, 1)) + cutting_tool_run_out_accuracy_max = fields.Char(related='cutting_tool_model_id.integral_run_out_accuracy_max', string='端跳精度max', digits=(6, 1)) + # cutting_tool_model_id.integral_run_out_accuracy_max + # cutting_tool_run_out_accuracy_min = fields.Float('端跳精度min', digits=(6, 1)) + cutting_tool_run_out_accuracy_min = fields.Char(related='cutting_tool_model_id.integral_run_out_accuracy_min', + string='端跳精度min', digits=(6, 1)) + # cutting_tool_model_id.integral_run_out_accuracy_min + # cutting_tool_blade_tip_working_size = fields.Char('刀尖倒角度(°)', size=20) + cutting_tool_blade_tip_working_size = fields.Char(related='specification_id.blade_tip_working_size', + string='刀尖倒角度(°)', size=20) + # specification_id.blade_tip_working_size + # cutting_tool_blade_tip_r_size = fields.Float('刀尖R角(mm)') + cutting_tool_blade_tip_r_size = fields.Float(related='specification_id.tip_r_size', + string='刀尖R角(mm)') + # specification_id.tip_r_size fit_blade_shape_id = fields.Many2one('maintenance.equipment.image', '适配刀片形状', domain=[('type', '=', '刀片形状')]) suitable_machining_method_ids = fields.Many2many('maintenance.equipment.image', @@ -429,44 +491,97 @@ class ResProductMo(models.Model): # if not self.cutting_direction_ids: # raise ValidationError("请选择走刀方向") - cutting_speed_ids = fields.One2many('sf.cutting.speed', 'product_template_id', string='切削速度Vc') + # cutting_speed_ids = fields.One2many('sf.cutting.speed', 'product_template_id', string='切削速度Vc') + cutting_speed_ids = fields.One2many(related='cutting_tool_model_id.cutting_speed_ids', + string='切削速度Vc') + # cutting_tool_model_id.cutting_speed_ids feed_per_tooth_ids = fields.One2many('sf.feed.per.tooth', 'product_template_id', string='每齿走刀量fz') cutting_tool_diameter = fields.Float('刀具直径(mm)') - cutting_tool_rear_angle = fields.Integer('后角(°)') - cutting_tool_main_included_angle = fields.Integer('主偏角(°)') + # cutting_tool_rear_angle = fields.Integer('后角(°)') + cutting_tool_rear_angle = fields.Integer(related='specification_id.relief_angle', + string='后角(°)') + # specification_id.relief_angle + # cutting_tool_main_included_angle = fields.Integer('主偏角(°)') + cutting_tool_main_included_angle = fields.Integer(related='specification_id.main_included_angle', + string='主偏角(°)') + # specification_id.main_included_angle # 适用夹头型号可以多选 cutting_tool_chuck_id = fields.Many2one( 'sf.cutting_tool.standard.library', domain="[('cutting_tool_type', '=', '夹头')]", string='适用夹头型号') # 刀片参数 - cutting_tool_cut_blade_length = fields.Float('切削刃长(mm)') - cutting_tool_blade_tip_circular_arc_radius = fields.Char('刀尖圆弧半径(mm)', size=20) - cutting_tool_top_angle = fields.Integer('顶角(°)') - cutting_tool_inscribed_circle_diameter = fields.Float('内接圆直径(mm)') - cutting_tool_install_aperture_diameter = fields.Float('安装孔直径(mm)') - cutting_tool_chip_breaker_groove = fields.Selection([('无', '无'), ('单面', '单面'), ('双面', '双面')], - string='有无断屑槽') - cutting_tool_chip_breaker_type_code = fields.Char('断屑槽型代号') - 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_cut_blade_length = fields.Float('切削刃长(mm)') + cutting_tool_cut_blade_length = fields.Float(related='specification_id.cutting_blade_length', + string='切削刃长(mm)') + # specification_id.cutting_blade_length + # cutting_tool_blade_tip_circular_arc_radius = fields.Char('刀尖圆弧半径(mm)', size=20) + cutting_tool_blade_tip_circular_arc_radius = fields.Char(related='specification_id.blade_tip_circular_arc_radius', + string='刀尖圆弧半径(mm)') + # specification_id.blade_tip_circular_arc_radius + # cutting_tool_top_angle = fields.Integer('顶角(°)') + cutting_tool_top_angle = fields.Integer(related='specification_id.top_angle', + string='顶角(°)') + # specification_id.top_angle + # cutting_tool_inscribed_circle_diameter = fields.Float('内接圆直径(mm)') + cutting_tool_inscribed_circle_diameter = fields.Float(related='specification_id.inscribed_circle_diameter', + string='内接圆直径(mm)') + # specification_id.inscribed_circle_diameter + # cutting_tool_install_aperture_diameter = fields.Float('安装孔直径(mm)') + cutting_tool_install_aperture_diameter = fields.Float(related='specification_id.install_aperture_diameter', + string='安装孔直径(mm)') + # specification_id.install_aperture_diameter + # cutting_tool_chip_breaker_groove = fields.Selection([('无', '无'), ('单面', '单面'), ('双面', '双面')], + # string='有无断屑槽') + cutting_tool_chip_breaker_groove = fields.Selection(related='specification_id.chip_breaker_groove', + string='有无断屑槽') + # specification_id.chip_breaker_groove + # cutting_tool_chip_breaker_type_code = fields.Char('断屑槽型代号') + cutting_tool_chip_breaker_type_code = fields.Char(related='specification_id.chip_breaker_type_code', + string='断屑槽型代号') + # specification_id.chip_breaker_type_code + # 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_bladed_teeth_model = fields.Selection(related='specification_id.blade_teeth_model', + string='断屑槽型代号') + # specification_id.blade_teeth_model + # 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_blade_number = fields.Selection(related='specification_id.blade_blade_number', + string='刀片的刃数(个)') + # specification_id.blade_blade_number - cutting_tool_thread_model = fields.Selection([('无', '无'), ('外螺纹', '外螺纹'), ('内螺纹', '内螺纹')], - string='螺纹类型') - cutting_tool_thread_num = fields.Float('每英寸螺纹数(tpi)') - 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_thread_model = fields.Selection([('无', '无'), ('外螺纹', '外螺纹'), ('内螺纹', '内螺纹')], + # string='螺纹类型') + cutting_tool_thread_model = fields.Selection(related='specification_id.thread_model', + string='螺纹类型') + # specification_id.thread_model + # cutting_tool_thread_num = fields.Float('每英寸螺纹数(tpi)') + cutting_tool_thread_num = fields.Float(related='specification_id.thread_num', + string='每英寸螺纹数(tpi)') + # specification_id.thread_num + # cutting_tool_blade_tip_height_tolerance = fields.Char('刀尖高度公差(mm)', size=20) + cutting_tool_blade_tip_height_tolerance = fields.Char(related='specification_id.blade_tip_height_tolerance', + string='刀尖高度公差(mm)') + # specification_id.blade_tip_height_tolerance + # cutting_tool_inscribed_circle_tolerance = fields.Char('内接圆公差(mm)', size=20) + cutting_tool_inscribed_circle_tolerance = fields.Char(related='specification_id.inscribed_circle_tolerance', + string='内接圆公差(mm)') + # specification_id.inscribed_circle_tolerance + # cutting_tool_thickness_tolerance = fields.Char('厚度公差(mm)', size=20) + cutting_tool_thickness_tolerance = fields.Char(related='specification_id.thickness_tolerance', + string='厚度公差(mm)') + # specification_id.thickness_tolerance + # cutting_tool_jump_accuracy = fields.Char('径跳精度(mm)') + cutting_tool_jump_accuracy = fields.Char(related='specification_id.run_out_accuracy', + string='径跳精度(mm)') + # specification_id.run_out_accuracy cutting_tool_working_hardness = fields.Integer('加工硬度(hrc)') cutting_tool_cutter_bar_ids = fields.Many2many( 'sf.cutting_tool.standard.library', @@ -485,55 +600,153 @@ class ResProductMo(models.Model): 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.Float('刀杆直径(mm)') - cutting_tool_min_machining_aperture = fields.Integer('最小加工孔径(mm)') - cutting_tool_install_blade_tip_num = fields.Integer('可装刀片数/齿数(个)') - cutting_tool_installing_structure = fields.Char('安装结构', size=20) - cutting_tool_blade_id = fields.Many2one( - 'sf.cutting_tool.standard.library', - domain="[('cutting_tool_type', '=', '刀片')]", - string='适用刀片型号' # 使用空列表作为默认值 - ) - 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_knife_head_height = fields.Float('刀头高度(mm)') + cutting_tool_knife_head_height = fields.Float(related='specification_id.knife_head_height', + string='刀头高度(mm)') + # specification_id.knife_head_height + # cutting_tool_knife_head_width = fields.Float('刀头宽度(mm)') + cutting_tool_knife_head_width = fields.Float(related='specification_id.knife_head_width', + string='刀头宽度(mm)') + # cutting_tool_knife_head_length = fields.Float('刀头长度(mm)') + cutting_tool_knife_head_length = fields.Float(related='specification_id.knife_head_length', + string='刀头长度(mm)') + # cutting_tool_blade_diameter = fields.Float('刃径/刃部直径(mm)') + cutting_tool_blade_diameter = fields.Float(related='specification_id.blade_diameter', + string='刃径/刃部直径(mm)') + # specification_id.blade_diameter + # cutting_tool_cutter_arbor_diameter = fields.Float('刀杆直径(mm)') + cutting_tool_cutter_arbor_diameter = fields.Float(related='specification_id.cutter_arbor_diameter', + string='刀杆直径(mm)') + # specification_id.cutter_arbor_diameter + # cutting_tool_min_machining_aperture = fields.Integer('最小加工孔径(mm)') + cutting_tool_min_machining_aperture = fields.Integer(related='specification_id.min_machining_aperture', + string='最小加工孔径(mm)') + # specification_id.min_machining_aperture + # cutting_tool_install_blade_tip_num = fields.Integer('可装刀片数/齿数(个)') + cutting_tool_install_blade_tip_num = fields.Integer(related='specification_id.install_blade_tip_num', + string='可装刀片数/齿数(个)') + # specification_id.install_blade_tip_num + # cutting_tool_installing_structure = fields.Char('安装结构', size=20) + cutting_tool_installing_structure = fields.Char(related='specification_id.installing_structure', + string='安装结构') + # specification_id.installing_structure + # cutting_tool_blade_id = fields.Many2one( + # 'sf.cutting_tool.standard.library', + # domain="[('cutting_tool_type', '=', '刀片')]", + # string='适用刀片型号' # 使用空列表作为默认值 + # ) + cutting_tool_blade_id = fields.Many2one(related='specification_id.blade_id', + domain="[('cutting_tool_type', '=', '刀片')]", + string='适用刀片型号') + # specification_id.blade_id + # cutting_tool_tool_shim = fields.Char('适配刀垫型号', size=50) + cutting_tool_tool_shim = fields.Char(related='specification_id.tool_shim', + string='适配刀垫型号') + # specification_id.tool_shim + # cutting_tool_cotter_pin = fields.Char('适配销钉型号', size=50) + cutting_tool_cotter_pin = fields.Char(related='specification_id.cotter_pin', + string='适配销钉型号') + # cutting_tool_pressing_plate = fields.Char('适配压板型号', size=50) + cutting_tool_pressing_plate = fields.Char(related='specification_id.pressing_plate', + string='适配压板型号') + # cutting_tool_screw = fields.Char('适配螺钉型号', size=50) + cutting_tool_screw = fields.Char(related='specification_id.screw', + string='适配螺钉型号') + # specification_id.screw + # cutting_tool_wrench = fields.Char('适配扳手型号') + cutting_tool_wrench = fields.Char(related='specification_id.spanner', + string='适配扳手型号') + # specification_id.spanner + # cutting_tool_is_cooling_hole = fields.Boolean('有无冷却孔', default=False) + cutting_tool_is_cooling_hole = fields.Boolean(related='specification_id.is_cooling_hole', + string='有无冷却孔') + # specification_id.is_cooling_hole + # cutting_tool_locating_slot_code = fields.Char('定位槽代号', size=20) + cutting_tool_locating_slot_code = fields.Char(related='specification_id.locating_slot_code', + string='定位槽代号') + # specification_id.locating_slot_code # 刀盘参数 - cutting_tool_cutter_head_diameter = fields.Float('刀盘直径(mm)') - cutting_tool_interface_diameter = fields.Float('接口直径(mm)') - + # cutting_tool_cutter_head_diameter = fields.Float('刀盘直径(mm)') + cutting_tool_cutter_head_diameter = fields.Float(related='specification_id.cutter_head_diameter', + string='刀盘直径(mm)') + # specification_id.cutter_head_diameter + # cutting_tool_interface_diameter = fields.Float('接口直径(mm)') + cutting_tool_interface_diameter = fields.Float(related='specification_id.interface_diameter', + string='接口直径(mm)') + # specification_id.interface_diameter # 刀柄参数 - cutting_tool_clamping_diameter_max = fields.Float('最大夹持直径') - cutting_tool_clamping_diameter_min = fields.Float('最小夹持直径') - cutting_tool_flange_length = fields.Float('法兰柄长(mm)') - cutting_tool_flange_diameter = fields.Float('法兰直径(mm)') - cutting_tool_is_safety_lock = fields.Boolean('有无安全锁', default=False) - cutting_tool_is_high_speed_cutting = fields.Boolean('可高速切削', default=False) - cutting_tool_change_time = fields.Integer('换刀时间(s)') - cutting_tool_clamping_way = fields.Char('夹持方式') - cutting_tool_fit_chuck_size = fields.Char('适配夹头尺寸') - cutting_tool_taper_shank_model = fields.Char('锥柄型号') + # cutting_tool_clamping_diameter_max = fields.Float('最大夹持直径') + cutting_tool_clamping_diameter_max = fields.Float(related='specification_id.max_clamping_diameter', + string='最大夹持直径') + # specification_id.max_clamping_diameter + # cutting_tool_clamping_diameter_min = fields.Float('最小夹持直径') + cutting_tool_clamping_diameter_min = fields.Float(related='specification_id.min_clamping_diameter', + string='最小夹持直径') + # specification_id.min_clamping_diameter + # cutting_tool_flange_length = fields.Float('法兰柄长(mm)') + cutting_tool_flange_length = fields.Float(related='specification_id.flange_shank_length', + string='法兰柄长(mm)') + # cutting_tool_flange_diameter = fields.Float('法兰直径(mm)') + cutting_tool_flange_diameter = fields.Float(related='specification_id.flange_diameter', + string='法兰直径(mm)') + # cutting_tool_is_safety_lock = fields.Boolean('有无安全锁', default=False) + cutting_tool_is_safety_lock = fields.Boolean(related='specification_id.is_safe_lock', + string='有无安全锁') + # cutting_tool_is_high_speed_cutting = fields.Boolean('可高速切削', default=False) + cutting_tool_is_high_speed_cutting = fields.Boolean(related='specification_id.is_quick_cutting', + string='可高速切削') + # cutting_tool_change_time = fields.Integer('换刀时间(s)') + cutting_tool_change_time = fields.Integer(related='specification_id.tool_changing_time', + string='换刀时间(s)') + # cutting_tool_clamping_way = fields.Char('夹持方式') + cutting_tool_clamping_way = fields.Char(related='specification_id.clamping_mode', + string='夹持方式') + # cutting_tool_fit_chuck_size = fields.Char('适配夹头尺寸') + cutting_tool_fit_chuck_size = fields.Char(related='specification_id.fit_chuck_size', + string='适配夹头尺寸') + # cutting_tool_taper_shank_model = fields.Char('锥柄型号') + cutting_tool_taper_shank_model = fields.Char(related='specification_id.taper_shank_model', + string='锥柄型号') cutting_tool_standard_speed = fields.Integer('标准转速(n/min)') - cutting_tool_speed_max = fields.Integer('最大转速(n/min)') + # cutting_tool_speed_max = fields.Integer('最大转速(n/min)') + cutting_tool_speed_max = fields.Integer(related='specification_id.max_rotate_speed', + string='最大转速(n/min)') + # specification_id.max_rotate_speed cutting_tool_cooling_type = fields.Char('冷却类型') cutting_tool_dynamic_balance_class = fields.Char('动平衡等级') - cutting_tool_fit_nut_model = fields.Char('适用锁紧螺母型号') - + # cutting_tool_fit_nut_model = fields.Char('适用锁紧螺母型号') + cutting_tool_fit_nut_model = fields.Char(related='specification_id.nut', + string='适用锁紧螺母型号') + # specification_id.nut # 夹头参数 - 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('适用冷却套型号') - cutting_tool_max_load_capacity = fields.Float('最大负载能力(kg)') - cutting_tool_er_size_model = fields.Char('尺寸型号') + # cutting_tool_taper = fields.Integer('锥度(°)') + cutting_tool_taper = fields.Integer(related='specification_id.taper', + string='锥度(°)') + # specification_id.taper + # cutting_tool_top_diameter = fields.Float('顶部直径') + cutting_tool_top_diameter = fields.Float(related='specification_id.top_diameter', + string='顶部直径') + # specification_id.top_diameter + # cutting_tool_outer_diameter = fields.Float('外径(mm)') + # specification_id.outer_diameter + cutting_tool_outer_diameter = fields.Float(related='specification_id.outer_diameter', + string='外径(mm)') + # cutting_tool_inner_diameter = fields.Float('内径(mm)') + cutting_tool_inner_diameter = fields.Float(related='specification_id.inner_diameter', + string='内径(mm)') + # specification_id.inner_diameter + # cooling_suit_type_ids = fields.Char('适用冷却套型号') + cooling_suit_type_ids = fields.Char(related='specification_id.cooling_jacket', + string='适用冷却套型号') + # specification_id.cooling_jacket + # cutting_tool_max_load_capacity = fields.Float('最大负载能力(kg)') + cutting_tool_max_load_capacity = fields.Float(related='specification_id.max_load_capacity', + string='最大负载能力(kg)') + # specification_id.max_load_capacity + # cutting_tool_er_size_model = fields.Char('尺寸型号') + cutting_tool_er_size_model = fields.Char(related='specification_id.er_size_model', + string='尺寸型号') + # specification_id.er_size_model # cutting_tool_handle_ids = fields.Many2many( # 'sf.cutting_tool.standard.library', # relation='product_cutting_tool_library_chuck_handle_rel', @@ -543,11 +756,15 @@ class ResProductMo(models.Model): # string='适用刀柄型号' # ) - cutting_tool_handle_id = fields.Many2one( - 'sf.cutting_tool.standard.library', - domain="[('cutting_tool_type', '=', '刀柄')]", - string='适用刀柄型号' - ) + # cutting_tool_handle_id = fields.Many2one( + # 'sf.cutting_tool.standard.library', + # domain="[('cutting_tool_type', '=', '刀柄')]", + # string='适用刀柄型号' + # ) + cutting_tool_handle_id = fields.Many2one(related='cutting_tool_model_id.handle_id', + domain="[('cutting_tool_type', '=', '刀柄')]", + string='适用刀柄型号') + # cutting_tool_model_id.handle_id # 注册状态 register_state = fields.Selection([('未注册', '未注册'), ('已注册', '已注册'), ('注册失败', '注册失败')],