Files
Planification/README.md
T
Quentin 012af61fb0 v2026.5.40 — Sélection groupe EV + édition domaines + tri équipe + vue horizontale enrichie
Onglet Équipe :
- Sélecteur de groupe EasyVista (SI-CSS, SI-EXT, …) en tête de
  section, détecté automatiquement à l'ouverture du panel via le
  <select id="plan_group_id"> de la page Planning EV. Robuste aux
  ajouts/renommages côté EV.
- ID groupe affiché en italique (ex: ID groupe : 191).
- Refresh auto de la liste d'équipe au changement de groupe.
- Plus de bouton 'Détecter' : tout est auto à l'ouverture.
- Tri double : inclus d'abord, puis exclus, alphabétique dans chaque
  sous-groupe.

Onglet EasyVista :
- Édition manuelle des deux domaines (interne DGNSI / externe Internet).
- Bouton Réinitialiser, normalisation auto des URLs.
- Les défauts restent codés en dur en fallback.

Onglet Statuts retiré (placeholder lecture seule).

Vue horizontale enrichie :
- Barre couleur catégorie + référence + ville sur chaque segment.
- Hauteur 22→32px.

Coulisses :
- Nouveau message 'detectGroups' + fonction detectGroupsFromEV() côté
  background.js.
- detectTeamFromEV() accepte un groupId en argument.
- Le fetch du planning continue d'utiliser group_id=191 codé en dur,
  branchement effectif dans une prochaine version.
2026-04-27 00:57:03 +02:00

9.3 KiB

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.40
  • 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.162026.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.162026.5.17 : petite correction ou ajustement (patch)
  • 2026.5.372026.6.0 : refonte majeure (par exemple nouvelle vue, nouvelle architecture)
  • 2026.x.y2027.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.40 (latest, 27 avril 2026) — Sélection groupe EV + édition domaines + tri équipe + vue horizontale enrichie

  • Onglet Équipe : sélecteur de groupe EasyVista (SI-CSS, SI-EXT, …) en tête de section, détecté automatiquement via le <select id="plan_group_id"> de la page Planning EV. Robuste aux ajouts/renommages côté EV.
  • ID groupe affiché en italique (ex: ID groupe : 191).
  • Refresh auto de la liste d'équipe au changement de groupe.
  • Plus de bouton "Détecter" (tout est auto à l'ouverture).
  • Tri double : inclus d'abord, puis exclus, alphabétique dans chaque sous-groupe.
  • Onglet EasyVista : édition manuelle des deux domaines (interne / externe), bouton Réinitialiser, normalisation auto des URLs.
  • Onglet Statuts retiré (placeholder lecture seule).
  • Vue horizontale enrichie : barre verticale couleur catégorie, référence en gras, ville en gris muted, hauteur 22→32px.
  • Coulisses : nouveau message detectGroups, fonction detectGroupsFromEV() côté background.js. detectTeamFromEV() accepte un groupId en argument.

v2026.5.39 — Séparation Matin / Après-midi + Apparence

  • Pills "MATIN" / "APRÈS-MIDI" entre les interventions
  • Section Apparence (thème, taille du texte, cache, heures de la journée)
  • Section À propos (version, auteur, licence)

v2026.5.38 — Attribution auteur + nettoyage + observabilité

  • Module LOG unifié + handlers globaux d'erreur
  • Toggle "Logs verbeux (debug)" dans le panel admin

v2026.5.37 — 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 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

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 — Copyright (c) 2026 Quentin Rouiller

Auteur

Quentin Rouiller (QRO) Technicien DGNSI — Canton de Vaud