# Absences et emplois du temps (développeurs) Notes/idées pour les développeurs. WIP, en vrac. ## Calendriers et évènements Un calendrier est ici une liste d'évènements, chaque cours étant un évènement. L'évènement comporte: - dates début et fin; - identifiant du groupe d'étudiants concerné (dans la formation, par ex. groupe de TD); - identifiant du module (enseignement): par exemple, l'élément Apogée. - identifiant de l'enseignant concerné. On suppose qu'on a un calendrier par "formation" (`FormSemestre` ScoDoc), identifié par un code (par exemple, code étape Apogée) que l'on appellera `edt_id`. ### Exemple: cas de l'USPN Cet établissement utilise HyperPlanning. Les calendrier sont exportés régulièrement, on a un fichier ics par formation (code Apogée). ```ics BEGIN:VEVENT CATEGORIES:HYPERPLANNING DTSTAMP:20231101T140300Z LAST-MODIFIED:20230905T094241Z UID:Cours-423101-5-BUT2_RT_pa._CYBER-Index-Education DTSTART:20230920T060000Z DTEND:20230920T083000Z SUMMARY;LANGUAGE=fr:TP2 GPR1 - VCYR303 - Services reseaux ava (VCYR303) - 1234 - M. VIENNET EMMANUEL - V2ROM - BUT2 RT pa. ROM - Groupe 1 LOCATION;LANGUAGE=fr:P202 CRIT - P202 CRIT.RESEAUX DESCRIPTION;LANGUAGE=fr:Matière : VCYR303 - Services reseaux ava (VCYR303)\nEnseignant : 1234 - M. VIENNET EMMANUEL\nPromotion : V2ROM - BUT2 RT pa. ROM\nTD : Groupe 1\nSalle : P202 CRIT - P202 CRIT.RESEAUX\nMémo : TP2 GPR1\n X-ALT-DESC;FMTTYPE=text/html:Matière : VCYR303 - Services reseaux ava (VCYR303)
Enseignant : 1234 - M. VIENNET EMMANUEL
Promotion : V2ROM - BUT2 RT pa. ROM
TD : Groupe 1
Salle : P202 CRIT - P202 CRIT.RESEAUX
Mémo : TP2 GPR1
END:VEVENT ``` On a ici: - identifiant de la formation: dans le nom du fichier calendrier (ici `V2CYB.ics`); - identifiant du groupe: dans `SUMMARY`, `* - ` - identifiant du module: on a le code `VCYR303` à trois endroits: `SUMMARY`, `DESCRIPTION`, `X-ALT-DESC`. - identifiant de l'enseignant: `SUMMARY`, `DESCRIPTION`, `X-ALT-DESC`. ## Transcodage des identifiants ScoDoc n'utilise évidemment pas les mêmes identifiants que ceux trouvés dans les calendriers. ### "Formation" Il s'agit du `FormSemestre`. On a déjà les codes étapes Apogée. On proposera un champs "identifiant emploi du temps" (`edt_id`), et à défaut on utilisera le premier code étape Apogée. ### Groupes Chaque groupe ScoDoc peut indiquer son ou ses identifiants edt (`edt_id`). A défaut, on utilisera son nom (il sera donc conseillé aux utilisateurs d'adopter les mêmes noms de groupes dans ScoDoc et dans leur logiciel d'emploi du temps). ### Module Ajouter `etd_id` dans `Module`, avec utilisation de `code_apogee` si absent. ### Enseignant `edt_id` (dans l'exemple précédent `"1234"`), doit être renseigné dans ScoDoc. A l'USPN, on peut récupérer cette information dans le CAS (dans `supannEmpId` et `employeeNumber`). Champ `edt_id` dans `User`. Affecté par l'authentification CAS, qui peut récupérer une information dans la réponse XML du serveur CAS, grâce à l'expression `cas_edt_id_from_xml_regexp` de la config générale. SuperAdmin peut aussi forcer manuellement l'`edt_id` des comptes utilisateurs. ## Architecture technique ### Principes généraux - ScoDoc consomme la donnée "emploi du temps" mais n'a pas vocation à la republier (on ne proposera aucune API pour ce faire, les clients intéressés devant s'adresser à l'API (ou équivalent) du logiciel d'emplois du temps). - ScoDoc est agnostique sur le logiciel d'emploi du temps et n'effectue aucune requête API vers celui-ci. Il se contente de consommer des calendriers (ics) copiés (par exemple chaque heure) dans un répertoire accessible au serveur ScoDoc. - Chaque `FormSemestre` va chercher à s'associer à un (et un seul ?) calendrier. ## Fonctions proposées aux utilisateurs L'objectif est de simplifier la saisie des absences: afficher l'emploi du temps par semaine, et permettre la saisie des absences d'un cours donné en ayant automatiquement pré-rempli le module, la date, l'heure de début et l'heure de fin. En option, restreindre la saisie des absences par les enseignants aux seules plages/groupes qui les concernent. !!! note "Voir aussi" - Emplois du temps: [doc utilisateur](EmploisDuTemps.md) - [Contacts](Contact.md)