travel-agency issueshttps://univ-nantes.io/E145180E/travel-agency/-/issues2020-02-17T10:52:53Zhttps://univ-nantes.io/E145180E/travel-agency/-/issues/17ISSUE 14: Ajouter un support graphique pour gérer les utilisateurs2020-02-17T10:52:53ZEleonore BURGAUDISSUE 14: Ajouter un support graphique pour gérer les utilisateurs# Ajout d'utilisateur via support graphique
Cet issue n'est pour le moment résolu que sous la forme d'ébauche, pour mettre en place une interaction entre le support graphique et l'ajout au sein d'`UserManager` de nouveaux utilisateurs.
#...# Ajout d'utilisateur via support graphique
Cet issue n'est pour le moment résolu que sous la forme d'ébauche, pour mettre en place une interaction entre le support graphique et l'ajout au sein d'`UserManager` de nouveaux utilisateurs.
## Support graphique
La scène est créée au travers d'un fichier _userManageView.fxml_, un document écrit en XML permettant de décrire les différents aspects graphiques affichés sur la scène. (_voir ticket #15_)
Sur la scène, on retrouve des champs pour y entrer le nom d'utilisateur et mot de passe, et des boutons radio permettant de choisir entre un rôle d'**Admin** ou d'**Agent**. Dans une version ultérieur, on supprimerait ce choix car on estime qu'une personne lambda ne peut s'inscrire en tant qu'administrateur du logiciel qu'il utilise.
Néanmoins, le formulaire actuel a pour but de s'assurer que, lors de l'ajout d'un nouvel utilisateur, qu'il soit Admin ou Agent, cet ajout s'effectue et et bien. On aura par ailleurs des informations dans l'invite de commande pour confirmer que l'ajout s'est bien effectué.
## Classe ManagingUserController
Comme pour la classe `LoginController`, on a les différentes méthodes inter-réagissant avec ce que l'utilisateur fait sur la scène. Cette classe comporte les méthodes suivantes:
* **handleButtonClick**: La méthode s'active lorsqu'on clique sur le bouton **Inscription**. Elle récupère alors les différentes valeurs entrées par l'utilisateur, ainsi que les informations sur le rôle qu'aura cet utilisateur avant de les vérifier. Dans le cas où les différents champs sont bien remplis ou que le nom d'utilisateur n'existe pas déjà, on entre dans la fonction _addNewUser( )_ et à sa sortie, on retourne un message à l'utilisateur attestant son ajout.
* **addNewUser**: Cette méthode récupère les informations entrées dans le formulaire et s'en sert pour ajouter un nouvel utilisateur au sein de `UserManager`
* **handleAgentButtonClick** et **handleAdminButtonClick**: Ces deux méthodes fonctionnent en miroir: si on sélectionne le bouton radio "Admin", alors le bouton "Agent" se désélectionne et vice-versa. Cette méthode permet d'empêcher l'utilisateur de s'attribuer plusieurs rôle, ou un rôle inexistant au sein du programme.
* **HandleBackButtonClick**: Cette méthode permet, lorsqu'on clique sur le bouton **Retour** de changer de scène pour retourner sur la page de connexion d'origine.(_voir ticket #15_)
* **buttonIsPressed** et **buttonIsReleased**: Ces deux méthodes ont un but esthétique. Lorsque l'utilisateur appuie sur le bouton **Login**, celui-ci deviens plus foncé lors de la pression, et lorsqu'on le relâche, retrouve sa couleur normal. Ces méthodes ont été rapidement implémenté pour s'assurer qu'il y avait bien interaction avec le bouton.
* **setGraphicUserInterface**: Fait une association entre la classe courante et le GUI
https://univ-nantes.io/E145180E/travel-agency/-/issues/16ISSUE 18: Améliorer la documentation générale du projet2020-02-17T10:53:08ZEleonore BURGAUDISSUE 18: Améliorer la documentation générale du projet# Création de la javaDoc
Pour cela, j'ai ajoutée les commentaires associés a chaque classes (hormis `UserManager`, car ces commentaires étaient déjà ajoutés par Lucie), en incluant les classes de test selon la norme mise en place pour l'...# Création de la javaDoc
Pour cela, j'ai ajoutée les commentaires associés a chaque classes (hormis `UserManager`, car ces commentaires étaient déjà ajoutés par Lucie), en incluant les classes de test selon la norme mise en place pour l'extraction correcte de cette documentations.
Puis, en allant dans `Tool > Generate JavaDoc`, IntelliJ à pu générer automatiquement cette documentation au format HTML. La documentation se trouve actuellement dans le fichier `JavaDoc`de travel-agency.
_NB: Ce ticket ne sera fermé qu'à la fin de la création de l'interface, soit après avoir complété l'**issue n°12**_https://univ-nantes.io/E145180E/travel-agency/-/issues/15ISSUE 13: Ajouter un support graphique qu'un utilisateur se connecte au logiciel2020-02-17T10:53:15ZEleonore BURGAUDISSUE 13: Ajouter un support graphique qu'un utilisateur se connecte au logiciel# Implémentation User Interface
Dans cet issue, on cherchera à implémenter une page de connexion: si un utilisateur souhaite se connecter, il entrera dans les champs présenté son nom d'utilisateur et mot de passe, puis cliquera sur le b...# Implémentation User Interface
Dans cet issue, on cherchera à implémenter une page de connexion: si un utilisateur souhaite se connecter, il entrera dans les champs présenté son nom d'utilisateur et mot de passe, puis cliquera sur le bouton de connexion.
On cherchera donc ici à vérifier les valeurs entrées dans ces champs, les comparer aux utilisateurs déjà existants et renvoyer soit la page d'accueil de l'application, soit un message d'erreur.
## Classe GUI
J'ai modifiée l'exemple déjà présent au sein de a classe GUI pour y implémenter l'utilisation un fichier FXML pour charger l'interface graphique.
En passant par la classe `FXMLLoader`, cela permet de rendre l'apparence plus attrayante, mais aussi de faciliter certaines implémentation comme l'ajout de méthodes associés aux boutons, labels, texte-inputs ...etc.. On initialise donc la scène en utilisant un ficher FXML de manière similaire à la version d'exemple préalablement mise en place. Néanmoins, on pourra supprimer tout les ajouts de boutons, qui seront pris en charge au sein du fichier FXML.
De plus, j'ai ajoutée une méthode temporaire _initTestingMethod( )_, qui initialise un agent et son calendrier, et l'ajoute au sein d'un objet `UserManager` et lui associe un mot de passe: cela permettra de vérifier qu'un agent existant au sein de UserManager pourra se connecter au logiciel.
### loginView.fxml (anciennement View.fxml)
Le fichier _loginView.fxml_, qui est un document écrit en XML permettant de décrire les différents aspects graphiques affichés sur la scène. De plus, pour créer ces aspects graphiques, on pourra utiliser **SceneBuilder** plutôt que de remplir manuellement ce fichier, ce qui permettra de gagner du temps.
De plus, on pourra ajouter des **id** aux différents boutons, inputs..etc... pour les associer aux méthodes construites au sein d'une classe `Controller`.
## Classe LoginController (anciennement Controller)
Au sein de la classe `LoginController `, on a les différentes méthodes inter-réagissant avec ce que l'utilisateur fait sur la scène (entrer son nom d'utilisateur, mot de passe ou clique sur le bouton **Login**). On aura les méthodes suivantes:
* **handleButtonClick**: Cette méthode est la plus importante. Lorsqu'un utilisateur entre des valeurs (ou nom) dans les champs de _texte_ et de _mot de passe_ puis clique sur le bouton **Login**, on récupère les informations entrés dans ces champs. Puis, on les compare avec les valeurs déjà existantes au sein de `UserManager`. On vérifie d'abord que le nom d'utilisateur existe. Si oui, on vérifie alors que le mot de passe est celui attribué à cet utilisateur. Dans le as où les deux champs sont vérifié, on pourra alors entrer dans l'application. Si les informations entrés ne sont pas vérifié, on envoie un message d'erreur sur la scène.
* **buttonIsPressed** et **buttonIsReleased**: Ces deux méthodes ont un but esthétique. Lorsque l'utilisateur appuie sur le bouton **Login**, celui-ci dviens plus foncé lors de la pression, et lorsqu'on le relâche, retrouve sa couleur normal. Ces méthodes ont été rapidement implémenté pour s'assurer qu'il y avait bien interaction avec le bouton.
* **signUpHandleButtonClick**: Cette méthode permet, lorsqu'on clique sur le bouton **Inscription** de changer de scene pour une nouvelle contenant un formulaire pour ajouter un utilisateur (_voir ticket #17_)
* **setGraphicUserInterface**: Fait une association entre la classe courante et GUI
_NB: Comme la vérification de mot de passe n'est actuellement pas fonctionnelle, l'implémentation complète ne peut être mise en place pour le moment_