mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
35 lines
1.4 KiB
Python
35 lines
1.4 KiB
Python
from sqlalchemy import func
|
|
from backend.app.db.models.recommendations import Plan, PlanRecommendations, Recommendation
|
|
from backend.app.db.models.portfolio import Portfolio
|
|
|
|
|
|
def aggregate_portfolio_recommendations(session, portfolio_id: int):
|
|
# Aggregate multiple fields
|
|
aggregates = (
|
|
session.query(
|
|
func.sum(Recommendation.estimated_cost).label("cost"),
|
|
# 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")
|
|
)
|
|
.join(PlanRecommendations, PlanRecommendations.recommendation_id == Recommendation.id)
|
|
.join(Plan, Plan.id == PlanRecommendations.plan_id)
|
|
.filter(Plan.portfolio_id == portfolio_id, Plan.is_default == True, Recommendation.default == True)
|
|
.one()
|
|
)
|
|
|
|
aggregates_dict = {
|
|
"cost": aggregates.cost or 0,
|
|
# "total_heat_demand": aggregates.total_heat_demand or 0,
|
|
# "total_energy_savings": aggregates.total_energy_savings or 0
|
|
}
|
|
|
|
# Get the portfolio and update the fields
|
|
portfolio = session.query(Portfolio).filter_by(id=portfolio_id).one()
|
|
# Update the data
|
|
for key, value in aggregates_dict.items():
|
|
setattr(portfolio, key, value)
|
|
|
|
# Merge the updated portfolio back into the session
|
|
session.merge(portfolio)
|
|
session.flush()
|