class Router: def __init__(self) -> None: self.model_controller = ModelsController() self.view_controller = ViewsController() self.db_controller = DBController() self.player_view = PlayerView() self.menu_view = MenuView() self.tournament_view = TournamentView() self.utilities_view = UtilitiesView() self.score_view = ScoreView() def main_menu(self, selected_menu): """Main Menu: - 1 : Create tournament - 2 : Create new player - 3 : Edit tournament - 4 : Edit player - 5 : Rapports - 6 : Load data from database - 7 : Save to database - 8 : DEMO generate auto tournament - 9 : Stop Args: selected_menu (str): input user Returns: False : to Stop the loop with [9] """ # Create new tournament if selected_menu == '1': self.model_controller.create_tournament() # Create new player if selected_menu == '2': player_info = self.model_controller.ask_player_info( len(Player.LIST_PLAYERS)) self.model_controller.create_new_player(player_info) # Edit tournament elif selected_menu == '3': if len(Tournament.TOURNAMENT_LIST) >= 1: selected_tournament = self.view_controller.select_tournament() if selected_tournament: try: self.edit_tournament_menu(selected_tournament) except IndexError: self.utilities_view.display_error_with_message( 'Pas de tournois à cet index !') else: pass else: self.utilities_view.display_error_with_message( 'Pas de tournois enregistré pour le moment !') # Edit player elif selected_menu == '4': if Player.get_all_players() is not None: self.player_view.display_players_list(Player.get_all_players()) player_id = self.menu_view.select_item('joueur') try: selected_player: object = Player.get_all_players()[int( player_id)] self.edit_player_menu(selected_player) except IndexError: self.utilities_view.display_error_with_message( 'Pas de joueur à cet index !') except ValueError: self.utilities_view.display_error_with_message( "Ce n'est un numéro d'index !") # Rapports elif selected_menu == '5': self.reports_menu() # Load data from database elif selected_menu == '6': self.db_controller.load_players() self.db_controller.load_tournaments() # Save elif selected_menu == '7': self.db_controller.save_to_tinydb(Player().LIST_PLAYERS, Tournament().TOURNAMENT_LIST) # DEMO generate tournament auto elif selected_menu == '8': self.model_controller.DEMO_import_auto_tournament() # stop elif selected_menu == '9': return False else: self.utilities_view.display_error_with_message('Valeur non trouvé') def edit_tournament_menu(self, tournament: object): """Tournament edition menu 1 : End of a round 2 : Change Name 3 : Change Description 4 : Change time controller 5 : Change Location 6 : Change Sart date 7 : Change End Date 8 : Return to main menu Args: tournament (object): Instance of tournament, we want to edit. """ selected_menu = self.menu_view.display_menu_edit_tournament(tournament) # end of the round -> update score if selected_menu == '1': self.model_controller.end_of_round(tournament) # change name of tournament elif selected_menu == '2': new_tournament_name = self.tournament_view.update_tournament_name( tournament) tournament.update_name(new_tournament_name) # change description elif selected_menu == '3': new_description = self.tournament_view.update_tournament_description( tournament) tournament.update_description(new_description) # change time controller elif selected_menu == '4': new_time_controller = self.tournament_view.update_time_controller( tournament) tournament.update_time_controller(new_time_controller) # change tournament's location elif selected_menu == '5': new_location = self.tournament_view.update_tournament_location( tournament) tournament.update_location(new_location) # change start_date elif selected_menu == '6': new_start_date = self.tournament_view.update_tournament_start_date( tournament) tournament.update_start_date(new_start_date) # change end_date elif selected_menu == '7': new_end_date = self.tournament_view.update_tournament_end_date( tournament) tournament.update_end_date(new_end_date) # return to main menu elif selected_menu == '8': pass # error : value not found else: self.utilities_view.display_error() def edit_player_menu(self, player: object): """Menu player edition Args: player (object): Player instance we want to edit """ selected_menu = self.menu_view.display_menu_edit_player() # Editer the ranking if selected_menu == '1': new_ranking = self.player_view.update_ranking(player) player.update_ranking(new_ranking) # Edit first name and last name elif selected_menu == '2': new_first_name, new_last_name = self.player_view.update_name( player) player.update_name(new_first_name, new_last_name) # Edit date of birth elif selected_menu == '3': new_date_of_birth = self.player_view.update_birthday(player) player.update_birthday(new_date_of_birth) # Edit sex elif selected_menu == '4': new_sex = self.player_view.update_sex(player) player.update_sex(new_sex) # Return to main menu elif selected_menu == '5': pass else: self.utilities_view.display_error() def reports_menu(self): """Choice - Menu reports.""" selected_menu = self.menu_view.display_report_menu() # display all players if selected_menu == '1': if len(Player.LIST_PLAYERS) >= 1: self.view_controller.display_all_players_sorted() else: self.utilities_view.display_error_with_message( 'Pas de joueur enregistré pour le moment !') # Players of a tournament elif selected_menu == '2': if len(Tournament.TOURNAMENT_LIST) >= 1: self.view_controller.display_players_of_tournament() else: self.utilities_view.display_error_with_message( 'Pas de tournois enregistré pour le moment !') # Display a tournament elif selected_menu == '3': if len(Tournament.TOURNAMENT_LIST) >= 1: self.tournament_view.display_tournament_list( Tournament.TOURNAMENT_LIST) else: self.utilities_view.display_error_with_message( 'Pas de tournois enregistré pour le moment !') # Rounds of a tournament elif selected_menu == '4': if len(Tournament.TOURNAMENT_LIST) >= 1: self.view_controller.display_round_of_tournament() else: self.utilities_view.display_error_with_message( 'Pas de tournois enregistré pour le moment !') # Matchs list of a tournament elif selected_menu == '5': if len(Tournament.TOURNAMENT_LIST) >= 1: self.view_controller.display_match_of_tournament() else: self.utilities_view.display_error_with_message( 'Pas de tournois enregistré pour le moment !') # Final score elif selected_menu == '6': ended_tournaments = self.model_controller.get_ended_tournament() if ended_tournaments != []: self.tournament_view.display_tournament_list(ended_tournaments) try: selected_tournoi = ended_tournaments[int( self.menu_view.select_item('tournoi'))] player_with_score = Suisse().get_players_list_with_score( selected_tournoi.round_list[-1]) sorted_player_list = Suisse().sort_list_by_score( player_with_score) self.score_view.display_final_score(sorted_player_list) except IndexError: self.utilities_view.display_error_with_message( 'Pas de tournoi à cet index') except ValueError: self.utilities_view.display_error_with_message( "Ce n'est pas un numéro d'index") else: self.utilities_view.display_error_with_message( "Pas de tournoi terminé pour l'instant") # retrun to main menu elif selected_menu == '7': pass # Le choix n'est pas dans les propositions du menu else: UtilitiesView().display_error()