eptm_dashboard/docs/04-edition-absences.md

5.6 KiB
Raw Blame History

Édition des absences

Page : « Apprentis » (/fiche)

Sélectionner un apprenti

Le sélecteur en haut de la page propose une recherche en direct : tape une partie du nom, prénom ou classe pour filtrer.

Raccourcis :

  • / ouvre directement le sélecteur
  • Entrée sélectionne le premier résultat filtré
  • Échap ferme la recherche

KPIs et bandeau d'actions

Sous le sélecteur, 3 cartes KPI :

  • Périodes d'absence : total
  • Périodes à excuser : non encore traitées
  • Absences : nombre de blocs ; rouge avec libellé « Avis de sanction » dès le quota EM atteint

Sous les KPIs, un bandeau d'actions :

  • PDF absences / PDF bulletin / PDF notes (téléchargement)
  • Créer un avis de retenue (orange) → ouvre la modale retenue pré-remplie
  • Créer un avis de sanction (rouge) → ouvre la modale sanction pré-remplie

Ces boutons sont identiques sur la page « Classes », par carte apprenti.

Calendrier mensuel

Chaque cellule représente un jour du mois. Les couleurs indiquent l'état :

Couleur de fond Signification
Blanc Aucune absence
Vert clair Toutes les absences sont excusées
Rose Au moins une absence non excusée
Bleu Jour sélectionné en édition
Bleu pâle Aujourd'hui

Les nombres dans les cellules :

  • « 2 ⚠️ 1 » → 2 absences au total dont 1 non excusée
  • « 5 » → 5 absences toutes excusées

Cliquer sur un jour avec absences (ou un autre jour) ouvre le panneau d'édition.

Panneau d'édition

Badge type de jour

À côté du titre « Édition du {date} » s'affiche un badge coloré indiquant le type de jour pour cette classe (selon le mapping défini en /params) :

  • 🔵 Théorie (bleu)
  • 🟠 Pratique (orange)
  • 🟣 Matu (violet)
  • (rien) si aucun type configuré

Périodes

10 lignes (P1 à P10) avec un segmented control à 3 boutons :

  • Présent (gris) — l'apprenti était là
  • E (orange) — Excusée
  • N (rouge) — Non excusée

Un seul clic suffit. Le bouton Enregistrer sauve toutes les modifications de la journée d'un coup. Le panneau reste ouvert après l'enregistrement pour permettre un éventuel ajustement.

Actions rapides

  • Absent toute la journée (rouge) — met à N uniquement les périodes définies dans l'horaire de la classe pour le jour de la semaine sélectionné (cf. ci-dessous).
    • Bouton grisé + libellé « Absent toute la journée (Données chronoplan manquantes) » si l'horaire n'est pas configuré pour ce (classe × jour).
  • Excuser toutes les périodes (vert) — bascule visuellement toutes les N en E. N'enregistre pas en DB tant qu'on ne clique pas sur Enregistrer.

Excuse rapide (« Valider toutes les absences d'une journée »)

Sous le calendrier, un bandeau jaune liste les jours qui ont au moins une absence non encore traitée (statut a_traiter). Cliquer sur un de ces boutons excuse toutes les absences à traiter de ce jour-là en une seule action.

Envoyer par email

Un bloc « Envoyer par email » permet d'envoyer le récap (et éventuellement le bulletin / les notes en pièces jointes) à l'apprenti, au formateur ou à une adresse libre. Objet et corps utilisent le template configurable en /params → Template email (variables {prenom}, {nom_complet}, {classe}, etc.).

Horaire de classe (« chronoplan »)

Configuré en Paramètres → Horaires de classe :

  • Sélection d'une classe (dropdown alimenté par les classes en base)
  • Pour chaque jour (Lun → Ven) :
    • Sélecteur de type de jour : Théorie / Pratique / Matu / —
    • Grille de 10 cases (P1 → P10), cliquables (rouge = active)
  • Bouton « Enregistrer l'horaire »

Stocké dans data/settings.json sous la clé class_schedule :

"AUTOMAT 1": {
  "MON": { "type": "theorie",  "periods": [1, 2, 3, 4] },
  "TUE": { "type": "pratique", "periods": [5, 6, 7, 8] },
  "WED": { "type": "matu",     "periods": [1, 2] }
}

Le bouton « Absent toute la journée » dans la fiche apprenti lit cette config en fonction de apprenti.classe + jour de la semaine de la date sélectionnée.

Page : « Classes » (/classe)

Sélection de classe

Même principe que pour les apprentis : recherche en direct avec /, Entrée, Échap.

Cartes apprenti

Chaque apprenti de la classe a une carte avec :

  • Nom + lien vers sa fiche complète
  • Badge « Sanction » si quota atteint (≥5 absences brutes en blocs, classes EM uniquement)
  • KPIs identiques à la fiche apprenti (3 cartes : Périodes d'absence, Périodes à excuser, Absences)
  • Bandeau d'actions identique : PDF absences/bulletin/notes + Créer avis de retenue + Créer avis de sanction
  • Onglets BN / Notes d'examen / Notices pour visualiser

Audit des modifications

Chaque modification d'absence est tracée dans data/logs/operations.log :

[14:32:01] [abs] prof.demo : Dupont Marc (1MAB1) — 04.02.2026 P6 : N → E
[14:32:01] [abs] prof.demo : Dupont Marc (1MAB1) — 04.02.2026 P6 : N → E

Visible aussi sur la page /logs. Le champ updated_by de la table Absence enregistre le dernier utilisateur ayant modifié.

Effet de chaque modification

  1. La table Absence est mise à jour (ou créée/supprimée)
  2. Une entrée EscadaPending est ajoutée pour le push ultérieur vers Escada
  3. Un toast de confirmation s'affiche
  4. Une ligne est ajoutée à operations.log