forked from FroSteel/Planification
193 lines
7.9 KiB
Markdown
193 lines
7.9 KiB
Markdown
# Planification — Extension EasyVista Canton de Vaud
|
|
|
|
Extension Chrome / Firefox pour visualiser de manière claire et rapide le planning des techniciens DGNSI (Canton de Vaud) dans EasyVista.
|
|
|
|
## Aperçu rapide
|
|
|
|
- **Auteur** : Quentin Rouiller (QRO)
|
|
- **Cible** : techniciens DGNSI (Canton de Vaud), EasyVista (`itsma.etat-de-vaud.ch` / `itsma.vd.ch`)
|
|
- **Démarrage projet** : jeudi 16 avril 2026
|
|
- **Version actuelle** : `v2026.5.37`
|
|
- **Manifest** : V3 (Chrome/Edge/Firefox)
|
|
- **Format** : `.zip` (Chromium) + `.xpi` signé (Firefox)
|
|
|
|
## Fonctionnalités principales
|
|
|
|
### Vue planning
|
|
- Affichage des interventions et réservations groupées par technicien
|
|
- Horaires, contact, lieu, catégorie, statut visibles d'un coup d'œil
|
|
- 8 techniciens hardcodés (équipe IT canton)
|
|
- Cache local pour réduire les requêtes serveur
|
|
|
|
### Modes d'affichage
|
|
- **Vue classique** (depuis v1.0.0) : cards en grille, mode compact écran 24" (depuis v2026.5.30)
|
|
- **Vue horizontale** (depuis v2026.5.32) : timeline par tech, sidebar verticale (depuis v2026.5.36)
|
|
- Toggle Vue classique ↔ Vue horizontale via bouton ⊞ dans popup user-badge
|
|
- Persistance localStorage (`view_mode`)
|
|
|
|
### Tooltips et popups
|
|
- Tooltips au survol (hover) sur chaque intervention
|
|
- Popups épinglables (📌) pour garder ouvert (depuis v4.1.3)
|
|
- Popups timeline persistantes au clic (depuis v4.2.3)
|
|
- Drag-and-drop des popups épinglés (depuis v2026.5.19)
|
|
- Safe area : popups jamais cachés sous topbar/dock (depuis v2026.5.20)
|
|
- Position auto adaptative (4 candidats : droite/gauche/dessous/dessus)
|
|
|
|
### Classification des absences (depuis v2026.5.27)
|
|
- **Maladie/Accident** : indigo `#4338ca`
|
|
- **Congé / Congés** : cyan `#06b6d4` (suffixe `s` adaptatif)
|
|
- **Pompier** : rouge `#b03030`
|
|
- Badge + barre gauche colorée + dégradé fond
|
|
- Absence récurrente Pillonel vendredi : cyan (depuis v2026.5.30)
|
|
|
|
### User et session
|
|
- Badge user avec photo/initiales en topbar
|
|
- Badge cliquable (depuis v2026.5.26) : popup avec ⚙ Paramètres + ⊞ Vue + compteur session MM:SS
|
|
- Retry automatique en cas d'échec fetch user (60s, max 10 essais)
|
|
- Compteur de session EasyVista (tick 1s, depuis v5.0.0)
|
|
- Reconnexion automatique
|
|
|
|
### Admin et configuration
|
|
- Mode admin caché : bouton ⚙ Paramètres dans popup user-badge (depuis v2026.5.25, remplace les 5 clics secrets sur le titre)
|
|
- Configuration persistée dans `localStorage` (`admin_config`)
|
|
- Catégories interventions personnalisables (livraison/recup/remplacement/incident/rollout/reservation/autre)
|
|
|
|
## Versionning — historique et conventions
|
|
|
|
L'extension a connu **3 systèmes de versionning successifs** :
|
|
|
|
| Période | Format | Exemple |
|
|
|---|---|---|
|
|
| 16-17 avril 2026 | Versions de base | `1.0.0`, `2.0.0`, `3.0.0` |
|
|
| 18-20 avril 2026 | SemVer classique | `4.1.3`, `4.2.8`, `5.0.12` |
|
|
| 21 avril 2026 → maintenant | **`ANNÉE.MAJEURE.PATCH`** | `2026.5.16` → `2026.5.37` |
|
|
|
|
### Format actuel : `ANNÉE.MAJEURE.PATCH`
|
|
|
|
À partir de la **v2026.5.16** (21 avril 2026), l'extension utilise le schéma suivant :
|
|
|
|
| Position | Sens | Quand ça change |
|
|
|---|---|---|
|
|
| `2026` | **Année** | À chaque nouvelle année calendaire |
|
|
| `5` | **Majeure** | À chaque **gros changement / ajout important** (refonte, nouvelle feature majeure, bump volontaire) |
|
|
| `37` | **Patch** | À **chaque livraison** dans la majeure courante (corrections, ajustements, petites features) |
|
|
|
|
Exemples :
|
|
- `2026.5.16` → `2026.5.17` : petite correction ou ajustement (patch)
|
|
- `2026.5.37` → `2026.6.0` : refonte majeure (par exemple nouvelle vue, nouvelle architecture)
|
|
- `2026.x.y` → `2027.0.0` : passage à la nouvelle année
|
|
|
|
Le numéro de **majeure** n'est **pas** un mois et **pas** un chiffre lié au calendrier — c'est un compteur de versions importantes propre au projet (la `5` actuelle continue le `5.x` qui précédait, repris tel quel lors du passage au format annuel).
|
|
|
|
⚠️ **Important** : `v2026.5.16` succède chronologiquement à `v5.0.12`, malgré le numéro qui semble plus petit. Le préfixe `2026` indique l'année.
|
|
|
|
## Versions notables
|
|
|
|
### `v2026.5.37` (latest, 25 avril 2026) — Refonte vue horizontale
|
|
- Topbar supprimée en vue horizontale, tout passe en sidebar
|
|
- User-badge + titre + bouton "Aujourd'hui" + date/heure + sélecteur + flèches + stats dans sidebar
|
|
- Banderole pompier masquée (badge + barre rouge gauche conservés)
|
|
|
|
### `v2026.5.36` — Sidebar verticale
|
|
- Wrapper flex-row `#horizontal-wrapper` [sidebar 200px] + [main]
|
|
- Déplacement physique des éléments via `ELEMENTS_TO_RELOCATE`
|
|
- Restauration propre en vue classique
|
|
|
|
### `v2026.5.32` — Vue horizontale togglable
|
|
- Bouton ⊞ "Vue" dans popup user-badge
|
|
- Chaque tech = 1 ligne horizontale compacte
|
|
- localStorage `view_mode`
|
|
|
|
### `v2026.5.27` — Classification absences
|
|
- ABSENCE_LABELS : `^(cong[ée]s|maladie|pompier)$`
|
|
- Couleurs catégories
|
|
- Topbar une ligne : "Jeudi 23.04.26 • 21:55"
|
|
|
|
### `v4.2.3` — Grande popup timeline persistante
|
|
- Clic segment timeline = popup persistante
|
|
- Hover = popup qui suit la souris
|
|
|
|
### `v4.1.3` — Tooltips épinglables
|
|
- Introduction de `pinTooltip`
|
|
|
|
### `v1.0.0` (16 avril 2026) — Initiale
|
|
- Premier viewer EasyVista pour le canton
|
|
|
|
Voir [CHANGELOG.md](CHANGELOG.md) pour l'historique complet (40 versions taggées).
|
|
|
|
## Architecture technique
|
|
|
|
```
|
|
manifest.json # Manifest V3 (Chrome) + gecko_settings (Firefox)
|
|
background.js # Worker fond : fetch planning XML, gestion session, fetch fiches
|
|
viewer.html # Interface principale
|
|
viewer.js # Logique (~9000 lignes) — voir détail ci-dessous
|
|
viewer.css # Styles + thèmes clair/sombre
|
|
icons/ # icon16, icon48, icon128
|
|
```
|
|
|
|
### `viewer.js` — fonctions clés
|
|
|
|
| Fonction | Introduite | Rôle |
|
|
|---|---|---|
|
|
| `loadForDate` | v1.0.0 | Fetch + parse planning pour une date donnée |
|
|
| `buildTooltipHTML` | v1.0.0 | Construction HTML du tooltip d'intervention |
|
|
| `pinTooltip` | v4.1.3 | Épingler un tooltip (le rendre permanent) |
|
|
| `bindTimelinePopover` | v4.2.3 | Lier popover timeline aux segments |
|
|
| `showTimelinePopover` | v4.2.3 | Afficher popover persistante |
|
|
| `openPersistentTimelinePopup` | v4.2.3 | Grande popup détaillée |
|
|
| `setTooltipViewportPosition` | v4.2.4 | Détection auto fixed/abs |
|
|
| `_softUnpinPopup` | v4.3.3 | Désépinglage mou (popup reste visible) |
|
|
| `initAppClock` | v5.0.0 | Horloge HH:MM topbar |
|
|
| `initSessionTimer` | v5.0.0 | Compteur session EV (tick 1s) |
|
|
| `initAdminMenu` | v5.0.0 | Menu admin (5 clics titre) |
|
|
| `_applyViewMode` | v2026.5.32 | Toggle vue classique/horizontale |
|
|
| `_maybeRetryFetchUser` | v2026.5.34 | Relance opportuniste fetch user |
|
|
| `positionTooltipAnchored` | v2026.5.34 | Positionnement unifié (4 candidats) |
|
|
|
|
### Constantes persistantes (toutes versions)
|
|
|
|
- 8 techs hardcodés : `76272,83725,66635,92235,90070,40944,72485,86874`
|
|
- Pillonel Olivier (ID 40944) : absent tous les vendredis (hardcodé)
|
|
- Group ID EasyVista : `191`
|
|
- GUIDs forms EV :
|
|
- Demande : `S={C99ECD05-3D48-4C62-ABF0-66292053AED6}`
|
|
- Incident : `I={07ED9C68-6172-48EA-8A58-90912B0A283E}`
|
|
- SSO : Canton ForgeRock OpenAM
|
|
- Storage keys : `admin_config`, `view_mode` (depuis v2026.5.32)
|
|
- Domaines : `itsma.etat-de-vaud.ch` (interne), `itsma.vd.ch` (externe SSO)
|
|
|
|
## Installation
|
|
|
|
### Firefox
|
|
Télécharger le `.xpi` signé depuis le serveur de mises à jour interne, ou drag-and-drop dans `about:addons`.
|
|
|
|
### Chrome / Edge
|
|
Mode développeur : décompresser le ZIP et charger en tant qu'extension non empaquetée.
|
|
|
|
## Développement
|
|
|
|
```bash
|
|
git clone https://gitea.netaplaid.ch/FroSteel/Planification.git
|
|
cd Planification
|
|
|
|
# Pour packager une nouvelle version :
|
|
# 1. modifier le code
|
|
# 2. bump version dans manifest.json
|
|
# 3. zip + xpi
|
|
git add -A
|
|
git commit -m "Version YYYY.M.PATCH — description"
|
|
git tag vYYYY.M.PATCH
|
|
git push origin main
|
|
git push --tags
|
|
```
|
|
|
|
## Licence
|
|
|
|
[MIT License](LICENSE) — Copyright (c) 2026 Quentin Rouiller
|
|
|
|
## Auteur
|
|
|
|
**Quentin Rouiller** (QRO)
|
|
Technicien DGNSI — Canton de Vaud
|