From 050981ae8256158144b4dac5f27114fbc726c46b Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Wed, 10 Jul 2024 18:16:47 +0100 Subject: [PATCH] Scoring scenario data against solar data --- backend/apis/GoogleSolarApi.py | 18 +++++++++++++----- backend/app/db/functions/solar_functions.py | 16 ++++++++++------ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/backend/apis/GoogleSolarApi.py b/backend/apis/GoogleSolarApi.py index 74de9c20..6eb58a23 100644 --- a/backend/apis/GoogleSolarApi.py +++ b/backend/apis/GoogleSolarApi.py @@ -172,8 +172,18 @@ class GoogleSolarApi: logger.info("Storing to database") scenarios_data = self.panel_performance.head(1)[ - ["n_panels", "yearly_dc_energy", "total_cost", "panneled_roof_area", "array_warrage", - "initial_ac_kwh_per_year", "lifetime_ac_kwh", "roi"] + [ + "n_panels", + "yearly_dc_energy", + "total_cost", + "panneled_roof_area", + "array_warrage", + "initial_ac_kwh_per_year", + "lifetime_ac_kwh", + "roi", + "expected_payback_years", + "lifetime_dc_kwh" + ] ].rename( columns={ "n_panels": "number_panels", @@ -182,13 +192,11 @@ class GoogleSolarApi: "panneled_roof_area": "panelled_roof_area", "array_warrage": "array_kwhp", "initial_ac_kwh_per_year": "yearly_ac_kwh", - "lifetime_ac_kwh": "lifetime_ac_kwh", } ) - - # Adding missing fields with default values scenarios_data["is_default"] = True scenarios_data["scenario_type"] = scenario_type + scenarios_data = scenarios_data.to_dict(orient="records") store_batch_data( session=session, diff --git a/backend/app/db/functions/solar_functions.py b/backend/app/db/functions/solar_functions.py index bf541bb4..59243f01 100644 --- a/backend/app/db/functions/solar_functions.py +++ b/backend/app/db/functions/solar_functions.py @@ -44,6 +44,7 @@ def store_batch_data(session: Session, api_data: dict, uprns_to_location: list, :param scenarios_data: A list of dictionaries containing scenario data for each UPRN """ try: + # Insert data into the Solar table and get the IDs solar_records = [] for data in uprns_to_location: @@ -55,18 +56,21 @@ def store_batch_data(session: Session, api_data: dict, uprns_to_location: list, updated_at=datetime.datetime.now(pytz.utc) ) solar_records.append(solar_record) + session.add(solar_record) - session.bulk_save_objects(solar_records) - session.commit() + session.flush() # Flush to get the IDs generated + + for record in solar_records: + session.refresh(record) # Refresh to populate the ID fields # Retrieve the IDs of the inserted records - inserted_ids = [record.id for record in solar_records] + inserted_ids = {record.uprn: record.id for record in solar_records} # Prepare the data for SolarScenario scenario_records = [] - for index, solar_id in enumerate(inserted_ids): - scenarios = scenarios_data[index] # Assuming scenarios_data has the same order as uprns_to_location - for scenario in scenarios: + for data in uprns_to_location: + solar_id = inserted_ids.get(data['uprn']) + for scenario in scenarios_data: scenario_record = SolarScenario( solar_id=solar_id, scenario_type=scenario['scenario_type'],