From d942eacc557a032b84c7e9b67c4c55a80028a627 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Fri, 24 Nov 2023 11:54:46 +0000 Subject: [PATCH] finished updating recommendations for now to build portfolios --- backend/app/db/functions/portfolio_functions.py | 2 ++ backend/app/db/functions/recommendations_functions.py | 3 ++- backend/app/plan/router.py | 2 +- recommendations/FireplaceRecommendations.py | 2 ++ recommendations/VentilationRecommendations.py | 4 +++- 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/app/db/functions/portfolio_functions.py b/backend/app/db/functions/portfolio_functions.py index 37b6bf37..08e15a32 100644 --- a/backend/app/db/functions/portfolio_functions.py +++ b/backend/app/db/functions/portfolio_functions.py @@ -8,6 +8,7 @@ def aggregate_portfolio_recommendations(session, portfolio_id: int): aggregates = ( session.query( func.sum(Recommendation.estimated_cost).label("cost"), + func.sum(Recommendation.total_work_hours).label("total_work_hours"), # For future usage we will aggregate multiple fields in this step # func.sum(Recommendation.heat_demand).label("total_heat_demand"), # func.sum(Recommendation.energy_savings).label("total_energy_savings") @@ -20,6 +21,7 @@ def aggregate_portfolio_recommendations(session, portfolio_id: int): aggregates_dict = { "cost": aggregates.cost or 0, + "total_work_hours": aggregates.total_work_hours or 0, # "total_heat_demand": aggregates.total_heat_demand or 0, # "total_energy_savings": aggregates.total_energy_savings or 0 } diff --git a/backend/app/db/functions/recommendations_functions.py b/backend/app/db/functions/recommendations_functions.py index 5d468db9..34c4ef96 100644 --- a/backend/app/db/functions/recommendations_functions.py +++ b/backend/app/db/functions/recommendations_functions.py @@ -79,7 +79,8 @@ def upload_recommendations(session: Session, recommendations_to_upload, property "default": rec["default"], "starting_u_value": rec.get("starting_u_value"), "new_u_value": rec.get("new_u_value"), - "sap_points": rec["sap_points"] + "sap_points": rec["sap_points"], + "total_work_hours": rec["labour_hours"], } for rec in recommendations_to_upload ] diff --git a/backend/app/plan/router.py b/backend/app/plan/router.py index 37f673b4..a20369cc 100644 --- a/backend/app/plan/router.py +++ b/backend/app/plan/router.py @@ -367,7 +367,7 @@ async def trigger_plan(body: PlanTriggerRequest): # the portfolion level impact aggregate_portfolio_recommendations(session, portfolio_id=body.portfolio_id) - # Commit all changes at once + # Commit final changes session.commit() except IntegrityError: logger.error("Database integrity error occurred", exc_info=True) diff --git a/recommendations/FireplaceRecommendations.py b/recommendations/FireplaceRecommendations.py index 9524c75a..30ab1ad2 100644 --- a/recommendations/FireplaceRecommendations.py +++ b/recommendations/FireplaceRecommendations.py @@ -44,5 +44,7 @@ class FireplaceRecommendations(Definitions): "new_u_value": None, "sap_points": None, "total": estimated_cost, + # Take a very basic estimate of 6 hours, multipled by the number of open fireplaces to seal + "labour_hours": 6 * number_open_fireplaces } ] diff --git a/recommendations/VentilationRecommendations.py b/recommendations/VentilationRecommendations.py index c330104f..419029a3 100644 --- a/recommendations/VentilationRecommendations.py +++ b/recommendations/VentilationRecommendations.py @@ -61,10 +61,12 @@ class VentilationRecommendations(Definitions): { "parts": part, "type": part[0]["type"], - "description": "Install %s" % part[0]["description"], + "description": f"Install {n_units} {part[0]['description']} units", "starting_u_value": None, "new_u_value": None, "sap_points": None, "total": estimated_cost, + # We use a very simple and rough estimate of 4 hours per unit + "labour_hours": 4 * n_units } ]