diff --git a/src/warchron/controller/campaign_controller.py b/src/warchron/controller/campaign_controller.py index 2717c13..e3736fb 100644 --- a/src/warchron/controller/campaign_controller.py +++ b/src/warchron/controller/campaign_controller.py @@ -60,8 +60,7 @@ class CampaignController: vp_icon_map = RankingIcon.compute_icons( war, ContextType.CAMPAIGN, campaign_id, scores ) - # TODO get only objectives used in major/minor (ignore token only) - for obj in war.get_all_objectives(): + for obj in war.get_objectives_used_as_maj_or_min(): objective_icon_maps[obj.id] = RankingIcon.compute_icons( war, ContextType.CAMPAIGN, @@ -94,7 +93,8 @@ class CampaignController: ) ) objectives = [ - ObjectiveDTO(o.id, o.name, o.description) for o in war.get_all_objectives() + ObjectiveDTO(o.id, o.name, o.description) + for o in war.get_objectives_used_as_maj_or_min() ] self.app.view.display_campaign_participants(rows, objectives) self.app.view.endCampaignBtn.setEnabled(not camp.is_over) diff --git a/src/warchron/controller/closure_workflow.py b/src/warchron/controller/closure_workflow.py index 5fe66a8..fea0724 100644 --- a/src/warchron/controller/closure_workflow.py +++ b/src/warchron/controller/closure_workflow.py @@ -44,8 +44,8 @@ class CampaignClosureWorkflow(ClosureWorkflow): TieResolver.apply_bids(war, tie, bids) TieResolver.resolve_tie_state(war, tie, bids) ties = TieResolver.find_campaign_ties(war, campaign.id) - # TODO get only objectives used in major/minor (ignore token only) - for objective_id in war.objectives: + for obj in war.get_objectives_used_as_maj_or_min(): + objective_id = obj.id ties = TieResolver.find_campaign_objective_ties( war, campaign.id, @@ -77,8 +77,8 @@ class WarClosureWorkflow(ClosureWorkflow): TieResolver.apply_bids(war, tie, bids) TieResolver.resolve_tie_state(war, tie, bids) ties = TieResolver.find_war_ties(war) - # TODO get only objectives used in major/minor (ignore token only) - for objective_id in war.objectives: + for obj in war.get_objectives_used_as_maj_or_min(): + objective_id = obj.id ties = TieResolver.find_war_objective_ties( war, objective_id, diff --git a/src/warchron/controller/war_controller.py b/src/warchron/controller/war_controller.py index b07d6c3..0a73daa 100644 --- a/src/warchron/controller/war_controller.py +++ b/src/warchron/controller/war_controller.py @@ -52,6 +52,10 @@ class WarController: for obj in objectives ] self.app.view.display_war_objectives(objectives_for_display) + limited_objectives_for_display: List[ObjectiveDTO] = [ + ObjectiveDTO(id=obj.id, name=obj.name, description=obj.description) + for obj in war.get_objectives_used_as_maj_or_min() + ] scores = ScoreService.compute_scores(war, ContextType.WAR, war.id) rows: List[WarParticipantScoreDTO] = [] vp_icon_map: dict[str, QIcon] = {} @@ -60,8 +64,7 @@ class WarController: vp_icon_map = RankingIcon.compute_icons( war, ContextType.WAR, war_id, scores ) - # TODO get only objectives used in major/minor (ignore token only) - for obj in war.get_all_objectives(): + for obj in war.get_objectives_used_as_maj_or_min(): objective_icon_maps[obj.id] = RankingIcon.compute_icons( war, ContextType.WAR, @@ -90,7 +93,7 @@ class WarController: objective_icons=objective_icons, ) ) - self.app.view.display_war_participants(rows, objectives_for_display) + self.app.view.display_war_participants(rows, limited_objectives_for_display) self.app.view.endWarBtn.setEnabled(not war.is_over) def _validate_war_inputs(self, name: str, year: int) -> bool: diff --git a/src/warchron/model/campaign.py b/src/warchron/model/campaign.py index 55bc899..f482412 100644 --- a/src/warchron/model/campaign.py +++ b/src/warchron/model/campaign.py @@ -1,6 +1,6 @@ from __future__ import annotations from uuid import uuid4 -from typing import Any, Dict, List +from typing import Any, Dict, List, Set from warchron.model.exception import ForbiddenOperation, RequiresConfirmation from warchron.model.campaign_participant import CampaignParticipant @@ -146,6 +146,15 @@ class Campaign: for sect in self.sectors.values() ) + def get_objectives_used_as_maj_or_min(self) -> List[str]: + obj_ids: Set[str] = set() + for sector in self.sectors.values(): + if sector.major_objective_id: + obj_ids.add(sector.major_objective_id) + if sector.minor_objective_id: + obj_ids.add(sector.minor_objective_id) + return [obj_id for obj_id in obj_ids] + def add_sector( self, name: str, diff --git a/src/warchron/model/war.py b/src/warchron/model/war.py index 360d70e..0ba9476 100644 --- a/src/warchron/model/war.py +++ b/src/warchron/model/war.py @@ -175,6 +175,14 @@ class War: def get_all_objectives(self) -> List[Objective]: return list(self.objectives.values()) + def get_objectives_used_as_maj_or_min(self) -> List[Objective]: + obj_ids: set[str] = set() + for camp in self.campaigns: + obj_ids.update(camp.get_objectives_used_as_maj_or_min()) + return [ + self.objectives[obj_id] for obj_id in obj_ids if obj_id in self.objectives + ] + def get_objective_name(self, objective_id: str | None) -> str: if objective_id is None: return ""