# Planification — Extension EasyVista Canton de Vaud Extension Chrome / Firefox pour visualiser de manière claire et rapide le planning des techniciens IT du Canton de Vaud dans EasyVista. ## Aperçu rapide - **Auteur** : Quentin Rouiller (QRO) - **Cible** : techniciens IT 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) Canton de Vaud — Service IT