mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-12 13:29:04 +00:00
do batch update per portfolio not per property
This commit is contained in:
parent
9d12eef0e5
commit
63bef436d0
2 changed files with 28 additions and 19 deletions
|
|
@ -10,7 +10,7 @@ payload = {
|
||||||
"body": json.dumps(
|
"body": json.dumps(
|
||||||
{
|
{
|
||||||
"portfolio_id": 556,
|
"portfolio_id": 556,
|
||||||
"scenarios_to_consider": [],
|
"scenarios_to_consider": [1039, 1041],
|
||||||
"scenarios_priority_order": [],
|
"scenarios_priority_order": [],
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from typing import Dict, List, Optional
|
from typing import Dict, List, Optional, Tuple
|
||||||
|
|
||||||
from backend.app.db.functions.recommendations_functions import (
|
from backend.app.db.functions.recommendations_functions import (
|
||||||
bulk_update_plans,
|
bulk_update_plans,
|
||||||
|
|
@ -40,6 +40,9 @@ def process_portfolio(
|
||||||
|
|
||||||
plans_by_property: Dict[int, List[Plan]] = _group_plans_by_property(plans)
|
plans_by_property: Dict[int, List[Plan]] = _group_plans_by_property(plans)
|
||||||
|
|
||||||
|
updated_plan_models: List[PlanModel] = []
|
||||||
|
updated_scenario_models: List[ScenarioModel] = []
|
||||||
|
|
||||||
for property_id, property_plans in plans_by_property.items():
|
for property_id, property_plans in plans_by_property.items():
|
||||||
|
|
||||||
if not property_plans:
|
if not property_plans:
|
||||||
|
|
@ -49,9 +52,16 @@ def process_portfolio(
|
||||||
property_plans, scenario_priority_order
|
property_plans, scenario_priority_order
|
||||||
)
|
)
|
||||||
|
|
||||||
_update_default_flags(
|
updated_property_plan_models, updated_property_scenario_models = (
|
||||||
property_plans, cheapest_plan
|
_update_plan_and_scenario_objects(property_plans, cheapest_plan)
|
||||||
) # TODO: we have already unset existing default(s), so this method can probably be a bit simpler now
|
)
|
||||||
|
|
||||||
|
updated_plan_models.extend(updated_property_plan_models)
|
||||||
|
updated_scenario_models.extend(updated_property_scenario_models)
|
||||||
|
|
||||||
|
if len(updated_plan_models) > 0:
|
||||||
|
bulk_update_plans(updated_plan_models, updated_scenario_models)
|
||||||
|
logger.info("Successfully updated Plan default values in database")
|
||||||
|
|
||||||
|
|
||||||
def choose_cheapest_relevant_plan(
|
def choose_cheapest_relevant_plan(
|
||||||
|
|
@ -106,7 +116,9 @@ def _unset_defaults_for_scenarios_not_being_considered(
|
||||||
if id not in scenarios_to_consider:
|
if id not in scenarios_to_consider:
|
||||||
scenarios_to_unset_default.append(id)
|
scenarios_to_unset_default.append(id)
|
||||||
|
|
||||||
logger.info(f"Scenarios to unset defaults: {scenarios_to_unset_default}")
|
logger.info(
|
||||||
|
f"Unsetting {scenarios_to_unset_default} as default scenario(s) as not included in provided list of scenarios to consider"
|
||||||
|
)
|
||||||
|
|
||||||
if len(scenarios_to_unset_default) > 0:
|
if len(scenarios_to_unset_default) > 0:
|
||||||
plans_to_unset_default: List[int] = get_plan_ids_by_scenario_ids(
|
plans_to_unset_default: List[int] = get_plan_ids_by_scenario_ids(
|
||||||
|
|
@ -164,7 +176,9 @@ def _group_plans_by_property(plans: List[Plan]) -> Dict[int, List[Plan]]:
|
||||||
return grouped
|
return grouped
|
||||||
|
|
||||||
|
|
||||||
def _update_default_flags(plans: List[Plan], cheapest_plan: Plan) -> None:
|
def _update_plan_and_scenario_objects(
|
||||||
|
plans: List[Plan], cheapest_plan: Plan
|
||||||
|
) -> Tuple[List[PlanModel], List[ScenarioModel]]:
|
||||||
plans_to_update: List[Plan] = []
|
plans_to_update: List[Plan] = []
|
||||||
|
|
||||||
for plan in plans:
|
for plan in plans:
|
||||||
|
|
@ -176,17 +190,12 @@ def _update_default_flags(plans: List[Plan], cheapest_plan: Plan) -> None:
|
||||||
plan.set_default(should_be_default)
|
plan.set_default(should_be_default)
|
||||||
plans_to_update.append(plan)
|
plans_to_update.append(plan)
|
||||||
|
|
||||||
if plans_to_update:
|
plan_models: List[PlanModel] = []
|
||||||
plan_models: List[PlanModel] = []
|
scenario_models: List[ScenarioModel] = []
|
||||||
scenario_models: List[ScenarioModel] = []
|
|
||||||
|
|
||||||
for plan in plans_to_update:
|
for plan in plans_to_update:
|
||||||
plan_model, scenario_model = plan.to_sqlalchemy()
|
plan_model, scenario_model = plan.to_sqlalchemy()
|
||||||
plan_models.append(plan_model)
|
plan_models.append(plan_model)
|
||||||
scenario_models.append(scenario_model)
|
scenario_models.append(scenario_model)
|
||||||
|
|
||||||
bulk_update_plans(plan_models, scenario_models)
|
return (plan_models, scenario_models)
|
||||||
logger.info("Successfully updated Plan default values")
|
|
||||||
|
|
||||||
else:
|
|
||||||
logger.info("All plan default values already correct. Not updating")
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue