Commit graph

25 commits

Author SHA1 Message Date
f1190566a6 Initial version 2026-05-12 15:30:28 +02:00
ea8954bc6f ajout des tuiles notes insuf. 2026-05-12 09:46:18 +02:00
eb98ec273c ajout du chat 2026-05-12 09:09:07 +02:00
9188e6ba1e import représentant légal 2026-05-11 21:27:13 +02:00
7431339ce5 ajouté import du statut des désavantages, affichage de toutes les notes du BN. 2026-05-11 19:19:26 +02:00
38189deb0f clean script 2026-05-11 15:45:44 +02:00
610e37d2a1 avis de sanction dans fiche apprenti 2026-05-11 15:22:55 +02:00
ef6072112b update cron 2026-05-11 14:45:42 +02:00
6d1b7c8044 retenue: avis PDF + notices Escada + mapping profession
- nouvelle page /retenue : sélection apprenti, date retenue, date du
  problème, motif (3 cases mutex), branche (autocomplete + saisie libre
  depuis NotesExamen), remarque. Génération PDF basée sur le template
  AcroForm officiel, séparation des 3 widgets Date partagés en 3 champs
  distincts pour ne remplir que celui de la case cochée. Téléchargement
  ou envoi par email (3 destinataires).
- profession : nouveau champ ApprentiFiche.profession, dérivé du préfixe
  de classe via mapping configurable dans Paramètres
  ("AUTOMAT" → "Automaticien CFC" par défaut). Section dédiée avec
  classes orphelines détectées automatiquement.
- notices Escada : nouvelle table Notice (apprenti, titre, remarque,
  date, status). Checkbox "Ajouter automatiquement une notice sur
  Escada" sur /retenue qui crée une entrée pending. Bloc dédié sur
  /escada listant les pending, bouton "Pousser les notices" qui lance
  scripts/push_notices.py (Playwright : navigation Classes → Élèves →
  Notices → Ajouter, fill date / titre / remarque, vérification post-save,
  suppression DB si OK, marquage failed sinon). Nouveau task_kind "push_notices"
  dans le cron pour exécution planifiée.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 11:24:15 +02:00
6a69f36e83 update fonts 2026-05-11 09:00:56 +02:00
54631adff6 chore: refresh cache hrefs des classes Escada
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 08:45:06 +02:00
e6e24e4d2d ui: panneau d'édition vertical par colonnes + scroll horizontal des tables BN/notes
- panneau d'édition des absences : P1-5 dans la colonne gauche, P6-10
  à droite (au lieu d'un grid à 2 colonnes en flux ligne par ligne).
  Sur mobile, les deux colonnes s'empilent.
- tables BN et Notes d'examen : ajout d'un min-width forcé pour
  qu'elles débordent de la largeur d'un écran mobile, wrapper
  overflow-x:auto fonctionnel pour le swipe horizontal.
- exclu les tables de la règle CSS .content-area * { min-width: 0 }
  pour éviter la casse caractère par caractère du contenu cellule.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 20:32:53 +02:00
43a2196150 auth: flow email pour mdp + page profil + restriction d'accès par classe
- création de compte par admin envoie un email avec lien de définition (7j),
  bouton "Reset mdp" pour renvoyer un lien (24h). Plus aucun admin ne peut
  modifier directement le mdp d'un user (tout passe par les liens email).
- nouvelle page /password-set publique (validation token, formulaire, hash
  bcrypt) au style aligné sur /login, avec emails multipart texte+HTML.
- nouvelle page /profile (changement mdp avec ancien, reset 2FA, avatar,
  infos), accessible via dropdown sur le widget user en bas de sidebar.
- restriction d'accès par utilisateur : champ allowed_classes dans auth.yaml,
  multi-select dans la page Users, filtrage cross-page (KPIs, sanctions,
  classes, apprentis, navigations cross-page, génération PDF avis).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 19:52:10 +02:00
41c050d2d4 tuiles sanction et webmanifest 2026-05-10 19:11:25 +02:00
f17041be18 upgrade css + ajout documentation 2026-05-10 17:02:21 +02:00
ee4e212f7d accents corrigés 2026-05-10 16:06:58 +02:00
f60cbf1b1c sync escada : gestion fine des pendings + détection orphelines
- importer.py : nouvelle logique pour les 4 cas d'absence × pending :
  * abs en PDF + pending modify : pending wins (sans force) / override (force)
  * abs en PDF + pas en DB + pending action=clear : respecte la suppression
    locale (sans force) / recrée l'abs (force)
  * orpheline (DB sans PDF) sans pending : supprimée + comptée + détaillée
  * orpheline avec pending : conservée (sans force) / supprimée (force)
- importer.py : query orpheline par classe + fenêtre de dates du PDF
  (couvre les abs locales avec import_id=None)
- run_imports.py : remonte orphelines + pending_skipped dans res_abs
- notifier.py : niveau detailed inclut absences supprimées par classe
  + détail des orphelines (max 5 par classe)
- escada.py : sépare cache disque (toutes classes pour matching Matu)
  vs liste UI (filtrée MP/MI/Formation)
- escada.py : timeout polling import passe de 60s à 15min
- escada.py : retire mode test push, fix bouton Actualiser bloqué sans
  classe sélectionnée
- cron.py : reset last_run_at à l'activation d'un job pour relance
  immédiate au prochain tick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 15:24:43 +02:00
4d3e49ff64 added cron and notification telegram 2026-05-10 12:11:42 +02:00
23e0b2bf60 page apprentis ok 2026-05-10 10:57:28 +02:00
129ca39e2d avatars 2026-05-10 10:07:56 +02:00
096dfd727b import escada ok 2026-05-09 23:27:46 +02:00
0182188de5 chore: untrack runtime cache from git 2026-05-09 23:27:17 +02:00
d468ec32c9 chore: ignore runtime data (browser_profile, logs, pdfs) 2026-05-09 23:27:17 +02:00
360e8e02a7 main layout ok 2026-05-08 00:34:51 +02:00
d812eabdbd mise en route server avec dev 2026-05-07 23:43:05 +02:00