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

66 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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](#).