diff --git a/src/warchron/controller/war_controller.py b/src/warchron/controller/war_controller.py index 8702bf8..9851333 100644 --- a/src/warchron/controller/war_controller.py +++ b/src/warchron/controller/war_controller.py @@ -3,6 +3,7 @@ from typing import List, TYPE_CHECKING from PyQt6.QtWidgets import QMessageBox, QDialog from warchron.constants import RefreshScope +from warchron.model.exception import DomainError if TYPE_CHECKING: from warchron.controller.app_controller import AppController @@ -115,22 +116,46 @@ class WarController: war_id = self.app.navigation.selected_war_id if not war_id: return - self.app.model.set_major_value(war_id, value) + try: + self.app.model.set_major_value(war_id, value) + except DomainError as e: + QMessageBox.warning( + self.app.view, + "Setting forbidden", + str(e), + ) self.app.is_dirty = True + self.app.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS) def set_minor_value(self, value: int) -> None: war_id = self.app.navigation.selected_war_id if not war_id: return - self.app.model.set_minor_value(war_id, value) + try: + self.app.model.set_minor_value(war_id, value) + except DomainError as e: + QMessageBox.warning( + self.app.view, + "Setting forbidden", + str(e), + ) self.app.is_dirty = True + self.app.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS) def set_influence_token(self, checked: bool) -> None: war_id = self.app.navigation.selected_war_id if not war_id: return - self.app.model.set_influence_token(war_id, checked) + try: + self.app.model.set_influence_token(war_id, checked) + except DomainError as e: + QMessageBox.warning( + self.app.view, + "Setting forbidden", + str(e), + ) self.app.is_dirty = True + self.app.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS) # Objective methods diff --git a/src/warchron/model/model.py b/src/warchron/model/model.py index 4519f07..65a4a7b 100644 --- a/src/warchron/model/model.py +++ b/src/warchron/model/model.py @@ -166,15 +166,15 @@ class Model: def set_major_value(self, war_id: str, value: int) -> None: war = self.get_war(war_id) - war.set_major(value) + war.set_major_value(value) def set_minor_value(self, war_id: str, value: int) -> None: war = self.get_war(war_id) - war.set_minor(value) + war.set_minor_value(value) def set_influence_token(self, war_id: str, value: bool) -> None: war = self.get_war(war_id) - war.set_influence(value) + war.set_influence_token(value) def get_all_wars(self) -> List[War]: return list(self.wars.values()) diff --git a/src/warchron/model/war.py b/src/warchron/model/war.py index 3ff19b5..ca7c6ff 100644 --- a/src/warchron/model/war.py +++ b/src/warchron/model/war.py @@ -36,17 +36,23 @@ class War: def set_year(self, new_year: int) -> None: self.year = new_year - def set_major(self, new_value: int) -> None: + def set_major_value(self, new_value: int) -> None: + if self.is_over: + raise ForbiddenOperation("Can't set major value of a closed war.") if new_value < self.minor_value: - raise ValueError("major_value cannot be < minor_value") + raise ValueError("Can' set major value < minor value") self.major_value = new_value - def set_minor(self, new_value: int) -> None: + def set_minor_value(self, new_value: int) -> None: + if self.is_over: + raise ForbiddenOperation("Can't set minor value of a closed war.") if new_value > self.major_value: - raise ValueError("minor_value cannot be > major_value") + raise ValueError("Can't set minor value > major value") self.minor_value = new_value - def set_influence(self, new_state: bool) -> None: + def set_influence_token(self, new_state: bool) -> None: + if self.is_over: + raise ForbiddenOperation("Can't set influence token of a closed war.") self.influence_token = new_state def set_state(self, new_state: bool) -> None: