eptm_dashboard/data/docs/03-push-escada.md

2.6 KiB
Raw Blame History

Push vers Escada

Le push envoie les modifications locales (table EscadaPending) vers Escadaweb via Selenium.

Page : /escada → "Pousser vers Escada"

Quand un pending est créé ?

Chaque modification d'absence dans l'application crée ou met à jour une entrée dans EscadaPending :

Action utilisateur Pending créé
Marquer P3 comme excusée action=E
Marquer P5 comme non excusée action=N
Retirer une absence (présent) action=clear
Excuse rapide d'une journée (page Fiche) action=E × n

La contrainte d'unicité (apprenti_id, date, periode) garantit qu'une période a au plus un pending. Si on modifie deux fois la même période, le dernier pending écrase le précédent.

Phases du push

Phase 1 : Préparation

scripts/push_to_escada.py :

  1. Lit toutes les entrées de EscadaPending
  2. Groupe par classe pour minimiser les navigations Escada
  3. Lance Selenium

Phase 2 : Exécution Selenium

Pour chaque pending :

  1. Navigue jusqu'à la page d'absences de l'apprenti dans Escadaweb
  2. Trouve la cellule (date × période)
  3. Selon l'action :
    • E : sélectionne "Excusée" dans le dropdown
    • N : sélectionne "Non excusée"
    • clear : remet à blanc (= apprenti présent)
  4. Clique sur Speichern (Enregistrer)
  5. Si OK → supprime l'entrée du EscadaPending
  6. Si erreur → conserve l'entrée et la liste les erreurs dans PUSH_DONE

Phase 3 : Rapport

Le script imprime une ligne PUSH_DONE {"ok": N, "err": [...]} à la fin. L'app la parse et affiche :

  • Nombre d'envois OK
  • Liste des erreurs (chaque erreur mentionne l'apprenti, la date et la période)

Que faire si un push échoue ?

  1. Vérifier les logs (/logs) — l'erreur exacte est tracée.
  2. Causes fréquentes :
    • Session Escada expirée → relancer un Actualiser sur la page Escada (re-login automatique)
    • Apprenti avec un nom différent dans Escada → renommage à faire dans la DB ou côté Escada
    • Page de notation verrouillée par un collègue (Escada utilise des locks pessimistes)
  3. Re-tenter : les pendings restent en file d'attente, un nouveau push les retraitera.

Audit

Chaque push manuel logue qui l'a déclenché : [abs] {user} : Push Escada démarré par {username}. Côté résultat :

  • Push terminé — ok:N erreurs:M dans operations.log

Push automatique via cron

La tâche planifiée de type push ou push_then_sync exécute le même script. Voir la section Tâches planifiées.