From 07be7c307452627b6622bdc53e5cae596132c749 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Tue, 28 Nov 2023 17:08:56 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=90=8C=E6=AD=A5=E5=88=80=E5=85=B7=E6=A0=87?= =?UTF-8?q?=E5=87=86=E5=BA=93=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9=E5=88=80?= =?UTF-8?q?=E7=89=87=E5=BD=A2=E7=8A=B6=EF=BC=8C=E6=9F=84=E9=83=A8=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=EF=BC=8C=E5=88=80=E5=B0=96=E7=89=B9=E5=BE=81=EF=BC=8C?= =?UTF-8?q?=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 @@