diff --git a/etl/pdfReader/sitenotes.py b/etl/pdfReader/sitenotes.py index f74eabc..dc274b8 100644 --- a/etl/pdfReader/sitenotes.py +++ b/etl/pdfReader/sitenotes.py @@ -1,5 +1,5 @@ from etl.pdfReader.reportType import ReportType -from transform.types import CompanyInfo, SurverySummaryInfo, AssessorInfo, PropertyDescription, PropertyDetail +from transform.types import CompanyInfo, SurverySummaryInfo, AssessorInfo, PropertyDescription, PropertyDetail, Dimension from datetime import datetime class SiteNotesExtractor(): @@ -178,15 +178,29 @@ class QuidosSiteNotesExtractor(SiteNotesExtractor): # Section 3 age_bands = self.get_age_band() + # Section 4 + no_of_main_property = int(get_value("Main Property")) + no_of_extension_1 = int(get_value('Extension 1') or 0) + no_of_extension_2 = int(get_value('Extension 2') or 0) + no_of_extension_3 = int(get_value('Extension 3') or 0) + no_of_extension_4 = int(get_value('Extension 4') or 0) + dimensions = self.get_dimensions( + no_of_main_property, + no_of_extension_1, + no_of_extension_2, + no_of_extension_3, + no_of_extension_4, + ) + self.property_description = PropertyDescription( built_form = get_value("Built Form"), detachment_or_position = get_value("Detachment/Position"), - no_of_main_property = int(get_value("Main Property")), - no_of_extension_1 = int(get_value('Extension 1') or 0), - no_of_extension_2 = int(get_value('Extension 2') or 0), - no_of_extension_3 = int(get_value('Extension 3') or 0), - no_of_extension_4 = int(get_value('Extension 4') or 0), + no_of_main_property = no_of_main_property, + no_of_extension_1 = no_of_extension_1, + no_of_extension_2 = no_of_extension_2, + no_of_extension_3 = no_of_extension_3, + no_of_extension_4 = no_of_extension_4, no_of_habitable_rooms = int(get_value('Number of Habitable Rooms')), no_of_heated_rooms = int(get_value('Number of Heated Habitable Rooms')), heated_basement = False if get_value('Heated Basement') == "NO" else True, @@ -194,17 +208,21 @@ class QuidosSiteNotesExtractor(SiteNotesExtractor): terrain_type = get_value('Terrain Type'), percentage_of_draught_proofed= int(get_value('Percentage of Draught Proofed(%)')), main_property=PropertyDetail( - age_band= age_bands[0] - )if age_bands[0] else None, + age_band= age_bands[0], + dimensions= dimensions["main"] if "main" in dimensions else [], + )if no_of_main_property > 0 else None, ex1_property=PropertyDetail( - age_band= age_bands[1] - )if age_bands[1] else None, + age_band= age_bands[1], + dimensions= dimensions["ex1"] if "ex1" in dimensions else [], + )if no_of_extension_1 > 0 else None, ex2_property=PropertyDetail( - age_band= age_bands[2] - )if age_bands[2] else None, + age_band= age_bands[2], + dimensions= dimensions["ex2"] if "ex2" in dimensions else [], + )if no_of_extension_2 > 0 else None, ex3_property=PropertyDetail( - age_band= age_bands[3] - )if age_bands[3] else None, + age_band= age_bands[3], + dimensions=dimensions["ex3"] if "ex3" in dimensions else [], + )if no_of_extension_4 > 0 else None, ) @@ -239,8 +257,9 @@ class QuidosSiteNotesExtractor(SiteNotesExtractor): return property_age - def get_section_4(self, no_of_main_property): + def get_dimensions(self, main, ext1=0, ext2=0, ext3=0, ext4=0): data = self.get_data_between('4.0 Dimensions','5.0 Conservatory') + avoid = [ '4.0 Dimensions', '5.0 Conservatory', @@ -256,6 +275,7 @@ class QuidosSiteNotesExtractor(SiteNotesExtractor): 'Extension 3 Property', 'Extension 4 Property', ] + def create_dimensions_array(key, no_of_property): index = data.index(key) + 1 @@ -264,25 +284,25 @@ class QuidosSiteNotesExtractor(SiteNotesExtractor): numbers = [] for i in range(4): numbers.append(data[i + propertyNo*4 + index]) - details = { - "Floor Area (m2)": numbers[0], - "Room Height (m)": numbers[1], - "Loss Perimeter (m)": numbers[2], - "Party Wall Length (m)": numbers[3], - } + details = Dimension( + floor_area_m2=float(numbers[0]), + room_height_m=float(numbers[1]), + loss_perimeter_m=float(numbers[2]), + party_wall_length_m=float(numbers[3]), + ) allNumbers.append(details) return allNumbers + + return_dict = {} + + return_dict.update({"main": create_dimensions_array("Main Property", main)}) - if "Main Property" in data: - self.main_property_dimensions = create_dimensions_array("Main Property", no_of_main_property) - else: - self.main_property_dimensions = None + ext = [ext1, ext2, ext3, ext4] for i in range(1,5): - if self.extension_1 and f"Extension {i} Property" in data: - setattr(self, f"extension_{i}_dimensions)", create_dimensions_array(f"Extension {i} Property", int(getattr(self, f"extension_{i}")))) - else: - setattr(self, f"extensions_{i}_dimensions",None) + if f"Extension {i} Property" in data: + return_dict.update({f"ex{i}" : create_dimensions_array(f"Extension {i} Property", ext[i-1])}) + return return_dict def get_section_5(self): data = self.raw_data[self.raw_data.index('5.0 Conservatory'):self.raw_data.index('7.0 Walls')] diff --git a/etl/transform/types.py b/etl/transform/types.py index 4eb2e20..fd61bf4 100644 --- a/etl/transform/types.py +++ b/etl/transform/types.py @@ -3,6 +3,12 @@ from typing import Optional, List import re from datetime import datetime +class Dimension(BaseModel): + floor_area_m2: float + room_height_m: float + loss_perimeter_m: float + party_wall_length_m: float + class CompanyInfo(BaseModel): trading_name: str post_code: str @@ -44,6 +50,7 @@ class AssessorInfo(BaseModel): class PropertyDetail(BaseModel): age_band: str + dimensions: List[Dimension] = [] class PropertyDescription(BaseModel): built_form: str