diff --git a/helix/constants/file_validation_error.py b/helix/constants/file_validation_error.py index 3c042fb..339ff95 100644 --- a/helix/constants/file_validation_error.py +++ b/helix/constants/file_validation_error.py @@ -15,6 +15,7 @@ class FileValidationMessage(Enum): ExpectedTxtFile = 'Invalid file uploaded. Please upload a valid .txt file.' ExpectedDxfFile = 'Invalid file uploaded. Please upload a valid .dxf file.' OldDxfFormat = 'Invalid Aurora format uploaded. Please upload a new format.' + PanelsTooClose = 'It appears that the panel coordinates are too close together. Please ensure that panel spacing is correct and that you have selected the correct configuration.' @classmethod def invalid_wind_zones(cls, system_type): diff --git a/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py b/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py index 1fd0931..616f75a 100644 --- a/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py +++ b/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py @@ -5,6 +5,7 @@ from helix.constants.panel_type import PanelType class DualTilt128CellConstants(object): + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (88.24, 82.0) # inches spacing_size_inches = 5.12 # This is inches presenter_spacing = (1.5, 1.5) diff --git a/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py b/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py index 3a3d15a..a1273db 100644 --- a/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py +++ b/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py @@ -5,6 +5,7 @@ from helix.constants.panel_type import PanelType class DualTilt96CellConstants(object): + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (88.24, 62.0) # inches spacing_size_inches = 5.12 # This is inches presenter_spacing = (1.5, 1) diff --git a/helix/constants/module_type_constants/dual_tilt_pseries_constants.py b/helix/constants/module_type_constants/dual_tilt_pseries_constants.py index 542aac0..647001f 100644 --- a/helix/constants/module_type_constants/dual_tilt_pseries_constants.py +++ b/helix/constants/module_type_constants/dual_tilt_pseries_constants.py @@ -5,6 +5,7 @@ from helix.constants.panel_type import PanelType class DualTiltPSeriesConstants(object): + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (88.24, 82.0) # inches spacing_size_inches = 8.8503937 # This is inches presenter_spacing = (1.5, 1.5) diff --git a/helix/constants/module_type_constants/single_tilt_128_cell_constants.py b/helix/constants/module_type_constants/single_tilt_128_cell_constants.py index 613eb31..2815154 100644 --- a/helix/constants/module_type_constants/single_tilt_128_cell_constants.py +++ b/helix/constants/module_type_constants/single_tilt_128_cell_constants.py @@ -8,6 +8,7 @@ from helix.constants.system_type_constants.single_tilt_constants import SingleTi class SingleTilt128CellConstants(object): + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (82.0, 60.0) # inches presenter_spacing = (1.5, 1) panel_area = 23.29 diff --git a/helix/constants/module_type_constants/single_tilt_96_cell_constants.py b/helix/constants/module_type_constants/single_tilt_96_cell_constants.py index 5e69666..de639fd 100644 --- a/helix/constants/module_type_constants/single_tilt_96_cell_constants.py +++ b/helix/constants/module_type_constants/single_tilt_96_cell_constants.py @@ -7,6 +7,7 @@ from helix.constants.system_type_constants.single_tilt_constants import SingleTi class SingleTilt96CellConstants(object): + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (62.0, 60.0) # inches presenter_spacing = (1, 1) panel_area = 17.58 diff --git a/helix/constants/module_type_constants/single_tilt_pseries_constants.py b/helix/constants/module_type_constants/single_tilt_pseries_constants.py index 43d316f..0e50141 100644 --- a/helix/constants/module_type_constants/single_tilt_pseries_constants.py +++ b/helix/constants/module_type_constants/single_tilt_pseries_constants.py @@ -7,6 +7,7 @@ from helix.constants.system_type_constants.single_tilt_constants import SingleTi class SingleTiltPSeriesConstants(object): + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (82.0, 61.8755) # inches presenter_spacing = (1.5, 1) panel_area = 22.22 diff --git a/helix/validators/csv_input_validator.py b/helix/validators/csv_input_validator.py index 8e927de..f4915f6 100644 --- a/helix/validators/csv_input_validator.py +++ b/helix/validators/csv_input_validator.py @@ -16,6 +16,32 @@ class CsvInputValidator(object): if len(rows) == 0: return FileValidationError(FileValidationMessage.InvalidRowCount, 0) + #check for spacing + try: + min_spacing = self.user_values.module_system_constants().panel_spacing + tolerance = self.user_values.module_system_constants().tolerance + 1 + min_spacing = (min_spacing[0]*tolerance, min_spacing[1]*tolerance) + + for row_index, row in enumerate(rows): + for row_index2, row2 in enumerate(rows): + if row_index2 <= row_index: + continue + + x1_pos = float(row[11]) + y1_pos = float(row[12]) + + x2_pos = float(row2[11]) + y2_pos = float(row2[12]) + + x_diff = abs(x1_pos-x2_pos) + y_diff = abs(y1_pos-y2_pos) + + if (x_diff < min_spacing[0]) and (y_diff < min_spacing[1]): + return FileValidationError(FileValidationMessage.PanelsTooClose,None) + + except: + pass + for row_index, row in enumerate(rows): chain = [ CsvInputValidator.validate_for_csv,