# Documentation des fonctions frontend
## constantes.js
### Description du fichier
Ce fichier contient la liste des constantes correspodant aux numéros des colonnes de chaque fichier CSV, dans le cas où la structure des fichiers CSV est modifiée, il faut mettre à jour ce fichier.
## Defense.js
### Description du fichier
Ce fichier contient la définition de la classe **Defense**.
### Structure Defense
```javascript=
class Defense {
id = null
login = null
id_jury
slot = null
reviewer = null
}
```
Cette classe correspond à une soutenance de stage, elle contient toutes les informations relatives à une soutenance qui seront affichées au niveau de la visualisation.
### Liste des fonctions
#### ***gen_reviewer_list***
Cette fonction permet de générer le menu déroulant permettant de sélectionner le relecteur d'un stage.
## drag_and_drop.js
### Description du fichier
Ce fichier contient l'ensemble des fonctions qui permettent de gérer le drag and drop du tableau des stages affectés vers les stages non affectés, et inversement.
### Liste des fonctions
#### ***onDragStart_affected_to_non_affected***
@param *event*
Cette fonction permet de gérer le début du déplacement d'un stage depuis le tableau des stages affectés.
#### ***onDragOver_affected_to_non_affected***
@param *event*
Cette fonction permet de gérer le passage d'un stage depuis le tableau des stages affectés au dessus du tableau des stages non affectés.
#### ***onDrop_affected_to_non_affected***
@param *event*
Cette fonction permet de gérer la fin du déplacement d'un stage depuis le tableau des stages affectés vers le tableau des stages non affectés. Cette fonction va ainsi supprimer le stage dans le premier tableau et va l'ajouter dans le second tout en ajoutant un menu déroulant permettant de sélectionner le créneau du stage.
#### ***onDragStart_non_affected_to_affected***
@param *event*
Cette fonction permet de gérer le début du déplacement d'un stage depuis le tableau des stages non affectés.
#### ***onDragOver_non_affected_to_affected***
@param *event*
Cette fonction permet de gérer le passage d'un stage depuis le tableau des stages non affectés au dessus du tableau des stagess affectés
#### ***onDrop_non_affected_to_affected***
@param *event*
Cette fonction permet de gérer la fin du déplacement d'un stage depuis le tableau des stages non affectés vers le tableau des stages non affectés. Cette fonction va ainsi supprimer le stage dans le premier tableau et va l'ajouter dans le second tout en récupérant la valeur du créneau sélectionné dans le menu déroulant.
## export.js
### Description du fichier
Ce fichier contient l'ensemble des fonctions qui permettent de gérer l'export de la répartition selon les deux fichiers CSV *internship_defense.csv* et *internship_wishes.csv*
### Liste des fonctions
#### ***download_internship_defense_csv***
Cette fonction permet de générer le contenu du fichier **internship_defense.csv** à partir des valeurs mises à jour selon les modifications effectuées dans l'application et permet également de lancer le téléchargement du fichier.
#### ***download_internship_wishes_csv***
Cette fonction permet de générer le contenu du fichier **internship_wishes.csv** à partir des valeurs mises à jour selon les modifications effectuées dans l'application et permet également de lancer le téléchargement du fichier
#### ***prepare_csv***
Cette fonction est exécutée lors de la sélection du bouton **Export la répartition en CSV**, elle permet de générer les deux fichiers à partir des fonctions ***download_internship_defense_csv*** et ***download_internship_wishes_csv***.
#### ***create_object_from_data***
@param *data*
@param *tab*
Cette fonction permet de créer un tableau (qui correspond au paramètre *tab*) de structures avec les attributs de la structure constitués des colonnes du fichier CSV (le contenu du fichier correspond au paramètre *data*).
#### ***update_internship_defense***
@param *data*
@param *internship_defense_csv_tab*
Cette fonction permet de créer un tableau contenant le contenu du fichier ***internship_defense.csv*** à partir de la fonction ***create_object_from_data*** et met à jour ce tableau selon les valeurs mises à jour dans l'application.
#### ***update_internship_wishes***
@param *data*
@param *internship_wishes_csv_tab*
Cette fonction permet de créer un tableau contenant le contenu du fichier ***internship_wishes.csv*** à partir de la fonction ***create_object_from_data*** et met à jour ce tableau selon les valeurs mises à jour dans l'application.
#### ***get_internship_defense_csv***
Cette fonction permet de retourner le contenu du nouveau fichier ***internship_defense.csv*** qui est stocké sous forme de chaîne de caractères.
#### ***get_internship_wishes_csv***
Cette fonction permet de retourner le contenu du nouveau fichier ***internship_wishes.csv*** qui est stocké sous forme de chaîne de caractères.
## jury_repartition.js
### Description du fichier
Ce fichier contient l'ensemble des fonctions qui permettent de visualiser les stages affectés à chaque jury ainsi que les stages non affectés.
### Liste des fonctions
#### ***display_defenses_for_each_jury***
@param *id*
Cette fonction permet d'afficher les stages correspondants à un jury spécifié par son id.
#### ***display_unasigned_defenses***
Cette fonction permet d'afficher les stages qui ne sont pas affectés à un jury.
#### ***display_current_reviewer***
@param *defense_id*
Cette fonction permet d'afficher le relecteur pour chaque stage .
#### ***getSelectValue***
@param *id*
Cette fonction permet de récupérer la nouvelle valeur du relecteur d'un stage bien déterminé et ensuite la mettre à jour en appelant la fonction ***update_repartition***
#### ***update_repartiton***
@param *defense_id*
@param *selectedValue*
Cette fonction permet de mettre à jour le relecteur du stage spécifié par son identifiant dans la répartiton, en le remplaçant par la nouvelle valeur déterminée par le paramètre "selectedValue".
#### ***sortTable***
Cette fonction permet de trier le tableau des stage affctés à un jury pour affichés les soutenances triées dans l'ordre lexicographique selon le créneau de la soutenance.
## read_only.js
### Description du fichier
Ce fichier contient les fonctions qui permettent de générer la répartition en lecture seule.
### Liste des fonctions
#### ***create_read_only***
Cette fonction permet de générer le fichier HTML qui correspond à un tableau de soutenances de stage. Pour cela la fonction permet de générer toutes les lignes du tableau à partir des instances de la classe ***Defense*** contenues dans la variable globale ***repart***.
#### ***create_line_read_only***
@param *defense*
Cette fonction permet de générer une ligne d'un tableau à partir du contenu de l'instance de la classe ***Defense*** passée en paramètre.
#### ***show_page_read_only***
Cette fonction permet de retourner le code HTML de la répartition à exporter sous forme de chaîne de caractères.
## Repartition.js
### Description du fichier
Ce fichier contient l'ensemble des fonctions permettant de gérer la classe ***Repartition***.
### Structure Repartition
```javascript=
class Repartition {
defense_array = [];
assoc_jury_examinator = [];
assoc_reviewer_array = [];
assoc_internship_array = [];
slotname_array = [];
}
```
1. *defense_array* est un tableau qui contient une instance de la classe ***Defense*** pour chaque stage de la répartition.
2. *assoc_jury_examinator* est un tableau qui contient les associations entre les ids des jurys et les présidents sous forme de couples (id_jury,name).
3. *assoc_reviewer_array* est un tableau qui contient les associations entre le nom d'un relecteur et son login sous forme d'un couple (login, name).
4. *assoc_internship_array* est un tableau qui contient les associations entre le titre d'un stage et son identifiant sous forme d'un couple (id, title).
5. *slotname_array* est un tableau qui contient la liste des créneaux de soutenances contenus dans le fichier ***constraint.yaml***.
Une unique instance de cette classe est manipulée dans l'application, cette instance est la variable globale ***repart*** qui contient la répartition et est actualisée à chaque modification effectuée dans l'application.
### Liste des fonctions
#### ***parse_internship_defense***
@param *data*
Cette fonction va parser le contenu fichier CSV ***internship_defense.csv*** passé en paramètre et va stocker toutes les valeurs extraites dans le tableau ***repart.defense_array***. Cette fonction va également remplir le tableau ***repart.assoc_jury_examinator*** à partir des présidents déjà associés aux soutenances dans le fichier CSV.
#### ***create_header***
Cette fonction permet de créer la ligne de titre du tableau contenant les soutenances et qui sera affichée dans l'application.
#### ***fill_assoc_reviewer_array***
Cette fonction permet de remplir le tableau ***repart.assoc_reviewer_array*** en parsant le fichier ***reviewers.csv***.
#### ***fill_assoc_internship_array***
Cette fonction permet de remplir le tableau ***repart.assoc_internship_array*** en parsant le fichier ***internship_wishes.csv***.
#### ***assoc_revierwer_name_from_login***
@param *login*
Cette fonction retourne le nom du relecteur associé au login en paramètre.
#### ***assoc_revierwer_login_from_name***
@param *name*
Cette fonction retourne le login du relecteur associé au nom en paramètre.
#### ***assoc_internship_title_from_id***
@param *id*
Cette fonction retourne le titre du stage associé à l'identifiant en paramètre.
#### ***assoc_internship_id_from_title***
@param *title*
Cette fonction retourne l'identifiant du stage associé au titre en paramètre.
#### ***assoc_id_jury_from_examinator***
@param *name*
Cette fonction retourne l'id du jury correspondant au nom du président en paramètre.
#### ***assoc_examinator_from_id_jury***
@param *id_jury*
Cette fonction retourne le nom du président correspondant à l'id du jury en paramètre.
#### ***fill_repart***
Cette fonction va parser le contenu fichier CSV ***internship_defense.csv*** en exécutant ***parse_internship_defense*** sur les données du fichier CSV.
#### ***distinct_jury()***
Cette fonction permet de supprimer les doublons contenus dans le tableau ***repart.jurry_array***.
#### ***save_repart_local_storage()***
Cette fonction permet de sauvegarder la répartition actuelle dans le ***localStorage*** sous forme d'une chaîne de caractères.
#### ***load_repart_local_storage()***
Cette fonction permet de recharger la répartition stockée sous forme d'une chaîne de caractères dans le ***localStorage***.
#### ***reset_repart()***
Cette fonction va réinitialiser la sauvegarde locale de la répartition et va recharger la page pour créer une nouvelle répartition à partir des fichiers CSV sur le serveur.
## select_management_jury.js
### Description du fichier
Ce fichier contient les différentes fonctions permettant de gérer les présidents de jury et les créneaux des soutenances.
### Liste des fonctions
#### ***change_president***
Cette fonction permet de changer le président d'un jury. Dans le cas où le président sélectionné est dèja affecté à un jury, un message d'erreur apparaît.
#### ***update_president_liste***
Cette fonction permet de mettre à jour le menu déroulant destiné au président d'un jury en éliminant à chaque fois les présidents qui sont dèja affectés aux jurys.
#### ***select_management_jury***
Cette fonction permet de créer le menu déroulant pour la sélection du président d'un jury.
#### ***change_slotname***
@param *id*
Cette fonction permet de modifier le créneaux de la soutenance à partie de l'id du menu déroulant en paramètre.
#### ***select_slotname***
Cette fonction permet de créer le menu déroulant de sélection des créneaux de soutenance.
## set_jury_buttons.js
### Description du fichier
Ce fichier contient l'ensemble des fonctions qui permettent de gérer les boutons associés à chaque jury
### Liste des fonctions
#### ***update_list_created_jury***
Cette fonction permet de générer le menu déroulant de sélection des présidents.
#### ***del_jury***
Cette fonction permet de supprimer un jury en supprimant son bouton et en transférant tous ses stages vers le tableau des stages non affectés.
#### ***add_jury***
Cette fonction permet d'ajouter un jury en ajoutant un jury temporaire "New Jury" puis en actualisant la page
#### ***set_buttons***
Cette fonction permet d'afficher un bouton pour chaque jury qui, lorque l'on sélectionne ce bouton, va afficher les stages associés à ce jury.
## yaml_reader.js
### Description du fichier
Ce fichier permet de parser le fichier de contraintes pour en extraire les créneaux des soutenances.
### Liste des fonctions
#### ***yaml_parser_slotname***
Cette fonction va parser le fichier ***constraint.yaml*** et va récupérer les créneaux des soutenances qui seront stockés dans ***repart.slotname_array***.