Aller au contenu

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

Placement d'une séance

Vérifié contre le produit le .

Route de l’application : /planning

Le placement L'action de poser un cours à un horaire et dans une salle — le geste central du métier de planificateur. est le geste central du produit : poser une séance 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. sur la grille, la déplacer, changer sa durée, l’annuler. Tout s’y fait en brouillon, tout est annulable, et rien ne s’écrase silencieusement : quand l’application refuse, elle dit qui occupe la place et jusqu’à quand.

Permission requise : Modifier le planning planning.edit .

La portent Administrateur, Planificateur — plus, le cas échéant, les rôles personnalisés de votre établissement qui la contiennent.

Sans cette permission, l'entrée n'existe pas dans le menu. Elle n'y figure ni grisée ni cadenassée : la navigation est filtrée sur les droits résolus, pas désactivée. Une section absente n'est donc pas une panne — et au tout premier affichage, le menu peut être plus court une fraction de seconde, le temps que les permissions arrivent.

Une permission peut être limitée à certains campus ou formations. Dans ce cas l'écran s'ouvre, mais les ressources hors périmètre en sont absentes — voir Portée.

Tous les gestes de cette page demandent la même permission. Une exception à l’intérieur du panneau : le bouton « Nouveau cours » demande Gérer le référentiel referential.manage — sans elle, on peut placer les cours existants, pas en créer.

Le contrôle affiché n’est qu’un affichage : l’API reste l’autorité. Un bouton absent n’est pas la protection, c’est sa conséquence.

Ouvert par le bouton du même nom, il reste à droite de la grille pendant qu’on explore — ce n’est pas une fenêtre modale.

  • Le sélecteur « Cours à placer », avec le rappel « Hugo Martin · 32 étudiants · 90 min » sous le cours choisi.
  • Le bouton « Nouveau cours », si la permission le permet.
  • Le bouton « Détecter les créneaux éligibles », actif dès qu’un cours est choisi.
  • Une fois la détection lancée : les compteurs « 24 créneaux possibles » et « 6 exclus », la note de récurrence le cas échéant, et « Voir le détail des exclusions » — qui déplie une ligne par créneau refusé, avec sa raison dominante.
  • En dessous, le classement « Meilleurs créneaux », décrit sur Heatmap et score de créneau.

Le panneau ouvert arme les gestes de création : tant qu’il est fermé, un clic sur une zone libre de la grille ne crée rien.

Un geste ne tombe pas n’importe où. Il est aimanté :

  • sur le pas de granularité de l’établissement — 15 minutes par défaut ;
  • sur les bords de la trame et sur les bords des séances voisines, pour coller sans chevaucher.

La touche Alt, maintenue pendant le geste, désactive les aimants et rend la minute libre à l’intérieur du pas de granularité.

  • Un fantôme suit le pointeur pendant un glisser-déposer et porte le score et la salle de la destination : « 92/100 · B-204 ». Sur une destination refusée, il porte « Destination impossible » et la raison.
  • Une bande en pointillés dessine la création en cours ; son cadre change selon que la plage est acceptable ou non.
  • Le bloc d’origine reste en place, estompé, tant que le geste n’a pas abouti.

Trois chemins, selon d’où l’on part.

Geste Ce qui se passe Le dialogue qui confirme
Clic sur une cellule notée, en mode détection, puis « Placer ici » dans le détail la séance prend le créneau et la salle proposée « Placer le cours »
Clic sur une zone libre de la grille, panneau ouvert la durée de référence du cours se pose à la minute cliquée « Placer le cours à horaire libre »
Glissé vertical sur une zone libre la plage dessinée devient la durée de la séance « Placer le cours à horaire libre »

« Placer le cours » annonce « Salle proposée : B-204 — Amphithéâtre Nord », « Score : 92/100 », et le nombre de séances qui seront créées : « 1 séance sera créée en brouillon. » ou « 12 séances seront créées en brouillon (récurrence). »

« Placer le cours à horaire libre » va plus loin : l’heure de début et la durée y sont modifiables, ce qui rend le placement libre atteignable entièrement au clavier, sans le moindre geste de souris. La salle proposée n’y vient pas de la heatmap — elle vient de la liste des salles réellement libres sur l’intervalle exact, recalculée à chaque modification de la fenêtre. La durée est bornée entre 15 et 480 minutes.

Glisser un bloc, au pointeur ou au clavier — Espace pour saisir, les flèches pour viser, Espace pour déposer, Échap pour annuler. Les flèches haut et bas ajustent d’un pas, Maj + flèches saute au repère suivant, les flèches gauche et droite changent de jour. Le lecteur d’écran entend la destination visée et son motif de refus quand elle est invalide.

Le dépôt ouvre « Déplacer le cours », qui montre :

  • l’origine et la destination aux heures réelles ;
  • « Score : 78 → 92 », l’avant et l’après ;
  • « Salle : A-101 → B-204 », ou « Salle : B-204 (inchangée) » ;
  • pour un cours récurrent, « Portée du déplacement » : « Cette semaine seulement » ou « Toutes les occurrences à venir », cette dernière accompagnée de « Score agrégé — la pire semaine de la série. »

Un déplacement accepte la salle proposée et relâche donc un éventuel verrouillage manuel de salle.

Une destination hors trame ajoute « Cible hors trame — le score sera recalculé après le déplacement. » : les candidats notés restent ancrés sur les débuts de trame, une position libre n’a donc pas de score d’avance.

La poignée en bas d’un bloc redimensionne la séance. Elle est utilisable au clavier : « Redimensionner la séance (08:00 – 09:30) — flèches pour ajuster d’un pas, Entrée pour valider, Échap pour annuler ». Le redimensionnement ne touche qu’une occurrence ; il ne modifie jamais la durée de référence du cours.

Le bouton « Salles auto » ouvre un aperçu avant d’agir : « Chaque séance brouillon non verrouillée reçoit la salle au meilleur score, les cours les plus contraints d’abord. Les salles forcées ne sont jamais touchées. » La portée est « Semaine 12 » ou « Tout le planning », et le récapitulatif chiffre les quatre issues : « 18 réaffectation(s) · 7 déjà optimale(s) · 3 verrouillée(s) · 2 sans solution ». Rien ne s’applique avant « Attribuer 18 salle(s) ».

Dans le détail d’un créneau, la bascule « Auto (meilleure) » / « Forcer ». Forcer une salle la verrouille : le badge « Salle verrouillée » apparaît sur la séance, et ni l’attribution automatique ni le solveur n’y toucheront plus. Voir Pastilles de contrainte et explicabilité.

Chaque geste réussi ouvre un message avec une action « Annuler ». Passé ce message, le bouton « Historique » ouvre le panneau « Historique des opérations » : « Opérations de planification, de la plus récente à la plus ancienne. Seule la dernière opération non publiée est annulable. » Les opérations y sont typées — « Placement », « Déplacement », « Annulation », « Publication ».

C’est ce que cette page doit rendre limpide. Un refus arrive à trois moments distincts, et ce ne sont pas les mêmes messages.

Deux filets travaillent en parallèle.

  • Le contrôle local, immédiat : il voit les séances affichées à l’écran. Salle occupée, enseignant déjà en cours, groupe déjà en cours, cours qui a déjà une séance sur la plage.
  • Le contrôle serveur, déclenché après un court instant d’immobilité : il voit ce que l’écran ne montre pas — indisponibilités de salle Une fermeture temporaire d'un espace — travaux, maintenance, réquisition — pendant laquelle plus rien ne peut y être posé. , réservations L'occupation d'une salle par une personne pour un usage ponctuel, en dehors des cours — une réunion, une soutenance, du travail en groupe. , périodes gelées, occupations d’un périmètre non affiché.

Le fantôme du geste passe alors à « Destination impossible » et porte la raison. Aucun de ces deux contrôles n’est l’autorité : ils préviennent, ils n’engagent pas.

Une destination marquée invalide n’envoie aucune requête : le refus est montré là où le geste a eu lieu, sous forme de message.

Message d’en-tête Quand
« Conflit détecté à l’écriture — la détection a été relancée. » à la création d’une séance
« Quelqu’un a placé un cours ici entre-temps — la grille a été rafraîchie. » à un déplacement
« Redimensionnement refusé — l’espace n’est pas libre. » à un changement de durée

3. Le motif — toujours qui, et de quand à quand

Section intitulée « 3. Le motif — toujours qui, et de quand à quand »

Le détail du message ne dit jamais « interdit » : il nomme l’occupant et cite ses heures réelles.

Message Ce qu’il désigne
« Salle occupée : B-201 · 09:45 – 11:15 » une séance ou une réservation tient déjà la salle
« Enseignant déjà en cours : Hugo Martin · 09:45 – 11:15 » l’enseignant est ailleurs sur la plage
« Groupe déjà en cours : L1 Informatique · 09:45 – 11:15 » le groupe a déjà cours
« Ce cours a déjà une séance : 09:45 – 11:15 » le cours lui-même occupe la plage
« Salle indisponible : 09:45 – 11:15 » maintenance ou fermeture déclarée sur la salle
« Période gelée » la journée est gelée : plus aucune écriture n’y est acceptée
« 2 occupation(s) en conflit avec ce placement. Choisissez un autre créneau. » repli quand aucune occupation ne peut être nommée

Ce que l’utilisateur doit faire, dans l’ordre :

  1. lire l’heure citée — un chevauchement de dix minutes se résout en décalant, pas en changeant de jour ;
  2. basculer en mode Occupation pour voir ce qui occupe réellement la plage ;
  3. ouvrir le détail du créneau si la cellule est hachurée : la raison affichée au survol n’est que la dominante ;
  4. changer de salle avant de changer de créneau, quand le refus porte sur la salle : le classement propose jusqu’à trois solutions de remplacement.

Une séance ne peut pas prendre la place d’une réservation existante. C’est structurel : la contrainte d’anti-conflit est une contrainte système, elle n’a pas de poids et elle ne peut pas être désactivée — l’écran des contraintes le dit lui-même : « Contrainte système : l’anti-conflit est structurel, elle ne peut pas être désactivée. »

Le décor de démonstration installe exactement ce cas. La salle B-201 porte une réservation confirmée intitulée « Conseil pédagogique », en semaine 2, mardi à 09:45, sur 90 minutes. Essayez d’y déposer une séance :

  1. en mode Occupation, la plage apparaît avec son semis de points ;
  2. le fantôme du geste affiche « Destination impossible » ;
  3. si vous relâchez malgré tout, le message porte « Salle occupée : B-201 · 09:45 – 11:15 » ;
  4. la grille n’a pas bougé : il n’y a pas de mise à jour optimiste, donc rien à défaire.
Ce que vous voyez Ce que ça veut dire
« Sélectionnez d’abord un cours dans le panneau “Créer un cours”. » le geste de création a bien été capté, il n’a simplement rien à poser
« Recherche des salles libres… » puis « Aucune salle libre sur cet horaire. » placement libre : aucune salle n’est disponible sur l’intervalle exact ; le bouton de confirmation reste inactif
« La durée doit être comprise entre 15 et 480 minutes. » la durée saisie sort des bornes
Le bloc revient à sa place sans message le geste a été relâché hors de la grille ou sur sa propre position : rien n’a été demandé
« Déplacement annulé — position précédente restaurée. » l’annulation depuis le message de succès a fonctionné
« Impossible d’annuler — un geste plus récent a eu lieu. » une autre opération est passée par-dessus : passez par « Historique »
« Impossible d’annuler : le créneau a été repris entre-temps. » la position d’origine n’est plus libre
« Les opérations publiées ne sont plus annulables — passez par une republication corrective. » ce qui est publié se corrige, il ne se défait pas
« Cette séance n’existe plus sur la grille. » vous arrivez par un lien vers une séance déplacée ou annulée depuis
« Le placement a échoué. », « Le déplacement a échoué. », « Le redimensionnement a échoué. » erreur non identifiée — ni conflit nommé, ni refus métier
« Aucune opération enregistrée. » l’historique est vide sur cet établissement
Un geste réussit alors que le fantôme le disait impossible le contrôle serveur n’avait pas encore répondu : il est indicatif, seul l’enregistrement fait foi

Sur l’absence de mise à jour optimiste : la grille ne change jamais avant la confirmation du serveur. C’est plus lent d’une fraction de seconde, et cela garantit qu’un refus laisse toujours un écran cohérent — il n’y a rien à annuler visuellement.

Sur le sans-droit : sans Modifier le planning planning.edit , aucun de ces gestes n’existe, puisque l’écran lui-même renvoie à l’accueil. Sans Gérer le référentiel referential.manage , le panneau fonctionne mais ne propose pas « Nouveau cours » : on place ce qui existe.

Sur le hors-périmètre : un planificateur limité à un campus peut aujourd’hui déplacer une séance de l’autre campus — la portée du rôle n’est pas appliquée sur cet écran. Le détail de ce point est sur Grille de planning.

Documentation technique source (2)