Aller au contenu

Vue filtrée pour Administrateur Planificateur Gestionnaire de patrimoine Enseignant Étudiant Tout afficher

Planning et placement

Vérifié contre le produit le .

Domaine Planning & placement — la grille, les trois gestes de placement, le déplacement, l’anti-conflit, l’historique
Durée ~15 min
Niveau complet
Étiquette manuel — glisser-déposer et redimensionnement sont des gestes au pointeur, non scriptables honnêtement

Socle A — le jeu de démonstration. Le montage est sur la préparation commune.

Compte : demo@delacroix.example (administrateur). Le scénario se joue aussi avec erin, la planificatrice, sur le socle B — mais le socle A donne un emploi du temps dense, ce qui rend les conflits observables.

État de départ : la grille de Planification affiche une semaine peuplée de séances planifiées Une occurrence réelle d'un cours, à une date, une heure et dans une salle données — ce qu'un étudiant lit dans son emploi du temps. , et le cours « Algorithmique — TD » n’a aucune séance placée.

# Action Résultat attendu
1.1 Ouvrir Planification une semaine dense ; l’axe des heures à gauche, une colonne par jour du lundi au samedi
1.2 Cliquer « Semaine suivante », puis « Aujourd’hui » la grille change de semaine sans état de chargement visible
1.3 Ouvrir un bloc de séance son infobulle donne l’enseignant, les horaires réels et la salle complète
1.4 Panneau de filtres → « Groupe », choisir une promotion la grille se réduit à ses cours
1.5 Ajouter un filtre « Enseignant » les deux filtres se croisent — l’intersection, pas l’union
1.6 Copier l’adresse, l’ouvrir dans un nouvel onglet semaine et filtres sont restaurés
1.7 Remettre tous les filtres à « Tous » la grille redevient dense
# Action Résultat attendu
2.1 « Créer un cours » → choisir « Algorithmique — TD » le panneau rappelle l’enseignant, l’effectif et la durée
2.2 « Détecter les créneaux éligibles » la grille se colore ; les compteurs annoncent les créneaux possibles et les exclus
2.3 Cliquer une cellule notée, puis « Placer ici », confirmer « Séance créée en brouillon. » ; le bloc apparaît, contour pointillé
2.4 Cliquer une zone libre de la grille, hors de toute bande de trame le dialogue « Placer le cours à horaire libre » s’ouvre, avec l’heure de début et la durée modifiables
2.5 Ajuster la durée à 45 minutes, valider « Séance créée en brouillon. » ; le bloc fait bien 45 minutes
2.6 Glisser verticalement sur une zone libre une bande en pointillés suit le geste ; au relâchement, le même dialogue s’ouvre avec la plage dessinée
2.7 Saisir une durée de 5 minutes « La durée doit être comprise entre 15 et 480 minutes. »
# Action Résultat attendu
3.1 Glisser un bloc vers un autre créneau libre un fantôme suit le pointeur avec « … /100 · … » — le score et la salle de la destination
3.2 Relâcher le dialogue « Déplacer le cours » s’ouvre : origine et destination aux heures réelles, « Score : … → … », et la salle
3.3 Confirmer « Séance déplacée. », avec une action « Annuler » dans le message
3.4 Cliquer « Annuler » « Déplacement annulé — position précédente restaurée. » ; le bloc est revenu
3.5 Sur un cours récurrent, refaire un déplacement le dialogue propose « Cette semaine seulement » ou « Toutes les occurrences à venir »
3.6 Tirer la poignée en bas d’un bloc l’aperçu suit ; au relâchement, « Durée modifiée. »
3.7 « Historique » le panneau « Historique des opérations » liste les gestes, du plus récent au plus ancien, avec leur type

C’est le bloc décisif, et il remplace les vérifications qui passaient autrefois par l’interface de programmation faute d’écran : tout se joue désormais dans la grille.

# Action Résultat attendu
4.1 Aller en semaine 2, basculer l’affichage sur Occupation les plages occupées apparaissent avec leur motif ; B-201 mardi 09:45 en fait partie
4.2 Glisser une séance vers cette plage le fantôme affiche « Destination impossible »
4.3 Relâcher malgré tout « Salle occupée : B-201 · 09:45 – 11:15 »
4.4 Regarder la grille elle n’a pas bougé — aucune écriture n’a eu lieu, rien n’est à défaire
4.5 Tenter de placer une séance sur un créneau où l’enseignant a déjà cours « Enseignant déjà en cours : … · … – … »
4.6 Tenter de placer sur un créneau où le groupe a déjà cours « Groupe déjà en cours : … · … – … »
4.7 Revenir en mode Heatmap et survoler une cellule hachurée l’infobulle nomme la raison dominante de l’exclusion

La réservation de B-201 n’apparaît pas comme un bloc sur la grille — seules les séances y figurent. C’est le mode Occupation qui la rend visible, et le refus qui la nomme.

# Action Résultat attendu
5.1 Noter la salle et le créneau d’une séance posée au bloc 2
5.2 Aller dans Réservation et chercher cette salle sur ce créneau elle n’apparaît pas : un brouillon occupe déjà la salle
5.3 Ouvrir la fiche de cette salle, ajouter une indisponibilité couvrant le créneau l’aperçu compte « 0 réservation(s) et 1 cours impactés »
5.4 Annuler l’indisponibilité, puis annuler la séance depuis la grille la salle redevient disponible dans la recherche

C’est l’unification session / réservation : une séance en brouillon, une séance publiée et une réservation confirmée occupent la salle de la même façon.

  • Aucune mise à jour optimiste. La grille ne change qu’après confirmation du serveur. Un refus laisse donc toujours un écran cohérent — mais un geste réussi paraît une fraction de seconde plus lent qu’ailleurs.
  • Le pré-contrôle du geste est indicatif. Il peut annoncer une destination valable qui sera refusée à l’écriture, si un collègue est passé entre-temps. Seul l’enregistrement fait foi.
  • La touche Alt désactive l’aimantation pendant un geste. Un placement qui « refuse de tomber juste » est souvent un aimant, pas un bug.

Les pièges transverses — environnement, authentification, fraîcheur des données — sont rassemblés sur Les pièges connus.

Ce qui est couvert Story Vue
Grille hebdomadaire, filtres, navigation STORY-025 V10
Panneau de création et détection STORY-026 V11
Glisser-déposer et déplacement STORY-029
Placement à horaire libre, redimensionnement STORY-005, STORY-006
Historique et annulation STORY-030
Anti-conflit, occupation unifiée STORY-013

Couvert par les tests automatisés : apps/api/src/occupancy/course-placement.e2e.spec.ts, apps/api/src/occupancy/free-placement.e2e.spec.ts, apps/api/src/occupancy/session-move.e2e.spec.ts. Les refus de placement et les règles de déplacement y sont couverts côté serveur ; aucun geste au pointeur ne l’est, et c’est la raison d’être de ce scénario.

  • La grille affiche une semaine dense, navigation et filtres croisés fonctionnent
  • Adresse copiée dans un nouvel onglet → semaine et filtres restaurés
  • « Détecter les créneaux éligibles » → la grille se colore
  • « Placer ici »« Séance créée en brouillon. », bloc en pointillés
  • Clic sur zone libre → « Placer le cours à horaire libre », durée modifiable
  • Durée de 5 min → « La durée doit être comprise entre 15 et 480 minutes. »
  • Glisser un bloc → fantôme avec score et salle, puis « Déplacer le cours »
  • « Annuler » dans le message → « Déplacement annulé — position précédente restaurée. »
  • Cours récurrent → choix « Cette semaine seulement » / « Toutes les occurrences à venir »
  • Poignée de redimensionnement → « Durée modifiée. »
  • « Historique » → les opérations listées, la plus récente en haut
  • Mode Occupation, semaine 2 → B-201 mardi 09:45 est occupée
  • Dépôt sur B-201 → « Salle occupée : B-201 · 09:45 – 11:15 » et la grille n’a pas bougé
  • Conflit enseignant → « Enseignant déjà en cours : … »
  • Une séance en brouillon retire la salle de la recherche de réservation
  • Aperçu d’indisponibilité sur ce créneau → « 0 réservation(s) et 1 cours impactés »
Documentation technique source (3)