From ed5f47cc3120156844ad96e2ac08fb9ea6dd03ee Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Mon, 27 Nov 2023 17:34:23 +0800 Subject: [PATCH 1/2] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E5=88=80=E5=85=B7?= =?UTF-8?q?=E6=A0=87=E5=87=86=E5=BA=93=E5=88=80=E7=89=87=E5=BD=A2=E7=8A=B6?= =?UTF-8?q?=EF=BC=8C=E6=9F=84=E9=83=A8=E7=B1=BB=E5=9E=8B=EF=BC=8C=E5=8E=8B?= =?UTF-8?q?=E7=B4=A7=E6=96=B9=E5=BC=8F=EF=BC=8C=E5=88=80=E5=B0=96=E7=89=B9?= =?UTF-8?q?=E5=BE=81=EF=BC=8C=E5=AD=97=E6=AE=B5=E7=B1=BB=E5=9E=8B=E5=8F=8A?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E6=8E=A7=E4=BB=B6=E6=98=BE=E7=A4=BA=202.?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=A7=E5=93=81=E9=A1=B5=E9=9D=A2=EF=BC=9A?= =?UTF-8?q?=E5=88=80=E7=89=87=E5=BD=A2=E7=8A=B6=EF=BC=8C=E6=9F=84=E9=83=A8?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=EF=BC=8C=E5=8E=8B=E7=B4=A7=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=EF=BC=8C=E5=88=80=E5=B0=96=E7=89=B9=E5=BE=81=EF=BC=8C=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E7=B1=BB=E5=9E=8B=E5=8F=8A=E5=AF=B9=E5=BA=94=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/tool_base_new.py | 9 ++++--- sf_base/views/tool_views.xml | 8 +++---- .../product_template_management_view.xml | 2 +- sf_manufacturing/models/product_template.py | 15 +++++------- sf_mrs_connect/controllers/controllers.py | 4 +--- sf_mrs_connect/models/sync_common.py | 24 +++++++------------ sf_tool_management/models/base.py | 6 ++--- .../models/tool_material_search.py | 4 +--- sf_tool_management/views/tool_base_views.xml | 4 ++-- .../views/tool_material_search.xml | 4 ++-- 10 files changed, 32 insertions(+), 48 deletions(-) diff --git a/sf_base/models/tool_base_new.py b/sf_base/models/tool_base_new.py index 11af399c..dcf7000c 100644 --- a/sf_base/models/tool_base_new.py +++ b/sf_base/models/tool_base_new.py @@ -76,21 +76,20 @@ class CuttingToolModel(models.Model): integral_run_out_accuracy_max = fields.Char('整体式刀具端跳精度max') integral_run_out_accuracy_min = fields.Char('整体式刀具端跳精度min') - fit_blade_shape_id = fields.Many2many('maintenance.equipment.image', 'fit_blade_shape_library_rel', + fit_blade_shape_id = fields.Many2one('maintenance.equipment.image', '适配刀片形状', domain=[('type', '=', '刀片形状')]) suitable_machining_method_ids = fields.Many2many('maintenance.equipment.image', 'suitable_machining_method_library_rel', '适合加工方式', domain=[('type', '=', '加工能力')]) - blade_tip_characteristics_id = fields.Many2many('maintenance.equipment.image', - 'blade_tip_character_library_rel', + blade_tip_characteristics_id = fields.Many2one('maintenance.equipment.image', '刀尖特征', domain=[('type', '=', '刀尖特征')]) - handle_type_ids = fields.Many2many('maintenance.equipment.image', 'handle_type_library_rel', + handle_type_id = fields.Many2one('maintenance.equipment.image', '柄部类型', domain=[('type', '=', '柄部类型')]) cutting_direction_ids = fields.Many2many('maintenance.equipment.image', 'cutting_direction_library_rel', '走刀方向', domain=[('type', '=', '走刀方向')]) suitable_coolant_ids = fields.Many2many('maintenance.equipment.image', 'suitable_coolant_library_rel', '适合冷却液', domain=[('type', '=', '冷却液')]) - compaction_way_ids = fields.Many2many('maintenance.equipment.image', 'compaction_way_library_rel', + compaction_way_id = fields.Many2one('maintenance.equipment.image', '压紧方式', domain=[('type', '=', '压紧方式')]) integral_tool_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters', 'standard_library_id', string='整体式刀具基本参数') diff --git a/sf_base/views/tool_views.xml b/sf_base/views/tool_views.xml index c1e03123..d0f7d649 100644 --- a/sf_base/views/tool_views.xml +++ b/sf_base/views/tool_views.xml @@ -170,7 +170,7 @@ - + @@ -180,15 +180,15 @@ + widget="many2one_radio"/> - + - + diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml index 01d40a17..428db02c 100644 --- a/sf_dlm_management/views/product_template_management_view.xml +++ b/sf_dlm_management/views/product_template_management_view.xml @@ -405,7 +405,7 @@ - + diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 5a079abe..99e0b3e2 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -87,7 +87,7 @@ class ResProductMo(models.Model): 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', + fit_blade_shape_id = fields.Many2one('maintenance.equipment.image', '适配刀片形状', domain=[('type', '=', '刀片形状')]) suitable_machining_method_ids = fields.Many2many('maintenance.equipment.image', 'rel_machining_product_template', '适合加工方式', @@ -95,8 +95,7 @@ class ResProductMo(models.Model): 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', '柄部类型', - domain=[('type', '=', '柄部类型')]) + handle_type_id = fields.Many2one('maintenance.equipment.image', '柄部类型',domain=[('type', '=', '柄部类型')]) cutting_direction_ids = fields.Many2many('maintenance.equipment.image', 'rel_cutting_product_template', '走刀方向', domain=[('type', '=', '走刀方向')]) suitable_coolant_ids = fields.Many2many('maintenance.equipment.image', 'rel_coolant_product_template', @@ -141,7 +140,7 @@ class ResProductMo(models.Model): item.fit_blade_shape_id = False item.suitable_machining_method_ids = False item.blade_tip_characteristics_id = False - item.handle_type_ids = False + item.handle_type_id = False item.cutting_direction_ids = False item.suitable_coolant_ids = False item.compaction_way_ids = False @@ -292,9 +291,7 @@ class ResProductMo(models.Model): 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.handle_type_id = self.cutting_tool_model_id.handle_type_id self.cutting_direction_ids = [(6, 0, [])] if not self.cutting_tool_model_id.cutting_direction_ids else [ @@ -346,7 +343,7 @@ class ResProductMo(models.Model): self.feed_per_tooth_ids = False @api.constrains('fit_blade_shape_id', 'suitable_machining_method_ids', 'blade_tip_characteristics_id', - 'handle_type_ids', 'cutting_direction_ids', 'suitable_coolant_ids', 'compaction_way_ids') + 'handle_type_id', 'cutting_direction_ids', 'suitable_coolant_ids', 'compaction_way_ids') def _check_cutting_tool_ability(self): if self.cutting_tool_type in ['整体式刀具', '刀片', '刀杆', '刀盘']: if self.cutting_tool_type in ['刀片', '刀杆', '刀盘']: @@ -359,7 +356,7 @@ class ResProductMo(models.Model): if not self.suitable_coolant_ids: raise ValidationError("请选择适合冷却液") elif self.cutting_tool_type == '整体式刀具': - if not self.handle_type_ids: + if not self.handle_type_id: raise ValidationError("请选择柄部类型") if not self.suitable_coolant_ids: raise ValidationError("请选择适合冷却液") diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py index 1d21f4f1..a6a1b25f 100644 --- a/sf_mrs_connect/controllers/controllers.py +++ b/sf_mrs_connect/controllers/controllers.py @@ -1,9 +1,7 @@ # -*- coding: utf-8 -*- +import logging import json import base64 -import logging -import os -from datetime import date, timedelta from odoo import http from odoo.http import request diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index 7439c87b..22231646 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -1820,15 +1820,13 @@ class Cutting_tool_standard_library(models.Model): "cutter_pad_ids": [(6, 0, [])] if not item.get('cutter_pad_codes') else self.env[ 'sf.cutting_tool.standard.library']._get_ids(item['cutter_pad_codes'], result['factory_short_name']), - "fit_blade_shape_id": [(6, 0, [])] if not item.get('fit_blade_shape') else self.env[ - 'maintenance.equipment.image']._get_ids(item['fit_blade_shape']), + "fit_blade_shape_id": item.get('fit_blade_shape') , "suitable_machining_method_ids": [(6, 0, [])] if not item.get( 'suitable_machining_methods') else self.env['maintenance.equipment.image']._get_ids( item['suitable_machining_methods']), "blade_tip_characteristics_id": [(6, 0, [])] if not item.get('blade_tip_characteristics') else self.env['maintenance.equipment.image']._get_ids(item['blade_tip_characteristics']), - "handle_type_ids": [(6, 0, [])] if not item.get('handle_type') else self.env[ - 'maintenance.equipment.image']._get_ids(item['handle_type']), + "handle_type_id": item.get('handle_type'), "cutting_direction_ids": [(6, 0, [])] if not item.get('cutting_direction') else self.env[ 'maintenance.equipment.image']._get_ids(item['cutting_direction']), "suitable_coolant_ids": [(6, 0, [])] if not item.get('suitable_coolant') else self.env[ @@ -1868,15 +1866,13 @@ class Cutting_tool_standard_library(models.Model): "cutter_pad_ids": [(6, 0, [])] if not item.get('cutter_pad_codes') else self.env[ 'sf.cutting_tool.standard.library']._get_ids(item['cutter_pad_codes'], result['factory_short_name']), - "fit_blade_shape_id": [(6, 0, [])] if not item.get('fit_blade_shape') else self.env[ - 'maintenance.equipment.image']._get_ids(item['fit_blade_shape']), + "fit_blade_shape_id": item.get('fit_blade_shape'), "suitable_machining_method_ids": [(6, 0, [])] if not item.get( 'suitable_machining_methods') else self.env['maintenance.equipment.image']._get_ids( item['suitable_machining_methods']), "blade_tip_characteristics_id": [(6, 0, [])] if not item.get('blade_tip_characteristics') else self.env['maintenance.equipment.image']._get_ids(item['blade_tip_characteristics']), - "handle_type_ids": [(6, 0, [])] if not item.get('handle_type') else self.env[ - 'maintenance.equipment.image']._get_ids(item['handle_type']), + "handle_type_id":item.get('handle_type'), "cutting_direction_ids": [(6, 0, [])] if not item.get('cutting_direction') else self.env[ 'maintenance.equipment.image']._get_ids(item['cutting_direction']), "suitable_coolant_ids": [(6, 0, [])] if not item.get('suitable_coolant') else self.env[ @@ -1985,15 +1981,13 @@ class Cutting_tool_standard_library(models.Model): "cutter_pad_ids": [(6, 0, [])] if not item.get('cutter_pad_codes') else self.env[ 'sf.cutting_tool.standard.library']._get_ids(item['cutter_pad_codes'], result['factory_short_name']), - "fit_blade_shape_id": [(6, 0, [])] if not item.get('fit_blade_shape') else self.env[ - 'maintenance.equipment.image']._get_ids(item['fit_blade_shape']), + "fit_blade_shape_id": item.get('fit_blade_shape'), "suitable_machining_method_ids": [(6, 0, [])] if not item.get( 'suitable_machining_method') else self.env['maintenance.equipment.image']._get_ids( item['suitable_machining_method']), "blade_tip_characteristics_id": [(6, 0, [])] if not item.get('blade_tip_characteristics') else self.env['maintenance.equipment.image']._get_ids(item['blade_tip_characteristics']), - "handle_type_ids": [(6, 0, [])] if not item.get('handle_type') else self.env[ - 'maintenance.equipment.image']._get_ids(item['handle_type']), + "handle_type_id": item.get('handle_type'), "cutting_direction_ids": [(6, 0, [])] if not item.get('cutting_direction') else self.env[ 'maintenance.equipment.image']._get_ids(item['cutting_direction']), "suitable_coolant_ids": [(6, 0, [])] if not item.get('suitable_coolant') else self.env[ @@ -2033,15 +2027,13 @@ class Cutting_tool_standard_library(models.Model): "cutter_pad_ids": [(6, 0, [])] if not item.get('cutter_pad_codes') else self.env[ 'sf.cutting_tool.standard.library']._get_ids(item['cutter_pad_codes'], result['factory_short_name']), - "fit_blade_shape_id": [(6, 0, [])] if not item.get('fit_blade_shape') else self.env[ - 'maintenance.equipment.image']._get_ids(item['fit_blade_shape']), + "fit_blade_shape_id": item.get('fit_blade_shape'), "suitable_machining_method_ids": [(6, 0, [])] if not item.get( 'suitable_machining_methods') else self.env['maintenance.equipment.image']._get_ids( item['suitable_machining_methods']), "blade_tip_characteristics_id": [(6, 0, [])] if not item.get('blade_tip_characteristics') else self.env['maintenance.equipment.image']._get_ids(item['blade_tip_characteristics']), - "handle_type_ids": [(6, 0, [])] if not item.get('handle_type') else self.env[ - 'maintenance.equipment.image']._get_ids(item['handle_type']), + "handle_type_id": item.get('handle_type'), "cutting_direction_ids": [(6, 0, [])] if not item.get('cutting_direction') else self.env[ 'maintenance.equipment.image']._get_ids(item['cutting_direction']), "suitable_coolant_ids": [(6, 0, [])] if not item.get('suitable_coolant') else self.env[ diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 7402632f..c8c090a6 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -89,9 +89,9 @@ class FunctionalCuttingToolEntity(models.Model): blade_tip_characteristics_id = fields.Many2many( 'maintenance.equipment.image', 'rel_blade_tip_product_template_tool_entity', '刀尖特征', domain=[('type', '=', '刀尖特征')], related='cutting_tool_integral_model_id.blade_tip_characteristics_id') - handle_type_ids = fields.Many2many( - 'maintenance.equipment.image', 'rel_handle_product_template_tool_entity', '柄部类型', - domain=[('type', '=', '柄部类型')], related='cutting_tool_integral_model_id.handle_type_ids') + handle_type_id = fields.Many2one( + 'maintenance.equipment.image', '柄部类型', + domain=[('type', '=', '柄部类型')], related='cutting_tool_integral_model_id.handle_type_id') cutting_direction_ids = fields.Many2many( 'maintenance.equipment.image', 'rel_cutting_product_template_tool_entity', '走刀方向', domain=[('type', '=', '走刀方向')], related='cutting_tool_integral_model_id.cutting_direction_ids') diff --git a/sf_tool_management/models/tool_material_search.py b/sf_tool_management/models/tool_material_search.py index b89b76cd..3c9180fc 100644 --- a/sf_tool_management/models/tool_material_search.py +++ b/sf_tool_management/models/tool_material_search.py @@ -102,9 +102,7 @@ class SfToolMaterialSearch(models.Model): blade_tip_characteristics_id = fields.Many2many('maintenance.equipment.image', 'rel_blade_tip_product_template_material_search', '刀尖特征', domain=[('type', '=', '刀尖特征')]) - handle_type_ids = fields.Many2many('maintenance.equipment.image', - 'rel_handle_product_template_material_search', '柄部类型', - domain=[('type', '=', '柄部类型')]) + handle_type_id = fields.Many2many('maintenance.equipment.image', '柄部类型',domain=[('type', '=', '柄部类型')]) cutting_direction_ids = fields.Many2many('maintenance.equipment.image', 'rel_cutting_product_template_material_search', '走刀方向', domain=[('type', '=', '走刀方向')]) diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index 674c9faf..8a4713e1 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -110,8 +110,8 @@ domain="[('id','in',blade_tip_characteristics_id)]"/> - + diff --git a/sf_tool_management/views/tool_material_search.xml b/sf_tool_management/views/tool_material_search.xml index 768786e6..3bb5d3ea 100644 --- a/sf_tool_management/views/tool_material_search.xml +++ b/sf_tool_management/views/tool_material_search.xml @@ -231,10 +231,10 @@ - + - + From 07be7c307452627b6622bdc53e5cae596132c749 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Tue, 28 Nov 2023 17:08:56 +0800 Subject: [PATCH 2/2] =?UTF-8?q?1.=E5=90=8C=E6=AD=A5=E5=88=80=E5=85=B7?= =?UTF-8?q?=E6=A0=87=E5=87=86=E5=BA=93=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=88=80=E7=89=87=E5=BD=A2=E7=8A=B6=EF=BC=8C=E6=9F=84=E9=83=A8?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=EF=BC=8C=E5=88=80=E5=B0=96=E7=89=B9=E5=BE=81?= =?UTF-8?q?=EF=BC=8C=E5=8E=8B=E7=B4=A7=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/tool_base_new.py | 13 ++++ sf_base/views/tool_views.xml | 2 +- .../product_template_management_view.xml | 6 +- sf_manufacturing/models/product_template.py | 26 ++++---- sf_mrs_connect/models/sync_common.py | 61 +++++++++++-------- sf_sale/security/group_security.xml | 4 +- sf_tool_management/models/base.py | 3 +- .../models/tool_material_search.py | 3 +- sf_tool_management/views/tool_base_views.xml | 2 +- 9 files changed, 70 insertions(+), 50 deletions(-) diff --git a/sf_base/models/tool_base_new.py b/sf_base/models/tool_base_new.py index dcf7000c..c619ea9f 100644 --- a/sf_base/models/tool_base_new.py +++ b/sf_base/models/tool_base_new.py @@ -217,3 +217,16 @@ class MaintenanceStandardImage(models.Model): new_res.append([id, name, data_uri]) # 返回新的结果列表 return new_res + + @api.model + def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None): + # 调用原生的search_read方法获取记录 + records = super(MaintenanceStandardImage, self).search_read(domain, fields, offset, limit, order) + # 遍历每条记录,添加image数据 + for record in records: + image_field = self.browse(record['id']).image + if image_field: + record['image'] = f"data:image/png;base64,{image_field.decode('utf-8')}" + else: + record['image'] = "" + return records diff --git a/sf_base/views/tool_views.xml b/sf_base/views/tool_views.xml index d0f7d649..e7015700 100644 --- a/sf_base/views/tool_views.xml +++ b/sf_base/views/tool_views.xml @@ -188,7 +188,7 @@ - + diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml index 428db02c..485499d4 100644 --- a/sf_dlm_management/views/product_template_management_view.xml +++ b/sf_dlm_management/views/product_template_management_view.xml @@ -390,7 +390,7 @@ - + @@ -400,7 +400,7 @@ + widget="many2one_radio"/> - + diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 99e0b3e2..124e0058 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -92,15 +92,14 @@ class ResProductMo(models.Model): suitable_machining_method_ids = fields.Many2many('maintenance.equipment.image', 'rel_machining_product_template', '适合加工方式', domain=[('type', '=', '加工能力')]) - blade_tip_characteristics_id = fields.Many2many('maintenance.equipment.image', - 'rel_blade_tip_product_template', '刀尖特征', + blade_tip_characteristics_id = fields.Many2one('maintenance.equipment.image', '刀尖特征', domain=[('type', '=', '刀尖特征')]) handle_type_id = fields.Many2one('maintenance.equipment.image', '柄部类型',domain=[('type', '=', '柄部类型')]) cutting_direction_ids = fields.Many2many('maintenance.equipment.image', 'rel_cutting_product_template', '走刀方向', 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', + compaction_way_id = fields.Many2one('maintenance.equipment.image', '压紧方式', domain=[('type', '=', '压紧方式')]) @api.onchange('cutting_tool_material_id') @@ -143,7 +142,7 @@ class ResProductMo(models.Model): item.handle_type_id = False item.cutting_direction_ids = False item.suitable_coolant_ids = False - item.compaction_way_ids = False + item.compaction_way_id = False item.cutting_speed_ids = False item.feed_per_tooth_ids = False @@ -287,11 +286,9 @@ class ResProductMo(models.Model): 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.blade_tip_characteristics_id = self.cutting_tool_model_id.blade_tip_characteristics_id.id - self.handle_type_id = self.cutting_tool_model_id.handle_type_id + self.handle_type_id = self.cutting_tool_model_id.handle_type_id.id self.cutting_direction_ids = [(6, 0, [])] if not self.cutting_tool_model_id.cutting_direction_ids else [ @@ -300,9 +297,8 @@ class ResProductMo(models.Model): 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)] + self.compaction_way_id = self.cutting_tool_model_id.compaction_way_id.id + self.fit_blade_shape_id = self.cutting_tool_model_id.fit_blade_shape_id.id else: self.cutting_tool_type_id = False self.brand_id = False @@ -335,22 +331,22 @@ class ResProductMo(models.Model): self.fit_blade_shape_id = False self.suitable_machining_method_ids = False self.blade_tip_characteristics_id = False - self.handle_type_ids = False + self.handle_type_id = False self.cutting_direction_ids = False self.suitable_coolant_ids = False - self.compaction_way_ids = False + self.compaction_way_id = False self.cutting_speed_ids = False self.feed_per_tooth_ids = False @api.constrains('fit_blade_shape_id', 'suitable_machining_method_ids', 'blade_tip_characteristics_id', - 'handle_type_id', 'cutting_direction_ids', 'suitable_coolant_ids', 'compaction_way_ids') + 'handle_type_id', 'cutting_direction_ids', 'suitable_coolant_ids', 'compaction_way_id') def _check_cutting_tool_ability(self): if self.cutting_tool_type in ['整体式刀具', '刀片', '刀杆', '刀盘']: if self.cutting_tool_type in ['刀片', '刀杆', '刀盘']: if not self.fit_blade_shape_id: raise ValidationError("请选择适配刀片形状") if self.cutting_tool_type in ['刀杆', '刀盘']: - if not self.compaction_way_ids: + if not self.compaction_way_id: raise ValidationError("请选择压紧方式") if self.cutting_tool_type == '刀片': if not self.suitable_coolant_ids: diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index 22231646..1542cf99 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -1800,6 +1800,7 @@ class Cutting_tool_standard_library(models.Model): for feed_per_tooth_4_item in item['feed_per_tooth_4']: feed_per_tooth_4_list.append( self.env['sf.feed.per.tooth']._json_feed_per_tooth(feed_per_tooth_4_item)) + if not cutting_tool_standard_library: self.create({ "code": item['code'].replace("JKM", result['factory_short_name']), @@ -1820,19 +1821,22 @@ class Cutting_tool_standard_library(models.Model): "cutter_pad_ids": [(6, 0, [])] if not item.get('cutter_pad_codes') else self.env[ 'sf.cutting_tool.standard.library']._get_ids(item['cutter_pad_codes'], result['factory_short_name']), - "fit_blade_shape_id": item.get('fit_blade_shape') , + "fit_blade_shape_id": False if not item['fit_blade_shape'] else self.env[ + 'maintenance.equipment.image'].search( + [('name', '=', item['fit_blade_shape'])]).id, "suitable_machining_method_ids": [(6, 0, [])] if not item.get( 'suitable_machining_methods') else self.env['maintenance.equipment.image']._get_ids( item['suitable_machining_methods']), - "blade_tip_characteristics_id": [(6, 0, [])] if not item.get('blade_tip_characteristics') else - self.env['maintenance.equipment.image']._get_ids(item['blade_tip_characteristics']), - "handle_type_id": item.get('handle_type'), + "blade_tip_characteristics_id": self.env['maintenance.equipment.image'].search( + [('name', '=', item['blade_tip_characteristics'])]).id, + "handle_type_id": self.env['maintenance.equipment.image'].search( + [('name', '=', item['handle_type'])]).id, "cutting_direction_ids": [(6, 0, [])] if not item.get('cutting_direction') else self.env[ 'maintenance.equipment.image']._get_ids(item['cutting_direction']), "suitable_coolant_ids": [(6, 0, [])] if not item.get('suitable_coolant') else self.env[ 'maintenance.equipment.image']._get_ids(item['suitable_coolant']), - "compaction_way_ids": [(6, 0, [])] if not item.get('compaction_way') else self.env[ - 'maintenance.equipment.image']._get_ids(item['compaction_way']), + "compaction_way_id": self.env['maintenance.equipment.image'].search( + [('name', '=', item['compaction_way'])]).id, "integral_tool_basic_parameters_ids": integral_tool_basic_param_list, "blade_basic_parameters_ids": blade_basic_param_list, "cutter_bar_basic_parameters_ids": cutter_arbor_basic_param_list, @@ -1866,19 +1870,22 @@ class Cutting_tool_standard_library(models.Model): "cutter_pad_ids": [(6, 0, [])] if not item.get('cutter_pad_codes') else self.env[ 'sf.cutting_tool.standard.library']._get_ids(item['cutter_pad_codes'], result['factory_short_name']), - "fit_blade_shape_id": item.get('fit_blade_shape'), + "fit_blade_shape_id": False if not item['fit_blade_shape'] else self.env[ + 'maintenance.equipment.image'].search( + [('name', '=', item['fit_blade_shape'])]).id, "suitable_machining_method_ids": [(6, 0, [])] if not item.get( 'suitable_machining_methods') else self.env['maintenance.equipment.image']._get_ids( item['suitable_machining_methods']), - "blade_tip_characteristics_id": [(6, 0, [])] if not item.get('blade_tip_characteristics') else - self.env['maintenance.equipment.image']._get_ids(item['blade_tip_characteristics']), - "handle_type_id":item.get('handle_type'), + "blade_tip_characteristics_id": self.env['maintenance.equipment.image'].search( + [('name', '=', item['blade_tip_characteristics'])]).id, + "handle_type_id": self.env['maintenance.equipment.image'].search( + [('name', '=', item['handle_type'])]).id, "cutting_direction_ids": [(6, 0, [])] if not item.get('cutting_direction') else self.env[ 'maintenance.equipment.image']._get_ids(item['cutting_direction']), "suitable_coolant_ids": [(6, 0, [])] if not item.get('suitable_coolant') else self.env[ 'maintenance.equipment.image']._get_ids(item['suitable_coolant']), - "compaction_way_ids": [(6, 0, [])] if not item.get('compaction_way') else self.env[ - 'maintenance.equipment.image']._get_ids(item['compaction_way']), + "compaction_way_id": self.env['maintenance.equipment.image'].search( + [('name', '=', item['compaction_way'])]).id, "integral_tool_basic_parameters_ids": integral_tool_basic_param_list, "blade_basic_parameters_ids": blade_basic_param_list, "cutter_bar_basic_parameters_ids": cutter_arbor_basic_param_list, @@ -1981,19 +1988,22 @@ class Cutting_tool_standard_library(models.Model): "cutter_pad_ids": [(6, 0, [])] if not item.get('cutter_pad_codes') else self.env[ 'sf.cutting_tool.standard.library']._get_ids(item['cutter_pad_codes'], result['factory_short_name']), - "fit_blade_shape_id": item.get('fit_blade_shape'), + "fit_blade_shape_id": False if not item['fit_blade_shape'] else self.env[ + 'maintenance.equipment.image'].search( + [('name', '=', item['fit_blade_shape'])]).id, "suitable_machining_method_ids": [(6, 0, [])] if not item.get( 'suitable_machining_method') else self.env['maintenance.equipment.image']._get_ids( item['suitable_machining_method']), - "blade_tip_characteristics_id": [(6, 0, [])] if not item.get('blade_tip_characteristics') else - self.env['maintenance.equipment.image']._get_ids(item['blade_tip_characteristics']), - "handle_type_id": item.get('handle_type'), + "blade_tip_characteristics_id": self.env['maintenance.equipment.image'].search( + [('name', '=', item['blade_tip_characteristics'])]).id, + "handle_type_id": self.env['maintenance.equipment.image'].search( + [('name', '=', item['handle_type'])]).id, "cutting_direction_ids": [(6, 0, [])] if not item.get('cutting_direction') else self.env[ 'maintenance.equipment.image']._get_ids(item['cutting_direction']), "suitable_coolant_ids": [(6, 0, [])] if not item.get('suitable_coolant') else self.env[ 'maintenance.equipment.image']._get_ids(item['suitable_coolant']), - "compaction_way_ids": [(6, 0, [])] if not item.get('compaction_way') else self.env[ - 'maintenance.equipment.image']._get_ids(item['compaction_way']), + "compaction_way_id": self.env['maintenance.equipment.image'].search( + [('name', '=', item['compaction_way'])]).id, "integral_tool_basic_parameters_ids": integral_tool_basic_param_list, "blade_basic_parameters_ids": blade_basic_param_list, "cutter_bar_basic_parameters_ids": cutter_arbor_basic_param_list, @@ -2027,19 +2037,22 @@ class Cutting_tool_standard_library(models.Model): "cutter_pad_ids": [(6, 0, [])] if not item.get('cutter_pad_codes') else self.env[ 'sf.cutting_tool.standard.library']._get_ids(item['cutter_pad_codes'], result['factory_short_name']), - "fit_blade_shape_id": item.get('fit_blade_shape'), + "fit_blade_shape_id": False if not item['fit_blade_shape'] else self.env[ + 'maintenance.equipment.image'].search( + [('name', '=', item['fit_blade_shape'])]).id, "suitable_machining_method_ids": [(6, 0, [])] if not item.get( 'suitable_machining_methods') else self.env['maintenance.equipment.image']._get_ids( item['suitable_machining_methods']), - "blade_tip_characteristics_id": [(6, 0, [])] if not item.get('blade_tip_characteristics') else - self.env['maintenance.equipment.image']._get_ids(item['blade_tip_characteristics']), - "handle_type_id": item.get('handle_type'), + "blade_tip_characteristics_id": self.env['maintenance.equipment.image'].search( + [('name', '=', item['blade_tip_characteristics'])]).id, + "handle_type_id": self.env['maintenance.equipment.image'].search( + [('name', '=', item['handle_type'])]).id, "cutting_direction_ids": [(6, 0, [])] if not item.get('cutting_direction') else self.env[ 'maintenance.equipment.image']._get_ids(item['cutting_direction']), "suitable_coolant_ids": [(6, 0, [])] if not item.get('suitable_coolant') else self.env[ 'maintenance.equipment.image']._get_ids(item['suitable_coolant']), - "compaction_way_ids": [(6, 0, [])] if not item.get('compaction_way') else self.env[ - 'maintenance.equipment.image']._get_ids(item['compaction_way']), + "compaction_way_id": self.env['maintenance.equipment.image'].search( + [('name', '=', item['compaction_way'])]).id, "integral_tool_basic_parameters_ids": integral_tool_basic_param_list, "blade_basic_parameters_ids": blade_basic_param_list, "cutter_bar_basic_parameters_ids": cutter_arbor_basic_param_list, diff --git a/sf_sale/security/group_security.xml b/sf_sale/security/group_security.xml index 33890d49..00e4561a 100644 --- a/sf_sale/security/group_security.xml +++ b/sf_sale/security/group_security.xml @@ -2,7 +2,7 @@ 销售经理只可以查看本人所在的团队 - + [('crm_team_member_ids.user_id','=',user.id)] @@ -12,7 +12,7 @@ 销售总监 - + [(1,'=',1)] diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index c8c090a6..cda90935 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -86,8 +86,7 @@ class FunctionalCuttingToolEntity(models.Model): suitable_machining_method_ids = fields.Many2many( 'maintenance.equipment.image', 'rel_machining_product_template_tool_entity', '适合加工方式', domain=[('type', '=', '加工能力')], related='cutting_tool_integral_model_id.suitable_machining_method_ids') - blade_tip_characteristics_id = fields.Many2many( - 'maintenance.equipment.image', 'rel_blade_tip_product_template_tool_entity', '刀尖特征', + blade_tip_characteristics_id = fields.Many2one('maintenance.equipment.image', '刀尖特征', domain=[('type', '=', '刀尖特征')], related='cutting_tool_integral_model_id.blade_tip_characteristics_id') handle_type_id = fields.Many2one( 'maintenance.equipment.image', '柄部类型', diff --git a/sf_tool_management/models/tool_material_search.py b/sf_tool_management/models/tool_material_search.py index 3c9180fc..c4c95c13 100644 --- a/sf_tool_management/models/tool_material_search.py +++ b/sf_tool_management/models/tool_material_search.py @@ -99,8 +99,7 @@ class SfToolMaterialSearch(models.Model): suitable_machining_method_ids = fields.Many2many('maintenance.equipment.image', 'rel_machining_product_template_material_search', '适合加工方式', domain=[('type', '=', '加工能力')]) - blade_tip_characteristics_id = fields.Many2many('maintenance.equipment.image', - 'rel_blade_tip_product_template_material_search', '刀尖特征', + blade_tip_characteristics_id = fields.Many2one('maintenance.equipment.image', '刀尖特征', domain=[('type', '=', '刀尖特征')]) handle_type_id = fields.Many2many('maintenance.equipment.image', '柄部类型',domain=[('type', '=', '柄部类型')]) cutting_direction_ids = fields.Many2many('maintenance.equipment.image', diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index 8a4713e1..eaa72fad 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -106,7 +106,7 @@