# Notice d'utilisation
Ce document a pour but de détailler les différentes fonctionnalités de l'application et la manière de les utiliser. L'application est composée de deux parties :
1. Une partie serveur qui stocke les fichiers mis en ligne par le client et qui exécute le solveur générant une répartition.
2. Une partie client qui permet de mettre en ligne les fichiers, de modifier une répartition, de lancer le solveur et d'exporter une répartition.
# Importation des fichiers
## Conditions de fonctionnement de l'application
Quatre fichiers sont indispensables au fonctionnement de l'application, ces fichiers sont les suivants :
1. **constraint.yaml** qui contient la liste des contraintes utilisées par le solveur
2. **internship_defense.csv**
3. **internship_wishes.csv**
4. **reviewers.csv** qui contient la liste des professeurs susceptibles de relire un rapport de soutenance et pouvant être présidents de jury.
:warning: L'absence d'un de ces quatre fichiers empêche le bon fonctionnement de l'application, ainsi tant que les quatre fichiers ne sont pas présents, il n'est pas possible d'accéder à la visualisation et modification d'une répartition.
### **constraint.yaml**
Ce fichier doit contenir au minimum les champs suivants :
- ***nbjury*** qui correspond au nombre de jurys souhaité
- ***nbslot*** qui correspond au nombre de slots (créneaux horaires) souhaité dans chaque jury
- ***slotname*** qui correspond aux noms de vos slots
- ***metaconstraint*** qui correspond à la liste des métacontraintes :
- ***international_constraint*** qui correspond à la contrainte _"les stages réalisés à l'étranger doivent avoir un relecteur international"_
- ***same_company*** qui correspond à la contrainte _"les stages réalisés dans les mêmes entreprises doivent être dans le même jury"_
- ***internship/internship*** qui correspond à la liste des contraintes _"les stages id1 et id2 doivent être ensemble"_ traduite sous la forme ***[id1,id2,poids]*** avec des poids compris entre -10 et 10
- ***internship/reviewer*** qui correspond à la liste des contraintes _"le stage id1 doit être relu par le relecteur login1"_ sous la forme ***[id1,login1,poids]*** avec des poids compris entre -10 et 10
- ***internship/slot*** qui correspond à la liste des contraintes _"le stage id1 doit être placé sur le slot slot_name1"_ sous la forme ***[id1,slot_name1,poids]*** avec des poids compris entre -10 et 10
Les poids des contraintes doivent se situer entre -10 et 10 :
- si le poids appartient à [0,10] alors la contrainte est positive, par exemple "les stage id1 et id2 doivent être dans le même jury".
- si le poids appartient à [-10,0] alors la contrainte est négative, par exemple "les stage id1 et id2 **ne** doivent **pas** être dans le même jury".
Plus le poids s'éloigne de 0, plus la contrainte est forte.
Voici un exemple de la forme du fichier de contraintes :
```yaml=
nbjury: number
nbslot: number
slotname: name1 name2
metaconstraint :
international_constraint: weight
same_company: weight
internship/internship:
- [id_internship,id_internship_2,weight]
internship/reviewer:
- [id_internship,login_reviewer,weight]
internship/slot:
- [id_internship,slot_name,weight]
```
Si vous ne souhaitez spécifier aucune contrainte internship/internship, internship/reviewer ou internship/slot, il suffit de mettre des crochets [] :
```yaml=
internship/internship: []
internship/reviewer: []
internship/slot: []
```
### **internship_defense.csv**
Ce fichier doit contenir au minimum les colonnes suivantes dans l'ordre donné (cet ordre peut toutefois être modifié dans le fichier **constantes.js** qui se trouve sur le serveur) :
1. ***id*** qui correspond à l'identifiant unique du stage
2. ***login*** qui correspond au login du stagiaire
3. ***apogee***
4. ***last_name*** qui correspond au nom du stagiaire
5. ***first_name*** qui correspond au prénom du stagiaire
6. ***examinator*** qui correspond au login du président du jury associé au stage
7. ***slot*** qui correspond au créneau auquel est affectée la soutenance du stage
8. ***reviewer*** qui correspond au login de la personne chargée de la relecture du rapport de stage
9. ***company*** qui correspond au nom de l'entreprise au sein de laquelle est réalisé le stage
### **internship_wishes.csv**
Ce fichier doit contenir au minimum les colonnes suivantes dans l'ordre donné (cet ordre peut toutefois être modifié dans le fichier **constantes.js** qui se trouve sur le serveur) :
1. ***id*** qui correspond à l'identifiant unique du stage
2. ***reviewer*** qui correspond au login de la personne chargée de la relecture du rapport de stage
3. ***asked*** qui correspond au login d'une personne qui souhaite être affectée à la relecture du rapport de stage
4. ***login*** qui correspond au login du stagiaire
5. ***last_name*** qui correspond au nom du stagiaire
6. ***first_name*** qui correspond au prénom du stagiaire
7. ***group***
8. ***company*** qui correspond au nom de l'entreprise au sein de laquelle est réalisé le stage
9. ***title*** qui correspond au titre du stage
### **reviewers.csv**
Ce fichier doit contenir au minimum les colonnes suivantes dans l'ordre donné (cet ordre peut toutefois être modifié dans le fichier **constantes.js** qui se trouve sur le serveur) :
1. ***login*** qui correspond au login du relecteur
2. ***name*** qui correspond au nom du relecteur
3. ***maxreviews*** qui correspond au nombre maximum de rapports de stage qui peuvent être affectés à un relecteur
4. ***examinator*** qui vaut **1** si le relecteur peut être président de jury et **0** sinon
5. ***international*** qui vaut **1** si le relecteur peut relire des rapports en anglais et **0** sinon
## Importation des fichiers
À partir du menu principal, il y a un tableau contenant la liste des fichiers à importer et le formulaire d'importation pour chaque fichier. Pour importer un fichier, il suffit de cliquer sur le bouton **Browse** correspondant au fichier que l'on souhaite importer. Il suffit ensuite de cliquer sur le bouton **Importer** pour valider l'importation du fichier sur le serveur. Par défaut dans le tableau les cases des fichiers non présents sur le serveur sont en rouge et dès que le fichier est importé la case devient verte. Ensuite dès qu'un fichier déjà importé est réimporté sur le serveur, la précédente version du fichier est écrasée et une alerte s'affiche indiquant que le fichier est bien importé.
:warning: Afin d'assurer le bon fonctionnement de l'application les fichiers mis en ligne doivent avoir le même nom que ceux définis ci-dessus.
:information_source: Lors du chargement de l'application, si tous les fichiers sont présents, un message s'affiche en haut à droite de l'écran pour l'indiquer, ce message s'affiche également pour indiquer le fichier manquant.
# Lancement d'une répartition
Une fois l'importation des fichiers réalisée, il est possible d'exécuter le solveur à partir du bouton **Lancer Solveur** situé dans le menu principal. Cela entraine l'exécution du solveur par le serveur. À l'issue de l'exécution, un message s'affiche sur l'écran de l'utilisateur afin d'indiquer le succès ou l'échec de l'opération. Le message précise la cause de l'erreur s'il y en a une.
# Visualiser une répartition
Une fois l'importation des fichiers réalisée, il est possible de visualiser la répartition, même si celle-ci est partielle. Afin de visualiser une répartition, il suffit de cliquer sur le bouton **Jury 1** ou **Jury 2** ..., correspondant au jury pour lequel on souhaite visualiser la liste des soutenances, l'affichage se présente sous la forme d'un tableau :
| Créneau | id stage | Stagiaire | Stage | Entreprise | Relecteur |
| ------- | -------- | --------- | ----- | ---------- | --------- |
| | | | | | |
Au-dessus de ce tableau il y a un menu déroulant permettant de visualiser le nom du président du jury.
En-dessous de ce tableau se trouve la liste des stages qui ne sont affectés à aucun jury, la liste des stages non affectés apparaît automatiquement dans en dessous du tableau des stages affectés et sur la page d'accueil à partir du moment où il y a des stages non affectés.
# Modification d'une répartition
## Ajout et suppression d'un jury
Une fois l'importation des fichiers réalisée, il est possible d'ajouter ou supprimer un jury de la répartition.
### Ajout d'un jury
Pour ajouter un jury :
1. Il suffit de cliquer sur le bouton **Ajouter un jury** situé sur la ligne de boutons où figurent les jurys
2. La page va automatiquement se recharger et le nouveau jury sera le dernier jury
3. Il suffit ensuite de modifier le nom du président et d'affecter des stages à ce jury en suivant les indications données dans la notice pour chacune de ces opérations.
### Suppression d'un jury
Pour supprimer un jury:
1. Il suffit de cliquer sur le bouton **Supprimer un jury** qui est un menu déroulant
2. Il faut ensuite sélectionner dans le menu déroulant le jury que l'on souhaite supprimer
3. Après la sélection, la page est automatiquement rechargée pour supprimer le jury
4. Les soutenances précédemment affectées à ce jury sont alors visibles dans la liste des stages non affectés.
## Modification du président d'un jury
Pour modifier un président:
1. Il suffit de sélectionner le bouton du jury pour lequel on veut modifier le président
2. Il faut ensuite cliquer sur le menu déroulant contenant la liste des professeurs disponibles pour être présidents
3. En sélectionnant un des professeurs de la liste, celui-ci devient automatiquement le nouveau président du jury sélectionné
:warning: Il est possible de créer des jurys avec des présidents vides, cependant cette répartition n'est visible que depuis l'application. Lors de l'export en HTML ou en CSV les stages de ces jurys sont considérés comme non affectés.
## Modification du relecteur d'un rapport d'un stage
Pour modifier un relecteur:
- Si le stage est déjà affecté à un jury:
1. Il suffit de sélectionner le bouton du jury dans lequel se trouve la soutenance du stage
2. Il faut ensuite trouver le stage dans la liste des stages affichés
3. Puis il faut cliquer sur le menu déroulant contenant la liste des professeurs disponibles pour être relecteur qui se trouve dans la colonne **Relecteur**
4. En sélectionnant un des professeurs de la liste, celui-ci devient automatiquement le nouveau relecteur du stage
- Si le stage est dans la liste des stages non affectés:
1. Il faut trouver le stage dans la liste des stages non affectés
2. Puis il faut répéter les étapes **3**,**4** décrites ci-dessus.
:warning: Il est possible de choisir un relecteur vide, la case du relecteur sera alors vide lors de l'export de la répartition.
## Affectation d'un stage à un jury
Pour affecter une soutenance de stage à un jury à partir de la liste des stages non affectés:
1. Il suffit de sélectionner le jury auquel on veut ajouter le stage
2. Il faut ensuite, par un glisser-déposer, sélectionner le stage dans la liste puis le déplacer jusqu'au tableau des stages affectés au jury
Pour modifier le jury d'un stage déjà affecté à un jury:
3. Il faut sélectionner le jury où se trouve le stage
4. Puis il faut, par un glisser-déposer, sélectionner le stage dans le tableau des stages affectés au jury puis le déplacer jusqu'au tableau des stages non affectés
5. Il faut ensuite répéter les opérations **1**,**2**,**3** décrites ci-dessus pour affecter le stage au nouveau jury
## Modification du créneau de la soutenance d'un stage
Pour modifier le créneau d'une soutenance d'un stage:
1. Il faut d'abord trouver le stage dans les stages affectés ou non affectés
3. Puis il faut sélectionner le nouveau créneau dans le menu déroulant qui se trouve dans la colonne **Créneau** du tableau.
5. Le créneau sera alors défini comme le nouveau créneau de la soutenance.
:warning: Le tri du tableau des stages affectés à un jury ne se fait que lors de la sélection du jury, dès lors si des créneaux sont modifiés, la modification sera immédiatement prise en compte mais les stages resteront à la même place dans le tableau jusqu'à ce qu'on resélectionne le jury.
# Exportation d'une répartition
## Exportation en lecture seule
Il est possible de générer une répartition en lecture seule au format HTML, pour cela il suffit de sélectionner le bouton **Exporter la répartition en HTML** qui se trouve dans le menu principal. Le fichier HTML se présente alors sous la forme d'un tableau contenant les colonnes suivantes :
| id | login | examinator | slot | reviewer |
| -- | ----- | ---------- | ---- | -------- |
| | | | | |
1. ***id*** qui correspond à l'identifiant du stage
2. ***login*** qui correspond au login du stagiaire
3. ***examinator*** qui correspond au login du président du jury auquel le stage est affecté
4. ***slot*** qui correspond au créneau de la soutenance du stage
5. ***reviewer*** qui correspond au login du professeur chargé de la relecture du rapport de stage
## Exportation au format CSV
Il est possible d'exporter la répartition au format CSV, pour cela il suffit de sélectionner le bouton **Exporter la répartition en CSV** qui se trouve dans le menu principal. Il est alors possible de télécharger les deux fichiers qui sont modifiés:
1. **internship_defense.csv**
2. **internship_wishes.csv**
## Sauvegarde d'une répartition en cours
Afin de garantir plus de confort lors de la modification d'une répartition, chaque changement effectué par le client depuis l'application est automatiquement sauvegardé localement ce qui permet de prévenir la perte de la répartition en cas de problème. Le bouton **Mise à jour** du menu principal permet de réinitialiser cette sauvegarde en revenant à la répartition contenue initialement dans les fichiers CSV (cette répartition correspond à la dernière répartition générée par le solveur).
:warning: Dans le cas de problème d'affichage de boutons de manière partielle ou de menus déroulants incomplets, il peut être nécessaire de réinitialiser plusieurs fois la sauvegarde à l'aide du bouton **Mise à jour**.
## Le Bouton **Mise à jour**
Ce bouton a pour but de réinitialiser le stockage local de la répartition pour recharger la répartition contenue dans les fichiers CSV sur le serveur.