99 lines
4 KiB
Markdown
99 lines
4 KiB
Markdown
# Paramètres (`/params`)
|
||
|
||
Page admin centralisant toute la configuration applicative. Toutes les valeurs sont persistées dans `data/settings.json` sauf la section « Correspondances classe → profession » qui vit dans son propre fichier `data/profession_mapping.json`.
|
||
|
||
## Sections
|
||
|
||
### Application
|
||
|
||
- **URL de base** : utilisée pour générer les liens dans les emails (reset mot de passe, enrôlement). Ex : `https://dashboard.eptm-automation.ch`. Stocké dans `settings.app_base_url`.
|
||
|
||
### Correspondances classe → profession
|
||
|
||
Mapping `préfixe de classe → profession` utilisé pour pré-remplir le champ « Profession » sur les avis de retenue, et pour `ApprentiFiche.profession`.
|
||
|
||
- Tableau des mappings actuels (suppression possible)
|
||
- Chips jaunes listant les classes en base **sans correspondance** — clic pour pré-remplir le formulaire
|
||
- Bouton « Ajouter / mettre à jour » : insère ou remplace
|
||
- Bouton « Appliquer aux fiches existantes » : recalcule `ApprentiFiche.profession` pour tous les apprentis selon le mapping actuel (logging dans `operations.log`)
|
||
|
||
### Horaires de classe (« Absent toute la journée »)
|
||
|
||
Définit pour chaque classe + chaque jour de la semaine :
|
||
- Le **type de jour** : Théorie / Pratique / Matu / —
|
||
- Les **périodes de cours** (1 à 10)
|
||
|
||
UI : dropdown classe + grille 5 colonnes (Lun → Ven) × 10 cases.
|
||
|
||
Le bouton « Absent toute la journée » sur la fiche apprenti utilise ce mapping pour marquer comme `N` uniquement les périodes correspondantes au jour de la semaine sélectionné. Le **badge** (Théorie/Pratique/Matu) s'affiche aussi dans le panneau d'édition.
|
||
|
||
Stocké dans `settings.class_schedule` :
|
||
```json
|
||
{
|
||
"AUTOMAT 1": {
|
||
"MON": { "type": "theorie", "periods": [1, 2, 3, 4] },
|
||
"TUE": { "type": "pratique", "periods": [5, 6, 7, 8] }
|
||
}
|
||
}
|
||
```
|
||
|
||
### Avis de sanction
|
||
|
||
- **Texte de description par défaut** (champ `TexteDescription` du PDF)
|
||
- **Chef de section** par défaut (champ `CS`)
|
||
|
||
Repris à la création de chaque avis de sanction si l'utilisateur ne saisit rien d'autre.
|
||
|
||
### Configuration email
|
||
|
||
- **Serveur SMTP** + **port**
|
||
- **Login** + **mot de passe** SMTP
|
||
- **Expéditeur** (header From)
|
||
- **Email admin (feedback in-app)** : destinataire des notifications du chat feedback
|
||
|
||
Brevo (smtp-relay.brevo.com) est utilisé en prod.
|
||
|
||
### Connexion Escada (synchro automatique)
|
||
|
||
- **Identifiant Escada** (email Keycloak)
|
||
- **Mot de passe Escada**
|
||
- **Clé secrète 2FA (TOTP)** — format Base32
|
||
|
||
Permettent à la sync automatique (cron) et à la sync manuelle de se connecter sans intervention. Le code TOTP est généré à la volée par `pyotp.TOTP(secret).now()`.
|
||
|
||
> Ces identifiants servent uniquement aux tâches automatiques. Pour l'enrôlement self-service d'un user, c'est l'user qui saisit ses propres creds dans le popup de profil (cf. doc Auth).
|
||
|
||
### Template email
|
||
|
||
Template appliqué à l'envoi de récap d'absences depuis la fiche apprenti :
|
||
|
||
- **Objet** : par défaut `Document EPTM — {nom_complet} ({classe})`
|
||
- **Corps** : par défaut un message court avec `{prenom}` + `{classe}`
|
||
|
||
Variables disponibles : `{prenom}`, `{nom}`, `{nom_complet}`, `{classe}`, `{nb_absences}`, `{nb_excusees}`, `{nb_non_excusees}`, `{nb_a_traiter}`, `{semestre}`, `{date_du_jour}`.
|
||
|
||
## Fichier `data/settings.json`
|
||
|
||
Structure typique :
|
||
|
||
```json
|
||
{
|
||
"app_base_url": "https://dashboard.eptm-automation.ch",
|
||
"texte_sanction": "Selon le règlement de l'EM, ...",
|
||
"chef_section": "Patrick Rausis",
|
||
"smtp_host": "smtp-relay.brevo.com",
|
||
"smtp_port": 587,
|
||
"smtp_login": "...",
|
||
"smtp_password": "...",
|
||
"smtp_sender": "EPTM Automation <noreply@eptm-automation.ch>",
|
||
"feedback_admin_email": "admin@eptm-automation.ch",
|
||
"escada_username": "...",
|
||
"escada_password": "...",
|
||
"totp_secret": "...",
|
||
"email_subject": "Document EPTM — {nom_complet} ({classe})",
|
||
"email_body": "Bonjour {prenom}, ...",
|
||
"class_schedule": { ... }
|
||
}
|
||
```
|
||
|
||
Audit minimal : chaque modification depuis `/params` est sauvegardée d'un coup (toute la clé concernée). Pas de versioning ; un backup ponctuel de `data/settings.json` suffit.
|