From 363463e31d64030648ec491cf1214f7fce781fe5 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Tue, 19 Dec 2023 17:31:37 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E6=97=B6=E8=87=AA=E5=8A=A8=E9=85=8D=E7=BD=AE=E5=88=80=E5=85=B7?= =?UTF-8?q?=E6=88=BF=E4=BD=8D=E7=BD=AE=EF=BC=8C=E9=87=8D=E6=96=B0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E4=BA=86=E5=88=80=E5=85=B7=E7=BB=84=E8=A3=85=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E7=9A=84=E4=BD=9C=E4=B8=9A=E7=B1=BB=E5=9E=8B=EF=BC=8C?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=90=8D=E7=A7=B0=E4=B8=BA=E5=88=80=E5=85=B7?= =?UTF-8?q?=E7=BB=84=E8=A3=85=E5=85=A5=E5=BA=93=E7=9A=84=E5=8F=82=E8=80=83?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E9=85=8D=E7=BD=AE=EF=BC=9B2=E3=80=81?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E6=89=80=E4=BB=A5=E7=9A=84?= =?UTF-8?q?=E8=A3=85=E5=88=80=E9=95=BF=E6=94=B9=E4=B8=BA=E6=80=BB=E9=95=BF?= =?UTF-8?q?=E5=BA=A6=EF=BC=9B3=E3=80=81=E6=9C=BA=E5=BA=8A=E6=8D=A2?= =?UTF-8?q?=E5=88=80=E7=94=B3=E8=AF=B7=E5=92=8C=E5=88=80=E5=85=B7=E7=BB=84?= =?UTF-8?q?=E8=A3=85=E5=8D=95=E5=BC=B9=E7=AA=97=E7=95=8C=E9=9D=A2=E5=81=9A?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=BF=85=E5=A1=AB=E6=8E=A7=E5=88=B6=EF=BC=8C?= =?UTF-8?q?=E5=AF=B9=E6=96=B0=E5=88=80=E9=9A=90=E8=97=8F=E5=88=87=E5=89=8A?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=AD=97=E6=AE=B5=EF=BC=9B4=E3=80=81?= =?UTF-8?q?=E5=88=80=E5=85=B7=E7=BB=84=E8=A3=85=E5=8D=95=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=BA=9B=E5=AD=97=E6=AE=B5=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E5=80=BC=E8=87=AA=E5=8A=A8=E5=A1=AB=E5=86=99=E5=92=8C?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/tool_base_new.py | 20 +++--- sf_dlm_management/__manifest__.py | 1 + sf_dlm_management/data/stock_data.xml | 29 ++++++++ sf_manufacturing/data/stock_data.xml | 27 ++------ sf_tool_management/models/base.py | 53 ++++++++++----- sf_tool_management/views/tool_base_views.xml | 9 +-- sf_tool_management/wizard/wizard.py | 70 +++++++++++++++++--- sf_tool_management/wizard/wizard_view.xml | 12 ++-- 8 files changed, 153 insertions(+), 68 deletions(-) create mode 100644 sf_dlm_management/data/stock_data.xml diff --git a/sf_base/models/tool_base_new.py b/sf_base/models/tool_base_new.py index c619ea9f..932bb106 100644 --- a/sf_base/models/tool_base_new.py +++ b/sf_base/models/tool_base_new.py @@ -77,32 +77,32 @@ class CuttingToolModel(models.Model): integral_run_out_accuracy_min = fields.Char('整体式刀具端跳精度min') fit_blade_shape_id = fields.Many2one('maintenance.equipment.image', - '适配刀片形状', domain=[('type', '=', '刀片形状')]) + '适配刀片形状', domain=[('type', '=', '刀片形状')]) suitable_machining_method_ids = fields.Many2many('maintenance.equipment.image', 'suitable_machining_method_library_rel', '适合加工方式', domain=[('type', '=', '加工能力')]) blade_tip_characteristics_id = fields.Many2one('maintenance.equipment.image', - '刀尖特征', domain=[('type', '=', '刀尖特征')]) + '刀尖特征', domain=[('type', '=', '刀尖特征')]) handle_type_id = fields.Many2one('maintenance.equipment.image', - '柄部类型', domain=[('type', '=', '柄部类型')]) + '柄部类型', 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_id = fields.Many2one('maintenance.equipment.image', - '压紧方式', domain=[('type', '=', '压紧方式')]) + '压紧方式', domain=[('type', '=', '压紧方式')]) integral_tool_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters', - 'standard_library_id', string='整体式刀具基本参数') + 'standard_library_id', string='整体式刀具基本参数') blade_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters', - 'standard_library_id', string='刀片基本参数') + 'standard_library_id', string='刀片基本参数') cutter_bar_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters', - 'standard_library_id', string='刀杆基本参数') + 'standard_library_id', string='刀杆基本参数') cutter_head_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters', - 'standard_library_id', string='刀盘基本参数') + 'standard_library_id', string='刀盘基本参数') knife_handle_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters', - 'standard_library_id', string='刀柄基本参数') + 'standard_library_id', string='刀柄基本参数') chuck_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters', - 'standard_library_id', string='夹头基本参数') + 'standard_library_id', string='夹头基本参数') cutting_speed_ids = fields.One2many('sf.cutting.speed', 'standard_library_id', string='切削速度Vc') feed_per_tooth_ids = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz', domain=[('cutting_speed', '!=', False)]) diff --git a/sf_dlm_management/__manifest__.py b/sf_dlm_management/__manifest__.py index a32ecf81..a5c894d4 100644 --- a/sf_dlm_management/__manifest__.py +++ b/sf_dlm_management/__manifest__.py @@ -11,6 +11,7 @@ 'website': 'https://www.sf.jikimo.com', 'depends': ['sf_sale', 'sf_dlm', 'sf_manufacturing'], 'data': [ + 'data/stock_data.xml', 'views/product_template_management_view.xml', ], 'demo': [ diff --git a/sf_dlm_management/data/stock_data.xml b/sf_dlm_management/data/stock_data.xml new file mode 100644 index 00000000..d6067cdf --- /dev/null +++ b/sf_dlm_management/data/stock_data.xml @@ -0,0 +1,29 @@ + + + + + 刀具房 + internal + 库区 + 存货区 + DJF + true + + + + + + + 刀具组装入库 + internal + + true + + ZR + + + + + \ No newline at end of file diff --git a/sf_manufacturing/data/stock_data.xml b/sf_manufacturing/data/stock_data.xml index b65b2235..74d02b4a 100644 --- a/sf_manufacturing/data/stock_data.xml +++ b/sf_manufacturing/data/stock_data.xml @@ -13,6 +13,12 @@ 5 + + My Company 刀具组装入库 + ZR/ + 5 + + 外协 @@ -31,15 +37,6 @@ - - - - - - - - - 外协入库 internal @@ -63,17 +60,5 @@ search="[('barcode','=','WH-PREPRODUCTION')]"/> - - - 刀具组装入库 - internal - true - - ZR - - - - diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 54834390..44b2b912 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -22,7 +22,7 @@ class FunctionalCuttingToolEntity(models.Model): knife_tip_r_angle = fields.Float(string='刀尖R角(mm)', readonly=True) coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=True) new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=True) - tool_loading_length = fields.Float(string='装刀长(mm)', readonly=True) + tool_loading_length = fields.Float(strin='总长度(mm)', readonly=True) functional_tool_length = fields.Float(string='伸出长(mm)', readonly=True) effective_length = fields.Float(string='有效长(mm)', readonly=True) tool_room_num = fields.Integer(string='刀具房数量', readonly=True) @@ -107,19 +107,41 @@ 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') + domain=[('type', '=', '加工能力')]) blade_tip_characteristics_id = fields.Many2one( 'maintenance.equipment.image', '刀尖特征', - domain=[('type', '=', '刀尖特征')], related='cutting_tool_integral_model_id.blade_tip_characteristics_id') + domain=[('type', '=', '刀尖特征')]) handle_type_id = fields.Many2one( 'maintenance.equipment.image', '柄部类型', - domain=[('type', '=', '柄部类型')], related='cutting_tool_integral_model_id.handle_type_id') + domain=[('type', '=', '柄部类型')]) 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') + domain=[('type', '=', '走刀方向')]) suitable_coolant_ids = fields.Many2many( 'maintenance.equipment.image', 'rel_coolant_product_template_tool_entity', '适合冷却液', - domain=[('type', '=', '冷却液')], related='cutting_tool_integral_model_id.suitable_coolant_ids') + domain=[('type', '=', '冷却液')]) + + @api.depends('cutting_tool_integral_model_id', 'cutting_tool_blade_model_id') + def _compute_maintenance_equipment_image(self): + for record in self: + if record.cutting_tool_integral_model_id: + record.suitable_machining_method_ids = record.cutting_tool_integral_model_id.suitable_machining_method_ids.ids + record.blade_tip_characteristics_id = record.cutting_tool_integral_model_id.blade_tip_characteristics_id.ids + record.handle_type_id = record.cutting_tool_integral_model_id.handle_type_id.ids + record.cutting_direction_ids = record.cutting_tool_integral_model_id.cutting_direction_ids.ids + record.suitable_coolant_ids = record.cutting_tool_integral_model_id.suitable_coolant_ids.ids + elif record.cutting_tool_blade_model_id: + record.suitable_machining_method_ids = record.cutting_tool_blade_model_id.suitable_machining_method_ids.ids + record.blade_tip_characteristics_id = record.cutting_tool_blade_model_id.blade_tip_characteristics_id.ids + record.handle_type_id = record.cutting_tool_blade_model_id.handle_type_id.ids + record.cutting_direction_ids = record.cutting_tool_blade_model_id.cutting_direction_ids.ids + record.suitable_coolant_ids = record.cutting_tool_blade_model_id.suitable_coolant_ids.ids + else: + record.suitable_machining_method_ids = [] + record.blade_tip_characteristics_id = [] + record.handle_type_id = [] + record.cutting_direction_ids = [] + record.suitable_coolant_ids = [] def _get_functional_tool_model_ids(self, functional_tool_model_code): functional_tool_model_ids = [] @@ -332,8 +354,7 @@ class MachineTableToolChangingApply(models.Model): # 设备信息 maintenance_equipment_id = fields.Many2one('maintenance.equipment', string='CNC机床', readonly=True, domain=[('category_id.equipment_type', '=', '机床')]) - production_line_id = fields.Many2one('sf.production.line', string='生产线', readonly=True, - group_expand='_read_group_names') + production_line_id = fields.Many2one('sf.production.line', string='生产线', readonly=True) machine_table_type_id = fields.Many2one('maintenance.equipment.category', string='机床类型', readonly=True, compute='_compute_machine_table_type_id') machine_tool_code = fields.Char(string='机台号', related='maintenance_equipment_id.name') @@ -344,9 +365,10 @@ class MachineTableToolChangingApply(models.Model): barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', store=True, domain=[('product_id.name', '=', '功能刀具')], related='functional_tool_name_id.barcode_id') - functional_tool_name_id = fields.Many2one('sf.functional.tool.assembly', string='功能刀具名称') + functional_tool_name_id = fields.Many2one('sf.functional.tool.assembly', domain=[('assemble_status', '=', '1')], + string='功能刀具名称') functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', store=True, - related='functional_tool_name_id.functional_tool_type_id') + related='functional_tool_name_id.after_assembly_functional_tool_type_id') tool_position_interface_type = fields.Selection( [('BT刀柄式', 'BT刀柄式'), ('SK刀柄式', 'SK刀柄式'), ('HSK刀柄式', 'HSK刀柄式'), @@ -403,11 +425,6 @@ class MachineTableToolChangingApply(models.Model): if len(records) > 1: raise ValidationError('该刀位号已存在,请重新选择!!!') - @api.model - def _read_group_names(self, categories, domain, order): - names = categories._search([], order=order, access_rights_uid=SUPERUSER_ID) - return categories.browse(names) - @api.constrains('functional_tool_status') def automation_apply_for_tool_change(self): """ @@ -520,7 +537,7 @@ class CAMWorkOrderProgramKnifePlan(models.Model): functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=False) diameter = fields.Integer(string='刀具直径(mm)', readonly=False) tool_included_angle = fields.Float(string='刀尖R角(mm)', readonly=False) - tool_loading_length = fields.Float(string='装刀长(mm)', readonly=False) + tool_loading_length = fields.Float(strin='总长度(mm)', readonly=False) extension_length = fields.Float(string='伸出长(mm)') effective_length = fields.Float(string='有效长(mm)') new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=False, default='0') @@ -608,7 +625,7 @@ class FunctionalToolAssembly(models.Model): knife_tip_r_angle = fields.Float(string='刀尖R角(mm)', readonly=True) coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=True) new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=True) - tool_loading_length = fields.Float(string='装刀长(mm)', readonly=True) + tool_loading_length = fields.Float(strin='总长度(mm)', readonly=True) functional_tool_length = fields.Float(string='伸出长(mm)', readonly=True) effective_length = fields.Float(string='有效长(mm)', readonly=True) loading_task_source = fields.Selection([('0', 'CAM装刀'), ('1', '机台换刀'), ('2', '按库存组装')], @@ -744,7 +761,7 @@ class FunctionalToolAssembly(models.Model): after_assembly_max_lifetime_value = fields.Integer(string='组装后最大寿命值(min)', readonly=True) after_assembly_alarm_value = fields.Integer(string='组装后报警值(min)', readonly=True) after_assembly_used_value = fields.Integer(string='组装后已使用值(min)', readonly=True) - after_assembly_tool_loading_length = fields.Float(string='组装后装刀长(mm)', readonly=True) + after_assembly_tool_loading_length = fields.Float(string='组装后总长度(mm)', readonly=True) after_assembly_functional_tool_length = fields.Float(string='组装后伸出长(mm)', readonly=True) after_assembly_effective_length = fields.Float(string='组装后有效长(mm)', readonly=True) L_D_number = fields.Float(string='L/D值(mm)', readonly=True) diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index 0553eb97..c4202131 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -156,9 +156,10 @@ - - - + + + + @@ -990,7 +991,7 @@ string="最大寿命值(min)"/> - + diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py index 8b3af487..b198c2e7 100644 --- a/sf_tool_management/wizard/wizard.py +++ b/sf_tool_management/wizard/wizard.py @@ -35,23 +35,34 @@ class ToolChangeRequirementInformation(models.TransientModel): replacement_tool_name = fields.Char(string='待换功能刀具名称', required=True) replacement_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='待换功能刀具类型') replacement_diameter = fields.Integer(string='待换刀具直径(mm)') - replacement_knife_tip_r_angle = fields.Float(string='待换刀具刀尖R角(mm)') - replacement_tool_setting_length = fields.Float(string='待换刀具装刀长(mm)') + replacement_knife_tip_r_angle = fields.Float(string='待换刀具刀尖R角(mm)', requride=True) + replacement_tool_setting_length = fields.Float(string='待换刀具总长度(mm)', requride=True) replacement_extension_length = fields.Float(string='待换刀具伸出长(mm)') replacement_effective_length = fields.Float(string='待换刀具有效长(mm)') - replacement_tool_coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], + replacement_tool_coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], requride=True, string='待换刀具粗/中/精', default='3') replacement_max_lifetime_value = fields.Integer(string='待换刀具最大寿命值(min)') replacement_alarm_value = fields.Integer(string='待换刀具报警值(min)') replacement_used_value = fields.Integer(string='待换刀具已使用值(min)') - new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', default='0') + new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', default='0', requride=True) replacement_whether_standard_knife = fields.Boolean(string='待换刀具是否标准刀', default=True) used_tool_time = fields.Datetime(string='用刀时间', default=lambda self: fields.Datetime.now() + timedelta(hours=4)) applicant = fields.Char(string='申请人', default=lambda self: self.env.user.name, readonly=True) reason_for_applying = fields.Char(string='申请原因') + @api.constrains('replacement_knife_tip_r_angle', 'replacement_diameter', 'replacement_tool_coarse_middle_thin', + 'new_former') + def _check_length_or_diamenter(self): + for obj in self: + if obj.replacement_diameter == 0 and obj.replacement_knife_tip_r_angle == 0: + raise ValidationError('待换功能刀具信息【刀具直径】和【刀尖R角】不能同时为0!!!') + if not obj.new_former: + raise ValidationError('待换功能刀具信息【新/旧】不能位空!!!') + if not obj.replacement_tool_coarse_middle_thin: + raise ValidationError('待换功能刀具信息【粗/中/精】不能位空!!!') + def tool_changing_apply(self): """ 确认换刀申请(按键) @@ -173,7 +184,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel): knife_tip_r_angle = fields.Float(string='刀尖R角(mm)', readonly=True) coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=True) new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=True) - tool_loading_length = fields.Float(string='装刀长(mm)', readonly=True) + tool_loading_length = fields.Float(string='总长度(mm)', readonly=True) functional_tool_length = fields.Float(string='伸出长(mm)', readonly=True) effective_length = fields.Float(string='有效长(mm)', readonly=True) loading_task_source = fields.Selection([('0', 'CAM装刀'), ('1', '机台换刀'), ('2', '按库存组装')], @@ -336,7 +347,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel): barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号') after_assembly_functional_tool_name = fields.Char(string='组装后功能刀具名称', required=True) after_assembly_functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', - string='组装后功能刀具类型') + string='组装后功能刀具类型', + compute='_compute_after_assembly_functional_tool_type_id') after_assembly_functional_tool_diameter = fields.Integer(string='组装后功能刀具直径(mm)') after_assembly_knife_tip_r_angle = fields.Float(string='组装后刀尖R角(mm)') after_assembly_new_former = fields.Selection([('0', '新'), ('1', '旧')], string='组装后新/旧', default='0') @@ -350,14 +362,54 @@ class FunctionalToolAssemblyOrder(models.TransientModel): after_assembly_max_lifetime_value = fields.Integer(string='组装后最大寿命值(min)') after_assembly_alarm_value = fields.Integer(string='组装后报警值(min)') after_assembly_used_value = fields.Integer(string='组装后已使用值(min)') - after_assembly_tool_loading_length = fields.Float(string='组装后装刀长(mm)') - after_assembly_functional_tool_length = fields.Float(string='组装后伸出长(mm)') + after_assembly_tool_loading_length = fields.Float(string='组装后总长度(mm)') + after_assembly_functional_tool_length = fields.Float(string='组装后伸出长(mm)', required=True) after_assembly_effective_length = fields.Float(string='组装后有效长(mm)') - L_D_number = fields.Float(string='L/D值(mm)') + L_D_number = fields.Float(string='L/D值(mm)', compute='_compute_l_d_number') hiding_length = fields.Float(string='避空长(mm)') functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False) + @api.onchange('integral_code_id') + def _onchange_after_assembly_functional_tool_diameter(self): + for obj in self: + if obj.integral_code_id: + obj.after_assembly_functional_tool_diameter = obj.integral_code_id.product_id.cutting_tool_blade_diameter + else: + obj.after_assembly_functional_tool_diameter = 0 + + @api.onchange('blade_code_id') + def _onchange_after_assembly_knife_tip_r_angle(self): + for obj in self: + if obj.blade_code_id: + obj.after_assembly_knife_tip_r_angle = obj.blade_code_id.product_id.cutting_tool_blade_tip_circular_arc_radius + else: + obj.after_assembly_knife_tip_r_angle = 0 + + @api.depends('functional_tool_type_id') + def _compute_after_assembly_functional_tool_type_id(self): + for obj in self: + if obj.functional_tool_type_id: + obj.after_assembly_functional_tool_type_id = obj.functional_tool_type_id + else: + obj.after_assembly_functional_tool_type_id = None + + @api.depends('hiding_length', 'after_assembly_functional_tool_diameter') + def _compute_l_d_number(self): + for record in self: + if record.hiding_length != 0 and record.after_assembly_functional_tool_diameter != 0: + record.L_D_number = record.hiding_length / record.after_assembly_functional_tool_diameter + else: + record.L_D_number = 0 + + @api.constrains('after_assembly_tool_loading_length', 'after_assembly_functional_tool_length') + def _check_length_control(self): + for obj in self: + if obj.after_assembly_tool_loading_length == 0: + raise ValidationError('组装参数信息【总长度】不能为0!!!') + if obj.after_assembly_functional_tool_length == 0: + raise ValidationError('组装参数信息【伸出长】不能为0!!!') + def functional_tool_assembly(self): """ 功能刀具组装 diff --git a/sf_tool_management/wizard/wizard_view.xml b/sf_tool_management/wizard/wizard_view.xml index bf061d99..453d6f60 100644 --- a/sf_tool_management/wizard/wizard_view.xml +++ b/sf_tool_management/wizard/wizard_view.xml @@ -40,7 +40,7 @@ options="{'no_create': True, 'no_quick_create': True}"/> - + @@ -341,9 +341,9 @@ - - - + + + @@ -351,11 +351,11 @@ - + - +