Wiki : refonte pour v2026.5.50
@@ -1,288 +1,100 @@
|
|||||||
# Architecture
|
# Architecture
|
||||||
|
|
||||||
## Structure du projet
|
Cette page s'adresse à qui veut lire, construire ou modifier le code de l'extension. Elle décrit la version publiée 2026.5.50.
|
||||||
|
|
||||||
|
## Structure du dépôt
|
||||||
|
|
||||||
```
|
```
|
||||||
Planification/
|
Planification/
|
||||||
├── .gitignore
|
├── src/ Sources de l'extension, chargées telles quelles par le navigateur
|
||||||
├── build.sh # Génère dist/chromium/, dist/firefox/, .zip, .xpi, met à jour firefox-updates.json
|
│ ├── manifest.json Manifest V3 (version, permissions, domaines EasyVista)
|
||||||
├── firefox-updates.json # Manifest auto-update Firefox (servi via update_url)
|
│ ├── background.js Service worker : session, requêtes EasyVista, hôte natif
|
||||||
|
│ ├── viewer.html Page du planning
|
||||||
|
│ ├── viewer.js Interface : lecture, rendu, bulles, déplacements, paramètres
|
||||||
|
│ ├── viewer.css Styles, thèmes clair et sombre
|
||||||
|
│ └── icons/ Icônes 16, 48 et 128 px
|
||||||
|
├── native-host/ Script Windows de synchronisation (PowerShell)
|
||||||
|
│ ├── Gerer.cmd Point d'entrée : installer, réparer, désinstaller
|
||||||
|
│ └── bin/ host.ps1, manage.ps1, tray.ps1, tray.vbs
|
||||||
|
├── build.sh Construction des paquets Chromium et Firefox
|
||||||
|
├── firefox-updates.json Manifeste de mise à jour lu par Firefox
|
||||||
├── CHANGELOG.md
|
├── CHANGELOG.md
|
||||||
├── LICENSE # MIT
|
├── LICENSE MIT
|
||||||
├── README.md
|
└── README.md
|
||||||
└── src/ # Sources de l'extension (chargées par le navigateur)
|
|
||||||
├── manifest.json # Manifest V3 (Chrome) + browser_specific_settings (Firefox)
|
|
||||||
├── background.js # Service worker (~1 600 lignes)
|
|
||||||
├── viewer.html # Interface principale
|
|
||||||
├── viewer.js # Logique UI (~10 700 lignes)
|
|
||||||
├── viewer.css # Styles + thèmes clair/sombre (~4 800 lignes)
|
|
||||||
└── icons/ # icon16, icon48, icon128
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Composants principaux
|
Le code est du JavaScript sans framework ni bundler. Le navigateur charge `src/` sans transformation.
|
||||||
|
|
||||||
### `background.js` — Service worker (Manifest V3)
|
## Construire
|
||||||
Worker de fond responsable de :
|
|
||||||
- Récupération de la session EasyVista (PHPSESSID)
|
|
||||||
- Fetch du XML `calendar_block` (planning du jour pour les techs configurés)
|
|
||||||
- Fetch des fiches détaillées (HTML)
|
|
||||||
- Fetch du timeline JSON (texte action complet)
|
|
||||||
- Détection contexte réseau (interne / externe via SSO)
|
|
||||||
- Détection automatique des **groupes EasyVista** disponibles (depuis v2026.5.40) en parsant le `<select id="plan_group_id">` de la page Planning EV
|
|
||||||
- Détection automatique des **membres d'un groupe** (paramétrable par `groupId` depuis v2026.5.40)
|
|
||||||
- Gestion du cache local (`chrome.storage.local`)
|
|
||||||
- Nettoyage des vieux caches (cron)
|
|
||||||
|
|
||||||
### `viewer.js` — Interface principale
|
Prérequis : `bash`, `python3` et `zip`.
|
||||||
- Parsing du XML calendar_block
|
|
||||||
- Construction des cards / rows par tech
|
|
||||||
- Timeline visuelle avec segments (depuis v2026.5.40 : barre couleur catégorie + référence + ville en vue horizontale)
|
|
||||||
- Tooltips détaillés (épinglables, draggables)
|
|
||||||
- 2 modes d'affichage (classique / horizontale)
|
|
||||||
- Panel admin (Apparence / Équipe / EasyVista / Diagnostics / À propos) — section "Statuts" retirée en v2026.5.40
|
|
||||||
- Onglet **Équipe** : sélecteur de groupe EV (SI-CSS, SI-EXT, …) avec rafraîchissement auto de la liste de membres au changement de groupe (v2026.5.40)
|
|
||||||
- Onglet **EasyVista** : édition manuelle des deux domaines interne / externe (v2026.5.40)
|
|
||||||
- Module LOG unifié (debug toggle)
|
|
||||||
- Handlers globaux d'erreur
|
|
||||||
- `sendMessage` avec timeout
|
|
||||||
|
|
||||||
### `viewer.css`
|
```bash
|
||||||
- Variables CSS (`:root`) pour thème clair / sombre
|
./build.sh
|
||||||
- Layout grille (vue classique) + flex (vue horizontale)
|
|
||||||
- Animations transitions douces
|
|
||||||
- Media queries (compact 24" / breakpoint étroit)
|
|
||||||
|
|
||||||
## Couche données v2 (v2026.5.46)
|
|
||||||
|
|
||||||
- **Store par jour** `planv2_<AAAA-MM-JJ>` (chrome.storage.local, schéma 2) : liste plate d'interventions dédoublonnées par identité stable (`requestId` > `actionId` > réf). C'est la seule vérité ; rendu, dossier partagé et EasyVista n'en sont que des projections/sources.
|
|
||||||
- **Verdict unique** par intervention : `{status: live|done|suspended|closed|gone|moved|unknown, at, source, reason}`.
|
|
||||||
- **`ivMerge`** : LA fusion (métadonnées les plus fraîches + enrichissements complétés + verdict le plus récent + modèle vie/mort — une vie postérieure lève les tombstones). Utilisée pour EV↔store, local↔dossier, import.
|
|
||||||
- **`storeSave`** : seule porte d'écriture (dédoublonnage, horodatage, quota, push débounce vers le dossier). **`storeProject`** : seule projection de rendu (tombstones, verdicts gone/moved, dock, fenêtre anti cache-serveur après déplacement).
|
|
||||||
- **Dossier partagé** : hôte natif PowerShell (publié en asset de release, installable via Paramètres → Dossier partagé), fichiers-jour dans le sous-dossier `v2` du partage, compare-and-swap + verrous.
|
|
||||||
|
|
||||||
## Flux principal
|
|
||||||
|
|
||||||
```
|
|
||||||
┌────────────────┐ clic icône ┌─────────────────────┐
|
|
||||||
│ Navigateur │ ───────────────> │ background.js │
|
|
||||||
│ (Chrome / │ │ (service worker) │
|
|
||||||
│ Firefox) │ <─── viewer.html │ │
|
|
||||||
└────────────────┘ └──────────┬──────────┘
|
|
||||||
│ │
|
|
||||||
│ chrome.runtime.sendMessage │ findEasyVistaSession()
|
|
||||||
│ {type: "fetchPlanning"} │ ↓
|
|
||||||
▼ ▼
|
|
||||||
┌────────────────────────┐ ┌────────────────────┐
|
|
||||||
│ viewer.js (UI) │ │ EasyVista server │
|
|
||||||
│ ─ init() │ │ itsma.vd.ch / │
|
|
||||||
│ ─ loadForDate(iso) │ ◄── XML ── │ etat-de-vaud.ch │
|
|
||||||
│ ─ parseXML │ fiches │ │
|
|
||||||
│ ─ buildCard() x N │ │ planning_xhr.php │
|
|
||||||
│ ─ buildTooltipHTML │ │ index.php (fiches) │
|
|
||||||
│ ─ renderFromData │ │ etc. │
|
|
||||||
│ ─ writeCache │ └────────────────────┘
|
|
||||||
└──────────┬─────────────┘
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
┌────────────────────────────────────────────────┐
|
|
||||||
│ chrome.storage.local │
|
|
||||||
│ ─ admin_config (groupe, équipe, domaines, …) │
|
|
||||||
│ ─ planning_cache_YYYY-MM-DD (par jour) │
|
|
||||||
│ localStorage │
|
|
||||||
│ ─ view_mode (classic / horizontal) │
|
|
||||||
└────────────────────────────────────────────────┘
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Étapes clés** (de `init()` à l'affichage) :
|
Le script lit la version dans `src/manifest.json` et produit :
|
||||||
1. `init()` → charge le thème + la config admin + les bornes de la journée + l'équipe.
|
|
||||||
2. `refreshSessionAndLoad()` → cherche la session EV via `background.js`.
|
|
||||||
3. `loadForDate(isoDate)` → essaye d'abord le cache local (`readCache`), puis fetche le XML calendar_block via `background.fetchPlanningXml`.
|
|
||||||
4. Pour chaque intervention présente dans le XML : on en `buildCard()` immédiatement avec les attributs déjà enrichis (contact/lieu/catégorie). Pour les statuts détaillés, on lance des `fetchFiche` séquentiels en arrière-plan qui mettent à jour le DOM au fur et à mesure.
|
|
||||||
5. À la fin du fetch complet : `writeCache()` sauvegarde tout dans `chrome.storage.local["planning_cache_YYYY-MM-DD"]`.
|
|
||||||
|
|
||||||
## Stack technique
|
- `dist/chromium/` et `dist/planification-vX.Y.Z-chromium.zip` ;
|
||||||
|
- `dist/firefox/` et `dist/planification-vX.Y.Z-firefox.xpi`, avec les réglages propres à Firefox (identifiant de l'extension, version minimale 140, adresse de mise à jour) ;
|
||||||
|
- une entrée pour cette version dans `firefox-updates.json`.
|
||||||
|
|
||||||
| Élément | Détail |
|
Pour essayer une modification : charge `dist/chromium/` comme extension non empaquetée dans Chrome, ou `dist/firefox/` comme module temporaire dans Firefox (`about:debugging`).
|
||||||
|
|
||||||
|
## Publier une version
|
||||||
|
|
||||||
|
1. Version dans `src/manifest.json`, entrée dans `CHANGELOG.md`, puis `./build.sh`.
|
||||||
|
2. Commit, tag `vX.Y.Z` et publication Gitea avec le `.zip` Chromium et le `.xpi`.
|
||||||
|
3. Mozilla signe le `.xpi` (distribution hors catalogue). Le `.xpi` signé remplace celui de la publication, puis son empreinte sha256 va dans `firefox-updates.json` sur `main`.
|
||||||
|
|
||||||
|
Firefox lit `firefox-updates.json` sur la branche `main` pour proposer la mise à jour : ce fichier et les `.xpi` publiés servent en production.
|
||||||
|
|
||||||
|
## Composants
|
||||||
|
|
||||||
|
**Service worker (`background.js`)**
|
||||||
|
|
||||||
|
- Trouve la session EasyVista (cookie `PHPSESSID`) sur les domaines configurés et détecte le contexte réseau, interne ou Internet.
|
||||||
|
- Envoie toutes les requêtes vers EasyVista : planning du jour, fiches, historique des actions, utilisateur connecté, groupes et membres d'un groupe.
|
||||||
|
- Envoie les modifications demandées par la page : déplacement ou changement d'horaire, création et suppression d'absences et de réservations, envoi sur la douchette, prolongation de session.
|
||||||
|
- Ouvre la page du planning au clic sur l'icône de l'extension.
|
||||||
|
|
||||||
|
**Page du planning (`viewer.html`, `viewer.js`, `viewer.css`)**
|
||||||
|
|
||||||
|
- Lit le planning EasyVista et le range dans le store du jour.
|
||||||
|
- Affiche les deux vues, les bulles, le dock, la recherche et les Paramètres.
|
||||||
|
- Parle au script de synchronisation par messagerie native (`ch.netaplaid.planification`).
|
||||||
|
|
||||||
|
## Données stockées
|
||||||
|
|
||||||
|
Dans `chrome.storage.local`, sur le poste :
|
||||||
|
|
||||||
|
| Clé | Contenu |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Manifest | V3 |
|
| `admin_config` | Réglages : groupe, équipe, absences récurrentes, domaines, apparence, emails, dossier partagé |
|
||||||
| Browser support | Chrome / Edge / Firefox 140+ |
|
| `planv2_AAAA-MM-JJ` | Store d'un jour : techniciens et interventions, chacune avec un verdict unique (`live`, `done`, `suspended`, `closed`, `gone`, `moved`, `unknown`) |
|
||||||
| Pas de framework | JS vanilla |
|
| `reservation_meta` | Informations de réservation en attente d'enregistrement dans le store |
|
||||||
| Pas de build step navigateur | les fichiers sont chargés tels quels (un script `build.sh` empaquette les sources en `.zip` / `.xpi`) |
|
| `pompier_assignments` | Périodes de service pompier |
|
||||||
| Stockage | `chrome.storage.local` (cache + admin_config) + `localStorage` (préfs UI) |
|
| `network_context_v2` | Contexte réseau détecté (interne ou Internet) |
|
||||||
| Réseau | `fetch` avec credentials (cookies EV) |
|
| `debug_logs` | Journal détaillé activé ou non (côté service worker) |
|
||||||
| Logs | console (préfixé + timestamp + version) |
|
|
||||||
| Auto-update Firefox | `firefox-updates.json` à la racine du repo, `.xpi` signé Mozilla AMO |
|
|
||||||
|
|
||||||
## Fonctions clés (viewer.js)
|
Dans `localStorage` de la page : `view_mode` (vue classique ou horizontale) et `debug_logs`.
|
||||||
|
|
||||||
Vue « échelle de temps exacte » : `_buildExactRow` (bande continue + sous-lignes + trous), `_buildOneMiniCard` (fabrique partagée flux/exact), `_buildExactRuler` + `_alignExactRuler` (règle des heures, alignement mesuré), `_layoutExactGrid` (traits d'heures continus, sauteurs d'absents via `_exactAbsentSegments`), `updateNowLine` (ligne « maintenant » globale).
|
L'extension efface les jours plus vieux que la durée du cache (7 jours par défaut). Elle identifie une intervention par son `requestId`, sinon son `actionId`, sinon sa référence.
|
||||||
|
|
||||||
|
## Synchronisation entre postes
|
||||||
|
|
||||||
| Fonction | Introduite | Rôle |
|
Le script `native-host` s'installe dans le profil Windows de l'utilisateur, sans droits administrateur, et s'enregistre comme hôte de messagerie native. L'extension lui confie la lecture et l'écriture des fichiers de jour dans le sous-dossier `v2` du dossier partagé, classés par année et par mois. Chaque écriture compare le fichier avant de le remplacer et prend un verrou : deux postes ne s'écrasent pas.
|
||||||
|---|---|---|
|
|
||||||
| `loadForDate` | v1.0.0 | Fetch + parse planning pour une date |
|
|
||||||
| `buildCard` | v1.0.0 | Construit la card HTML d'un technicien |
|
|
||||||
| `buildTooltipHTML` | v1.0.0 | HTML détaillé d'une intervention |
|
|
||||||
| `pinTooltip` | v4.1.3 | Épingle un tooltip |
|
|
||||||
| `bindTimelinePopover` | v4.2.3 | Lie segments timeline → popovers |
|
|
||||||
| `_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) |
|
|
||||||
| `_applyViewMode` | v2026.5.32 | Toggle vue classique/horizontale |
|
|
||||||
| `positionTooltipAnchored` | v2026.5.34 | Positionnement tooltip (4 candidats) |
|
|
||||||
| `LOG.error/warn/info` | v2026.5.38 | Logger unifié |
|
|
||||||
| `_applyTextZoom` | v2026.5.39 | Zoom global du texte (slider Apparence) |
|
|
||||||
| `renderAdminSectionTeam` | v5.0.0 | Onglet admin Équipe (sélecteur de groupe EV depuis v2026.5.40, tri inclus + alpha) |
|
|
||||||
| `renderAdminSectionEV` | v5.0.0 | Onglet admin EasyVista (édition domaines depuis v2026.5.40) |
|
|
||||||
| `paintGroupOptions` / `refreshTeamForGroup` | v2026.5.40 | Helpers du sélecteur de groupe (peuplement + refresh auto de la liste équipe) |
|
|
||||||
| `_normalizeOrigin` | v2026.5.40 | Normalisation des URLs des domaines EV éditées dans l'admin |
|
|
||||||
|
|
||||||
## Fonctions clés (background.js)
|
## Réseau
|
||||||
|
|
||||||
| Fonction | Rôle |
|
L'extension ne contacte que :
|
||||||
|---|---|
|
|
||||||
| `findEasyVistaSession` | Trouve l'onglet EV ouvert + extrait PHPSESSID |
|
|
||||||
| `fetchPlanningXml` | Fetch XML calendar_block du planning |
|
|
||||||
| `fetchFicheHtml` | Fetch HTML d'une fiche EV (avec retry SSO) |
|
|
||||||
| `fetchTimelineApi` | Fetch JSON timeline d'une fiche (texte action complet) |
|
|
||||||
| `fetchCurrentUser` | Identifie l'user EV connecté |
|
|
||||||
| `detectNetworkContext` | Interne (etat-de-vaud.ch) ou externe (vd.ch) |
|
|
||||||
| `detectGroupsFromEV` (v2026.5.40) | Parse le `<select id="plan_group_id">` de la page Planning → liste `[{id, name}, …]` des groupes disponibles |
|
|
||||||
| `detectTeamFromEV` (paramétrable depuis v2026.5.40) | Liste les membres d'un groupe ; accepte un `groupId` en argument pour basculer entre SI-CSS / SI-EXT |
|
|
||||||
| `evFetch` | Wrapper fetch avec headers EV (Referer, X-Requested-With) |
|
|
||||||
|
|
||||||
## Helpers de lecture de config (v2026.5.41)
|
- les domaines EasyVista configurés (`itsma.etat-de-vaud.ch`, `itsma.vd.ch` par défaut), avec la session de l'utilisateur ;
|
||||||
|
- le portail de connexion du Canton, ouvert dans un onglet pour se reconnecter ;
|
||||||
|
- Gitea, pour télécharger le script de synchronisation sur clic de l'utilisateur.
|
||||||
|
|
||||||
Côté `background.js`, tous les hardcodes runtime ont été remplacés par des helpers qui lisent `admin_config` à chaque appel :
|
Firefox, de son côté, consulte `firefox-updates.json` sur Gitea pour les mises à jour.
|
||||||
|
|
||||||
| Helper | Retourne | Fallback |
|
## Journaux
|
||||||
|---|---|---|
|
|
||||||
| `getAdminConfig()` | objet `cfg` complet | `{}` |
|
|
||||||
| `getEvOrigins()` | tableau d'origines à surveiller | `DEFAULT_EV_ORIGINS` (2 défauts hardcodés) |
|
|
||||||
| `getGroupId()` | string group_id | `DEFAULT_GROUP_ID = "191"` (SI-CSS) |
|
|
||||||
| `getSupportIds()` | CSV des clés de `cfg.team` | `""` (lève `no_team_configured` côté `fetchPlanningXml`) |
|
|
||||||
| `getDayBounds()` | `{ start, end }` heures | `{ start: 8, end: 18 }` |
|
|
||||||
|
|
||||||
`fetchPlanningXml()` lève `Error("no_team_configured")` quand `getSupportIds()` retourne une chaîne vide → le viewer affiche un message invitant à configurer Paramètres → Équipe.
|
|
||||||
|
|
||||||
## Configuration persistée
|
|
||||||
|
|
||||||
Clés ajoutées en v2026.5.48 (`admin_config`) : `teamEmails` (id → adresse), `moveEmailEnabled`, `moveEmailSubject`, `moveEmailBody`, `emailDomain` — toutes embarquées par l'export/import des paramètres.
|
|
||||||
|
|
||||||
|
|
||||||
`chrome.storage.local["admin_config"]` :
|
|
||||||
|
|
||||||
| Clé | Type | Rôle | Introduite |
|
|
||||||
|---|---|---|---|
|
|
||||||
| `team` | `{id: name}` | Liste des techniciens inclus | v5.0.0 |
|
|
||||||
| `recurringAbsences` | `{id: [days]}` | Jours de la semaine d'absence récurrente | v5.0.0 |
|
|
||||||
| `groupId` | string | ID du groupe EV sélectionné | v5.0.0 |
|
|
||||||
| `groupName` | string | Nom du groupe sélectionné (cache d'affichage) | v2026.5.40 |
|
|
||||||
| `detectedGroups` | `[{id, name}]` | Cache de la dernière détection des groupes | v2026.5.40 |
|
|
||||||
| `evOrigins` | `[interne, externe]` | Domaines EasyVista éditables dans l'admin | v2026.5.40 |
|
|
||||||
| `theme` | `auto`/`light`/`dark` | Préférence thème | v2026.5.39 |
|
|
||||||
| `textZoom` | `-2..+2` | Niveau de zoom du texte | v2026.5.39 |
|
|
||||||
| `cacheDays` | number | Durée de rétention du cache (défaut 7) | v2026.5.39 |
|
|
||||||
| `dayStart` / `dayEnd` | number | Plage horaire de la timeline (défaut 8-18) | v2026.5.39 |
|
|
||||||
| `closedStatus` / `resolvedStatus` / `cancelledStatus` / `suspendedStatus` | `[string]` | Statuts EV reconnus pour les verdicts (matching insensible casse/accents/conjugaisons) | v2026.5.44 |
|
|
||||||
| `topbarColor` | string `#rrggbb` | Couleur de fond de la topbar (vide = défaut thème) | v2026.5.44 |
|
|
||||||
| `appFont` | string | Identifiant de police (cf. `APP_FONT_OPTIONS`) appliquée à toute la page | v2026.5.44 |
|
|
||||||
|
|
||||||
`localStorage["view_mode"]` : `classic` ou `horizontal` (depuis v2026.5.32).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Email de déplacement (v2026.5.48)
|
|
||||||
|
|
||||||
- `_emailAfterMove(opts)` — après un déplacement appliqué : gardes dans l'ordre `MOVE_EMAIL_ENABLED`, `change.sansEmail` (case décochée = ce déplacement seulement), « vrai déplacement » (autre jour OU autre technicien) ; adresses validées ; le brouillon s'ouvre même sans adresse (toast « Adresse manquante ») ; URL `mailto:` avec destinataires joints par `;` (Outlook FR/CH) et sujet/corps `encodeURIComponent`, ancre insérée au DOM avant `click()` (requis Firefox).
|
|
||||||
- `_moveEmailRempli(modele, valeurs)` — remplit les `{variables}`, retire les lignes à puce/tiret restées vides, resserre les espaces par ligne en préservant l'indentation.
|
|
||||||
- Modèle : `MOVE_EMAIL_VARIABLES` (source unique des 11 variables), `MOVE_EMAIL_VARIABLE_GROUPES` (légende en 3 colonnes), `DEFAULT_MOVE_EMAIL_SUBJECT/BODY` (filets de 1er lancement, blocs AVANT / APRÈS). **Migration au boot** : `_empreinteModeleEmail` (empreinte tolérante — fins de ligne, espaces, tirets typographiques) compare le modèle stocké aux anciens modèles de base (`_ANCIENS_MODELES_BASE`) et le remplace par l'actuel ; un modèle personnalisé n'est jamais touché.
|
|
||||||
- Adresses : `_emailForTech` (saisie prime), `_emailDeduitDuNom` (`prenom.nom@<emailDomain>`), `_fetchTechEmailFromEV` (annuaire EV : renvoie `{ email, fullName }` de la MÊME fiche), `_nomCompletCompatible` (garde anti-homonyme pour compléter un nom tronqué — le nom affiché sur les cartes vient de `cfg.team`, et `storeProject` suit désormais `TEAM` pour le nom).
|
|
||||||
|
|
||||||
## Méta de réservation (v2026.5.48)
|
|
||||||
|
|
||||||
- La méta (n°/ville/rue/catégorie) vit dans la réservation du STORE avec un horodatage `resMetaAt` — dans `ivMerge`, l'édition la plus récente gagne le bloc en entier (un champ vidé n'est pas ressuscité).
|
|
||||||
- Le carnet local (`reservation_meta`) est un **tampon de pose** : clé `date|tech|début-fin`, TTL 7 j calé sur la date cible, consommé une seule fois à l'ingestion (`_resMetaConsumeInto` dans `storeApplyFresh`), vidé du disque après un `storeSave` réussi. Plus aucune ré-injection au parse.
|
|
||||||
- Le TECH fait partie de l'identité `ivKey` des réservations/absences (un `actionId` recyclé entre techniciens ne fusionne plus) ; transfert de méta sur re-planification EasyVista seulement si le rapprochement est sans ambiguïté (même tech + jour + durée + créateur).
|
|
||||||
|
|
||||||
## Durcissements v2026.5.48
|
|
||||||
|
|
||||||
- Reconnexion : `_checkForRestoredSession` retente le chargement si un écran plein est encore affiché à PHPSESSID inchangé, et ne masque les écrans pleins / ne toaste « Reconnecté » qu'après un rendu réel.
|
|
||||||
- Recherche : index du cache à vol unique (`_srCacheBuildInflight`), garde `_srSearchEnCours` contre les relances au survol, garde `isConnected` sur le clic-extérieur (un élément retiré du DOM pendant son clic n'est pas « dehors »), pastille de statut seulement pour les états finals.
|
|
||||||
|
|
||||||
## Variables CSS dynamiques (v2026.5.44)
|
|
||||||
|
|
||||||
Posées sur `:root` ou `html` par JS, lues partout dans le CSS :
|
|
||||||
|
|
||||||
| Variable | Source | Rôle |
|
|
||||||
|---|---|---|
|
|
||||||
| `--topbar-bg` | `_applyTopbarColor(color)` depuis `cfg.topbarColor` | Fond de la topbar (et de la sidebar en horizontal). Vide = `--bg-elevated` du thème |
|
|
||||||
| `--topbar-text` | `_applyTopbarColor` calcule via `_readableTextOn(color)` (luminance pondérée 0.299·r + 0.587·g + 0.114·b) | Couleur du texte topbar — blanc si fond foncé, foncé si fond clair |
|
|
||||||
| `--app-font` | `_applyAppFont(val)` depuis `cfg.appFont` (mappe sur `_appFontStack`) | Stack `font-family` appliquée à `body` (cascade vers toute la page) |
|
|
||||||
| `--topbar-height` | `_initTopbarHeightVar()` via `ResizeObserver` sur `header.topbar` | Hauteur réelle de la topbar — utilisée par les éléments sticky en dessous (`.session-banner`, `.progress-bar`, `.session-slide-alert`) pour leur `top:` |
|
|
||||||
| `--text-scale` / `--zoom-factor` | `_applyTextZoom(level)` depuis `cfg.textZoom` | Multiplicateurs du zoom texte (existants depuis v2026.5.39, listés ici pour complétude) |
|
|
||||||
|
|
||||||
Classe `html.has-topbar-color` (toggle JS dans `_applyTopbarColor`) active les règles `color-mix` translucides sur les boutons / today-block / date-custom de la topbar et de la sidebar horizontale, pour qu'ils restent lisibles sur n'importe quel fond.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Helpers d'apparence (v2026.5.44)
|
|
||||||
|
|
||||||
| Fonction (`viewer.js`) | Rôle |
|
|
||||||
|---|---|
|
|
||||||
| `APP_FONT_OPTIONS` | Tableau des 28 stacks de police proposés dans le panel admin |
|
|
||||||
| `_appFontStack(val)` | Retourne le stack `font-family` correspondant à un identifiant |
|
|
||||||
| `_hexToLuminance(hex)` | Calcule la luminance perçue (0..1) d'une couleur hex (#rgb ou #rrggbb) |
|
|
||||||
| `_readableTextOn(hex)` | Retourne `#1a1f2b` ou `#ffffff` selon contraste optimal |
|
|
||||||
| `_applyTopbarColor(color)` | Pose `--topbar-bg`, `--topbar-text` et toggle `html.has-topbar-color` |
|
|
||||||
| `_applyAppFont(val)` | Pose `--app-font` sur `:root` |
|
|
||||||
| `_initTopbarStyleFromConfig()` | Lit `cfg.topbarColor` + `cfg.appFont` (avec fallback `cfg.topbarFont`) au boot et applique |
|
|
||||||
| `_initTopbarHeightVar()` | Démarre le `ResizeObserver` qui maintient `--topbar-height` à jour |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Helpers de verdict ghost (v2026.5.44 — refonte)
|
|
||||||
|
|
||||||
Dans `analyzeOneDisappearedIv()` :
|
|
||||||
|
|
||||||
| Verdict (`iv._disappearStatus`) | Décision | Rendu UI |
|
|
||||||
|---|---|---|
|
|
||||||
| `terminated-clos` | KEEP | Carte **verte** + ✓✓ |
|
|
||||||
| `terminated-pending` | KEEP | ✓ gris « Fait » |
|
|
||||||
| `terminated-suspended` | KEEP | ✓ jaune « Suspendu » + barre verte (horizontal) |
|
|
||||||
| `closed` / `terminated` | KEEP | Carte verte + ✓✓ |
|
|
||||||
| `cancelled` / `cancelled-reservation` / `cancelled-absence` | REMOVE | (retiré silencieusement en PROD ; loggé en mode diagnostic) |
|
|
||||||
| `error` | KEEP (silent) | Inchangé |
|
|
||||||
| `fiche_tronquee` | KEEP (silent) | Inchangé |
|
|
||||||
|
|
||||||
Helpers de matching (`_normalizeStatus`, `_stemStatus`, `_statusMatchesAny`) : permettent à l'utilisateur de saisir ses statuts EV en français normal (« Clôturé », « clôture », « Clos », « clôs », « Suspendu : Attente info »…) avec matching tolérant aux variations casse/accents/conjugaisons via lowercase + suppression diacritiques + strip suffixes verbaux courants.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Refresh séquentiel + abort (v2026.5.44)
|
|
||||||
|
|
||||||
`background.js` :
|
|
||||||
|
|
||||||
```js
|
|
||||||
const _evFetchControllers = new Set(); // registre global des AbortController en vol
|
|
||||||
function _abortAllEvFetches() { // appelé sur message "abortAllFetches"
|
|
||||||
for (const c of _evFetchControllers) {
|
|
||||||
try { c.abort(); } catch (e) { /* ignore */ }
|
|
||||||
}
|
|
||||||
_evFetchControllers.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
async function evFetch(url, origin, opts = {}) {
|
|
||||||
let controller = null;
|
|
||||||
if (!opts.signal) {
|
|
||||||
controller = new AbortController();
|
|
||||||
_evFetchControllers.add(controller);
|
|
||||||
}
|
|
||||||
// ... fetch avec signal
|
|
||||||
try { return await fetch(url, fetchOpts); }
|
|
||||||
finally { if (controller) _evFetchControllers.delete(controller); }
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
`viewer.js` envoie `{type: "abortAllFetches"}` au service worker quand l'utilisateur clique « ✕ Arrêter ». Tous les fetch EV en vol sont avortés instantanément (avant la complétion). Le state `state.refreshAborted` interrompt aussi la boucle séquentielle au prochain `await`.
|
|
||||||
|
|
||||||
|
Chaque ligne de la console porte l'heure, la version, le module et le niveau. Les étapes détaillées n'apparaissent qu'avec « Logs verbeux (debug) » (onglet Diagnostics).
|
||||||
|
|||||||
@@ -1,75 +1,22 @@
|
|||||||
# Contact
|
# Contact
|
||||||
|
|
||||||
|
Pour signaler un problème ou proposer une amélioration, ouvre un [ticket sur Gitea](https://gitea.netaplaid.ch/FroSteel/Planification/issues/new). Il te faut un compte Gitea.
|
||||||
|
|
||||||
|
## Ce que doit contenir un ticket
|
||||||
|
|
||||||
|
- Ce que tu faisais, et ce que tu attendais.
|
||||||
|
- Les étapes pour reproduire le problème.
|
||||||
|
- La version de l'extension (Réglages, onglet À propos), ton navigateur et sa version.
|
||||||
|
- Une capture et les lignes utiles de la console, sans noms, numéros de téléphone ni adresses. La marche à suivre est dans [Dépannage](D%C3%A9pannage#signaler-un-problème).
|
||||||
|
|
||||||
|
Pour une suggestion, décris le besoin : ce que tu fais aujourd'hui, à quelle fréquence, et ce que tu y gagnerais.
|
||||||
|
|
||||||
## Auteur
|
## Auteur
|
||||||
|
|
||||||
**FroSteel** (FRS)
|
Quentin Rouiller, technicien DGNSI, Canton de Vaud.
|
||||||
Technicien — DGNSI (Direction Générale du Numérique et des Systèmes d'Information)
|
|
||||||
**Canton de Vaud**
|
|
||||||
|
|
||||||
## Comment me joindre
|
Sans compte Gitea, écris à : quentin.rouiller@vd.ch
|
||||||
|
|
||||||
### 🥇 Méthode recommandée : Issue Gitea
|
|
||||||
|
|
||||||
Pour **tout sujet** (rapport de bug, suggestion, demande d'accès au code, question), ouvrez une issue sur le dépôt :
|
|
||||||
|
|
||||||
👉 **[Ouvrir une nouvelle issue](https://gitea.netaplaid.ch/FroSteel/Planification/issues/new)**
|
|
||||||
|
|
||||||
C'est la méthode privilégiée :
|
|
||||||
- compte Gitea requis → filtrage automatique du spam de bots
|
|
||||||
- traçabilité (chaque demande = une issue identifiée, historisée)
|
|
||||||
- visibilité partagée avec d'autres techs DGNSI qui pourraient avoir le même problème
|
|
||||||
- réponse attachée à un fil persistent, pas perdue dans une boîte mail
|
|
||||||
|
|
||||||
Si vous n'avez pas de compte Gitea interne, demandez à votre coordinateur DGNSI de vous en créer un — c'est l'organisation officielle de l'outillage interne.
|
|
||||||
|
|
||||||
### 🥈 Sans accès Gitea : email obfusqué
|
|
||||||
|
|
||||||
quentin.rouiller@vd.ch
|
|
||||||
|
|
||||||
> *Si vous voyez les caractères `q...` plutôt que l'email, votre client mail ne décode pas les entités HTML — copiez-collez quand même la chaîne, le serveur SMTP fera la résolution à l'envoi.*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Reporting de bugs
|
|
||||||
|
|
||||||
Si vous êtes utilisateur de l'extension (coordinateur DGNSI Canton de Vaud) :
|
|
||||||
|
|
||||||
1. Activez les **Logs verbeux** dans le panel admin :
|
|
||||||
`⚙ Paramètres → Diagnostics → Logs verbeux (debug)`
|
|
||||||
2. Reproduisez le bug
|
|
||||||
3. Ouvrez la console DevTools (`F12`)
|
|
||||||
4. Copiez le contenu complet de la console
|
|
||||||
5. **[Ouvrez une issue](https://gitea.netaplaid.ch/FroSteel/Planification/issues/new)** avec le contenu de la console, une capture d'écran de l'écran qui pose problème, et le détail de **ce que vous étiez en train de faire** au moment du bug
|
|
||||||
|
|
||||||
Les logs sont préfixés `[HH:MM:SS.mmm][vX.Y.Z][module][LEVEL]` ce qui me permet de retrouver rapidement la cause sans devoir reproduire moi-même.
|
|
||||||
|
|
||||||
### Informations à inclure dans le rapport
|
|
||||||
|
|
||||||
- **Version de l'extension** (visible en bas à droite — `FRS/v2026.5.X` — ou via Paramètres → À propos)
|
|
||||||
- **Navigateur** (Chrome / Firefox / Edge) + version
|
|
||||||
- **Système d'exploitation** (Mac / Windows / Linux)
|
|
||||||
- **Vue active** au moment du bug (Classique ou Horizontale)
|
|
||||||
- **Étapes pour reproduire** si vous arrivez à le refaire
|
|
||||||
- **Console F12** copiée intégralement
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Suggestions de features
|
|
||||||
|
|
||||||
Les suggestions sont les bienvenues si elles servent l'usage quotidien des coordinateurs DGNSI. Décrire de préférence :
|
|
||||||
|
|
||||||
- **Le besoin métier** (pas la solution technique)
|
|
||||||
- **À quelle fréquence** ça arrive
|
|
||||||
- **Ce que vous faites actuellement** faute de cette feature
|
|
||||||
- **Le gain estimé** si la feature existait
|
|
||||||
|
|
||||||
Les meilleures suggestions sont celles qui résolvent un cas réel et fréquent — l'extension a été construite par accumulation de petits irritants quotidiens, pas par anticipation théorique.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Licence
|
## Licence
|
||||||
|
|
||||||
[MIT License](https://opensource.org/licenses/MIT) — © 2026 FroSteel
|
Code publié sous [licence MIT](https://gitea.netaplaid.ch/FroSteel/Planification/src/branch/main/LICENSE).
|
||||||
|
|
||||||
Le code source est publié sous licence MIT, accessible publiquement sur [Gitea](https://gitea.netaplaid.ch/FroSteel/Planification).
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,180 +1,46 @@
|
|||||||
# Dépannage
|
# Dépannage
|
||||||
|
|
||||||
Cette page liste les erreurs courantes rencontrées avec l'extension Planification et leur solution. Si ton problème n'est pas ici, voir [Contact](Contact) pour ouvrir une issue.
|
Cette page réunit les problèmes connus, leur cause et la marche à suivre. Si le tien n'y figure pas, [signale-le](#signaler-un-problème).
|
||||||
|
|
||||||
## Sommaire
|
## Tableau des problèmes
|
||||||
|
|
||||||
- [« Aucun technicien sélectionné »](#aucun-technicien-selectionne)
|
| Ce que tu vois | Cause | Solution |
|
||||||
- [« Session EasyVista expirée »](#session-easyvista-expiree)
|
|---|---|---|
|
||||||
- [« EasyVista est inaccessible »](#easyvista-est-inaccessible)
|
| « Aucune équipe configurée » | Aucun technicien n'est coché. | Clique sur « Ouvrir paramètres » et choisis ton équipe (onglet Équipe, puis « Enregistrer »). |
|
||||||
- [Auto-update Firefox ne fonctionne pas](#auto-update-firefox-ne-fonctionne-pas)
|
| Bandeau rouge « Session EasyVista expirée. » | EasyVista ferme la session après 30 minutes sans activité. | Clique sur « Me reconnecter » et connecte-toi dans l'onglet EasyVista qui s'ouvre. La Planification reprend d'elle-même. |
|
||||||
- [Popups épinglés disparus après reload](#popups-epingles-disparus-apres-reload)
|
| Bandeau « EasyVista est inaccessible. » | Réseau coupé, VPN tombé ou EasyVista en maintenance. | Clique sur « Réessayer ». Vérifie qu'EasyVista répond dans un onglet. En attendant, le planning en cache reste lisible. |
|
||||||
- [Le planning charge mais reste vide](#le-planning-charge-mais-reste-vide)
|
| Le planning s'ouvre sans aucune carte | Aucun technicien inclus, mauvais groupe, ou journée sans planning. | Contrôle le groupe et les cases « Inclure » dans l'onglet Équipe. |
|
||||||
- [Mauvais groupe affiché (SI-CSS au lieu de SI-EXT, etc.)](#mauvais-groupe-affiche)
|
| Les initiales restent sur « ? » | L'extension n'a pas encore identifié ton compte EasyVista. | Connecte-toi à EasyVista. L'extension réessaie seule, puis après chaque chargement réussi du planning. |
|
||||||
- [Pastille utilisateur reste sur "?"](#pastille-utilisateur-reste-sur-)
|
| Impossible de déplacer une intervention | Intervention terminée, clôturée, sur plusieurs jours, ou session expirée. Les réservations et les absences ne se déplacent pas. | Reconnecte-toi si besoin. Pour le reste, modifie l'intervention dans EasyVista. |
|
||||||
- [Refresh de l'extension après mise à jour Chrome](#refresh-de-lextension-apres-mise-a-jour-chrome)
|
| Aucun brouillon d'email après un déplacement | Option désactivée, ou déplacement dans la même journée pour le même technicien. | Onglet Email, « Activer l'email de déplacement ». Vérifie que ta messagerie est l'application de messagerie par défaut du poste. |
|
||||||
- [Le texte complet des actions ne s'affiche plus](#le-texte-complet-des-actions-ne-saffiche-plus)
|
| Les bulles épinglées disparaissent | Changer de date ferme les bulles épinglées. | Ouvre la fiche dans EasyVista (clic sur la référence) pour la garder sous les yeux. |
|
||||||
- [Récupérer les logs détaillés pour un rapport de bug](#recuperer-les-logs-detaillees-pour-un-rapport-de-bug)
|
| Le texte complet des actions manque dans les bulles | EasyVista a changé le format de ses réponses. | Mets l'extension à jour. Si la console (F12) affiche « format EasyVista non reconnu », signale-le. |
|
||||||
|
|
||||||
---
|

|
||||||
|
|
||||||
## « Aucun technicien sélectionné »
|
## Mises à jour
|
||||||
|
|
||||||
**Symptôme** : message en grand au milieu de l'extension :
|
**Firefox ne passe pas à la nouvelle version.** Firefox vérifie les mises à jour de lui-même. Pour forcer la vérification : `about:addons`, roue dentée, « Rechercher des mises à jour ». Rien ne vient ? Vérifie que tu as installé le fichier `.xpi` d'une publication, puis réinstalle-le depuis la [dernière publication](https://gitea.netaplaid.ch/FroSteel/Planification/releases/latest).
|
||||||
> *"Aucun technicien sélectionné. Ouvrez ⚙ Paramètres → Équipe pour choisir le groupe EasyVista et cocher les techniciens à afficher."*
|
|
||||||
|
|
||||||
**Cause** : depuis v2026.5.41, l'extension ne livre plus aucun technicien hardcodé. Au 1er install (ou après "Réinitialiser la configuration"), `cfg.team` est vide → le service worker refuse de fetcher avec une équipe vide et lève l'erreur `no_team_configured`.
|
**Chrome ou Edge affiche l'ancienne version.** Ces navigateurs ne mettent pas à jour une extension chargée depuis un dossier. Remplace le contenu du dossier par celui du nouveau `.zip`, puis clique sur le bouton de rechargement de la carte Planification dans `chrome://extensions`.
|
||||||
|
|
||||||
**Solution** : voir [Configuration initiale (1er install)](Utilisation#configuration-initiale-1er-install) sur le guide Utilisation. En 30 secondes : pastille initiales → ⚙ Paramètres → Équipe → choisir groupe → cocher les techs → 💾 Enregistrer.
|
## Synchronisation entre postes
|
||||||
|
|
||||||
---
|
Le bouton « Tester la communication » (onglet Synchronisation) indique l'étape qui bloque :
|
||||||
|
|
||||||
## « Session EasyVista expirée »
|
| Message | Solution |
|
||||||
|
|---|---|
|
||||||
|
| « Le script hôte ne répond pas » | Le script n'est pas installé ou s'est arrêté. Lance l'installation (voir [Installation](Installation#synchroniser-plusieurs-postes-facultatif)), puis redémarre le navigateur. |
|
||||||
|
| Script obsolète | Télécharge l'installeur et relance « Installer / Mettre a jour ». |
|
||||||
|
| « Aucun dossier partagé défini » | Colle le chemin du dossier de l'équipe dans le champ « Dossier partagé ». |
|
||||||
|
| « Le dossier n'a pas répondu » | Chemin injoignable, poste hors du réseau interne, ou droits insuffisants sur le dossier. |
|
||||||
|
|
||||||
**Symptôme** : bannière en haut ou écran plein indiquant que la session a expiré, parfois suivi d'un compteur MM:SS qui passe en rouge.
|
## Signaler un problème
|
||||||
|
|
||||||
**Cause** : EasyVista déconnecte automatiquement les sessions inactives après ~30 minutes. L'extension détecte ça quand un fetch retourne 401/403 ou une page de login.
|
1. Dans Réglages, onglet Diagnostics, coche « Logs verbeux (debug) ».
|
||||||
|
2. Reproduis le problème.
|
||||||
**Solutions** (par ordre rapide) :
|
3. Ouvre la console avec F12 et copie les lignes utiles.
|
||||||
1. Cliquer **🔄 Prolonger** dans la pastille utilisateur (popup haut gauche) — envoie un keep-alive et remet le compteur à 30 min.
|
4. **Relis ces lignes avant de les coller** : retire les noms, numéros de téléphone et adresses qu'elles pourraient contenir.
|
||||||
2. Si déjà expirée : cliquer **Ouvrir EasyVista** dans la bannière → te reconnecter via SSO Canton → revenir sur l'onglet Planification → l'extension détecte la nouvelle session automatiquement.
|
5. Ouvre un [ticket](https://gitea.netaplaid.ch/FroSteel/Planification/issues/new) avec ce que tu faisais, les étapes pour reproduire, la version (onglet À propos), ton navigateur et une capture sans données personnelles.
|
||||||
3. En télétravail externe : faut passer par `itsma.vd.ch` avec ton compte ForgeRock OpenAM (le SSO Kerberos interne ne fonctionne que sur le LAN DGNSI).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Depuis v2026.5.46**, les faux « Session expirée » (alors qu'on est connecté) sont corrigés : le rafraîchissement du cookie n'est plus pris pour une déconnexion, une erreur passagère ne déclenche plus la bannière (vérification serveur d'abord), et avec la permission cookies (Paramètres → Diagnostics) l'onglet EasyVista n'a même plus besoin de rester ouvert. Si la bannière apparaît encore à tort : ouvrir la console (F12) et chercher les messages du préfixe `session` — chaque cause de bascule est tracée — puis joindre ces lignes au rapport.
|
|
||||||
|
|
||||||
## « EasyVista est inaccessible »
|
|
||||||
|
|
||||||
**Symptôme** : bannière orange "EasyVista est inaccessible. Données affichées depuis le cache."
|
|
||||||
|
|
||||||
**Causes possibles** :
|
|
||||||
- Maintenance EasyVista côté Canton (rare mais arrive).
|
|
||||||
- Réseau coupé / VPN tombé pour les coordinateurs en télétravail.
|
|
||||||
- Bug temporaire EV (timeout, erreur 500).
|
|
||||||
|
|
||||||
**Solutions** :
|
|
||||||
1. Cliquer **Réessayer** dans la bannière (réessaye le fetch sans recharger toute l'extension).
|
|
||||||
2. Vérifier dans un autre onglet que `https://itsma.etat-de-vaud.ch/` ou `https://itsma.vd.ch/` répond.
|
|
||||||
3. Si EV répond : peut-être un problème de session — voir [Session EasyVista expirée](#session-easyvista-expiree).
|
|
||||||
4. Si EV ne répond pas : attendre, c'est probablement temporaire. L'extension continue d'afficher le cache local pendant ce temps.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Auto-update Firefox ne fonctionne pas
|
|
||||||
|
|
||||||
**Symptôme** : tu sais qu'une nouvelle version est sortie (collègue qui l'a, mention dans un message), mais ton extension reste sur l'ancienne version même après plusieurs jours.
|
|
||||||
|
|
||||||
**Cause** : Firefox vérifie `firefox-updates.json` toutes les ~24 h. Plusieurs raisons peuvent empêcher la détection :
|
|
||||||
- Tu as installé un `.xpi` **non signé** (mode développeur) — ces extensions ne s'auto-updatent pas.
|
|
||||||
- Le navigateur n'a pas eu de fenêtre temporelle pour faire le check (Firefox fermé pendant des jours).
|
|
||||||
- Le proxy / pare-feu bloque les requêtes vers `gitea.netaplaid.ch`.
|
|
||||||
|
|
||||||
**Solutions** :
|
|
||||||
1. Vérifier la version installée : `about:addons` → cliquer sur "Planification" → onglet "Détails" → numéro de version.
|
|
||||||
2. Forcer la vérification : `about:addons` → menu ⚙ (en haut à droite) → "Vérifier les mises à jour".
|
|
||||||
3. Si pas de mise à jour proposée : vérifier que l'extension est bien signée Mozilla (`about:addons` doit afficher un badge bleu de vérification, pas un avertissement).
|
|
||||||
4. En dernier recours : retélécharger manuellement le `.xpi` signé depuis la [release courante](https://gitea.netaplaid.ch/FroSteel/Planification/releases/latest), drag-and-drop dans `about:addons`.
|
|
||||||
|
|
||||||
➡ **Chrome / Edge** : il n'y a **PAS d'auto-update**. Tu dois toujours retélécharger le `.zip` manuellement à chaque nouvelle version, écraser ton dossier d'install, puis cliquer ⟳ (Recharger) dans `chrome://extensions/`.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Popups épinglés disparus après reload
|
|
||||||
|
|
||||||
**Symptôme** : tu avais épinglé une ou plusieurs popups d'intervention (📌), tu rafraîchis le planning ou tu changes de date, et les popups épinglés ont disparu.
|
|
||||||
|
|
||||||
**Cause** : les popups épinglés ne sont **pas persistés entre les rafraîchissements** ni entre les changements de date. C'est un comportement voulu (un popup épinglé est lié à une intervention spécifique d'un jour donné).
|
|
||||||
|
|
||||||
**Solutions** :
|
|
||||||
- Pour garder une vue détaillée d'une intervention : utiliser plutôt le bouton **"Ouvrir"** du popup pour ouvrir la fiche EasyVista dans un nouvel onglet, qui survit aux rafraîchissements.
|
|
||||||
- Pour avoir plusieurs interventions visibles en même temps : utiliser la **vue horizontale** (toggle ⊞ Vue dans la pastille utilisateur), qui montre plus d'infos à la fois.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Le planning charge mais reste vide
|
|
||||||
|
|
||||||
**Symptôme** : pas d'erreur, pas de bannière, l'icône de chargement se finit, mais aucune carte de tech n'apparaît.
|
|
||||||
|
|
||||||
**Causes possibles** :
|
|
||||||
1. **Aucun tech coché** dans Paramètres → Équipe → voir [« Aucun technicien sélectionné »](#aucun-technicien-selectionne).
|
|
||||||
2. **Mauvais groupe** sélectionné — voir [Mauvais groupe affiché](#mauvais-groupe-affiche).
|
|
||||||
3. **Date sans planning** : aucun tech n'a d'intervention ni d'absence ce jour-là (rare mais possible un jour férié).
|
|
||||||
4. **Filtre absences** : si tu as la vue horizontale et tous les techs sont absents (vacances scolaires…), ils peuvent être visuellement très condensés.
|
|
||||||
|
|
||||||
**Diagnostic** : ouvre **⚙ Paramètres → Diagnostics** et regarde :
|
|
||||||
- "Date courante" / "Aujourd'hui"
|
|
||||||
- "Session EasyVista" — doit afficher "✓ connecté"
|
|
||||||
- Active **"Logs verbeux"** et regarde la console (F12) pour voir si les fetches passent.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Mauvais groupe affiché
|
|
||||||
|
|
||||||
**Symptôme** : tu vois SI-CSS alors que tu travailles dans SI-EXT (ou inverse).
|
|
||||||
|
|
||||||
**Cause** : depuis v2026.5.40 le groupe est configurable. Si tu n'as rien changé depuis le 1er install, tu es sur le défaut SI-CSS (id `191`).
|
|
||||||
|
|
||||||
**Solution** : pastille initiales → ⚙ Paramètres → onglet **Équipe** → sélecteur **"Groupe EasyVista"** en tête → choisir SI-EXT (ou autre). La liste des techs en dessous se rafraîchit automatiquement avec les membres du nouveau groupe. Coche ceux à afficher → 💾 Enregistrer.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Pastille utilisateur reste sur "?"
|
|
||||||
|
|
||||||
**Symptôme** : la pastille en haut à gauche affiche "?" au lieu de tes initiales, même après quelques minutes.
|
|
||||||
|
|
||||||
**Cause** : l'extension n'arrive pas à identifier ton utilisateur EasyVista (échec du parsing de la page d'accueil EV après login).
|
|
||||||
|
|
||||||
**Solutions** :
|
|
||||||
1. Vérifier que tu es bien connecté à EV dans un autre onglet.
|
|
||||||
2. Recharger l'extension : `about:addons` ou `chrome://extensions` → ⟳.
|
|
||||||
3. Si le problème persiste : ouvrir une [issue](https://gitea.netaplaid.ch/FroSteel/Planification/issues/new) avec les logs verbeux activés (Diagnostics → Logs verbeux).
|
|
||||||
|
|
||||||
L'extension retente automatiquement la détection toutes les 60 s (max 10 essais), mais une fois échouée, elle abandonne et la pastille reste "?".
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Refresh de l'extension après mise à jour Chrome
|
|
||||||
|
|
||||||
**Symptôme** : tu as téléchargé une nouvelle version `.zip` Chromium et écrasé ton dossier d'install, mais Chrome affiche toujours l'ancienne version.
|
|
||||||
|
|
||||||
**Cause** : Chrome ne détecte pas automatiquement le changement de fichiers dans un dossier "non empaquetée".
|
|
||||||
|
|
||||||
**Solution** :
|
|
||||||
1. `chrome://extensions/` (ou `edge://extensions/`).
|
|
||||||
2. Trouver la carte "Planification".
|
|
||||||
3. Cliquer le bouton **⟳ (Recharger)** sur la carte (icône circulaire).
|
|
||||||
4. La version affichée doit maintenant correspondre à la nouvelle.
|
|
||||||
|
|
||||||
Si toujours l'ancienne : redémarrer entièrement Chrome après le ⟳.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Le texte complet des actions ne s'affiche plus
|
|
||||||
|
|
||||||
**Symptôme** : le planning se charge, mais les bulles n'affichent plus le texte détaillé des actions.
|
|
||||||
|
|
||||||
**Cause la plus fréquente** : une mise à jour d'EasyVista a changé le format de ses réponses (vécu le 29 septembre 2026, corrigé en v2026.5.50).
|
|
||||||
|
|
||||||
**À faire** :
|
|
||||||
1. Vérifier que l'extension est à jour (Firefox se met à jour tout seul ; Chrome : installer la dernière release).
|
|
||||||
2. Ouvrir la console (F12). Si le message « format EasyVista non reconnu : texte des actions indisponible » apparaît, EasyVista a encore changé de format : ouvrir une issue en y collant ce message (il ne contient aucune donnée personnelle).
|
|
||||||
|
|
||||||
## Récupérer les logs détaillés pour un rapport de bug
|
|
||||||
|
|
||||||
Si tu rencontres un bug et que tu veux en faire un rapport propre :
|
|
||||||
|
|
||||||
1. **Activer les logs verbeux** : pastille initiales → ⚙ Paramètres → onglet **Diagnostics** → toggle **"Logs verbeux (debug)"** sur ON.
|
|
||||||
2. **Reproduire** le bug.
|
|
||||||
3. **Ouvrir DevTools** : `F12` (ou clic droit dans la fenêtre extension → Inspecter).
|
|
||||||
4. **Onglet Console** : sélectionner tous les logs (`Cmd+A` ou `Ctrl+A`), copier (`Cmd+C` / `Ctrl+C`).
|
|
||||||
5. **[Ouvrir une issue](https://gitea.netaplaid.ch/FroSteel/Planification/issues/new)** avec :
|
|
||||||
- Description courte du bug
|
|
||||||
- Étapes pour reproduire
|
|
||||||
- Capture d'écran de ce qui pose problème
|
|
||||||
- Logs console copiés (entre triple backticks ``` pour le formatage)
|
|
||||||
- Version de l'extension (visible dans Paramètres → À propos)
|
|
||||||
- Navigateur + OS
|
|
||||||
|
|
||||||
Les logs sont préfixés `[HH:MM:SS.mmm][vX.Y.Z][module][LEVEL]` ce qui permet à l'auteur de retrouver rapidement la cause sans devoir reproduire localement.
|
|
||||||
|
|
||||||
|
Décoche « Logs verbeux » une fois le ticket envoyé.
|
||||||
|
|||||||
@@ -1,107 +1,35 @@
|
|||||||
# Planification — Extension EasyVista
|
# Planification
|
||||||
|
|
||||||
> Extension Chrome / Firefox utilisée par les **coordinateurs DGNSI** pour
|
Planification est une extension pour Firefox, Chrome et Edge. Elle affiche le planning EasyVista de l'équipe technicienne de la DGNSI (Canton de Vaud) : une carte par technicien, une frise horaire, les absences et les conflits en couleur.
|
||||||
> piloter dans EasyVista le planning de l'équipe technicienne (Canton de
|
|
||||||
> Vaud) — visualisation claire, rapide et lisible des interventions,
|
|
||||||
> réservations, absences et conflits d'horaire au quotidien.
|
|
||||||
>
|
|
||||||
> Développée par **FroSteel**, Technicien DGNSI — Canton de Vaud.
|
|
||||||
|
|
||||||
---
|

|
||||||
|
|
||||||
## Démarrage rapide
|
## Pour qui
|
||||||
|
|
||||||
### Installation
|
Pour les coordinateurs qui répartissent les interventions entre les techniciens dans EasyVista, sur `itsma.etat-de-vaud.ch` (réseau interne) ou `itsma.vd.ch` (Internet).
|
||||||
|
|
||||||
**Firefox 🦊 (recommandé — auto-update)**
|
## Ce qu'elle fait
|
||||||
1. Télécharger le `.xpi` signé depuis la **[release courante](https://gitea.netaplaid.ch/FroSteel/Planification/releases/latest)**.
|
|
||||||
2. Drag-and-drop le `.xpi` dans `about:addons`.
|
|
||||||
3. Cliquer "Ajouter".
|
|
||||||
→ L'extension se met à jour **automatiquement** à chaque nouvelle version (auto-update natif Firefox toutes les ~24 h via `update_url`).
|
|
||||||
|
|
||||||
**Chrome / Edge / Brave 🌐 (manuel)**
|
- Elle lit le planning, les fiches et les absences dans EasyVista, avec ta propre session.
|
||||||
1. Télécharger le `.zip` depuis la **[release courante](https://gitea.netaplaid.ch/FroSteel/Planification/releases/latest)**.
|
- Elle écrit dans EasyVista seulement quand tu le demandes : déplacer une intervention ou changer son horaire, créer ou supprimer une réservation ou une absence, poser un service pompier, envoyer le planning sur la douchette.
|
||||||
2. Décompresser dans un dossier permanent.
|
- Elle garde les journées consultées en cache sur ton poste. Avec le script de synchronisation, elle partage ce cache avec les autres postes par un dossier réseau.
|
||||||
3. `chrome://extensions/` (ou `edge://extensions/`) → activer **Mode développeur** → "Charger l'extension non empaquetée" → choisir le dossier.
|
|
||||||
|
|
||||||
### Premiers pas
|
## Ce qu'elle ne fait pas
|
||||||
|
|
||||||
1. **Ouvrir EasyVista** dans un onglet (interne `itsma.etat-de-vaud.ch` ou externe `itsma.vd.ch` avec SSO Canton).
|
- Elle ne remplace pas EasyVista : les fiches s'ouvrent dans EasyVista.
|
||||||
2. **Cliquer sur l'icône** Planification dans la barre d'outils.
|
- Elle n'envoie aucun email. Après un déplacement, elle ouvre un brouillon que tu relis et envoies toi-même.
|
||||||
3. **Configurer ton équipe** : pastille initiales (haut gauche) → ⚙ Paramètres → Équipe → choisir le groupe EasyVista (SI-CSS / SI-EXT / …) → cocher les techniciens à afficher → 💾 Enregistrer.
|
- Sans session EasyVista, elle montre le planning déjà en cache et bloque toute modification.
|
||||||
|
|
||||||
L'extension détecte automatiquement ta session EasyVista et charge le planning du jour.
|
## Pour commencer
|
||||||
|
|
||||||
📖 Détail complet : **[Guide d'utilisation](Utilisation)** — navigation, popups, modes d'affichage, paramètres, dépannage.
|
1. [Installation](Installation) : Firefox ou Chrome et Edge, puis le choix de ton équipe.
|
||||||
|
2. [Utilisation](Utilisation) : lire le planning, déplacer une intervention, rechercher.
|
||||||
|
3. [Réglages](R%C3%A9glages) : affichage, équipe, emails, synchronisation.
|
||||||
|
|
||||||
---
|
Un problème ? Consulte le [Dépannage](D%C3%A9pannage) ou ouvre un [ticket](https://gitea.netaplaid.ch/FroSteel/Planification/issues/new).
|
||||||
|
|
||||||
## Pages du wiki
|
## Version
|
||||||
|
|
||||||
| Page | Contenu |
|
Version publiée : **2026.5.50** ([notes de version](https://gitea.netaplaid.ch/FroSteel/Planification/releases/tag/v2026.5.50), [historique](Versions)).
|
||||||
|---|---|
|
|
||||||
| **[Utilisation](Utilisation)** | Guide complet : installation par navigateur, navigation, raccourcis, modes d'affichage, paramètres |
|
|
||||||
| **[Versions](Versions)** | Historique des versions et système de versionning `YYYY.M.PATCH` |
|
|
||||||
| **[Architecture](Architecture)** | Structure du projet, composants, fonctions clés, helpers de config (technique) |
|
|
||||||
| **[Dépannage](D%C3%A9pannage)** | Erreurs courantes et leurs solutions |
|
|
||||||
| **[Contact](Contact)** | Reporting bugs, suggestions, demandes diverses |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Le contexte
|
|
||||||
|
|
||||||
À la DGNSI, deux rôles travaillent main dans la main sur les interventions du jour :
|
|
||||||
|
|
||||||
- Les **coordinateurs** affectent les interventions aux techniciens dans EasyVista — ils choisissent qui fait quoi, où, à quelle heure, en arbitrant entre disponibilités, compétences et priorités.
|
|
||||||
- Les **techniciens** consultent leur planning du jour sur leur **douchette** une fois sur le terrain.
|
|
||||||
|
|
||||||
C'est côté coordinateur que se joue toute l'organisation de la journée — et c'est précisément là qu'EasyVista pose problème.
|
|
||||||
|
|
||||||
### Le problème de départ
|
|
||||||
|
|
||||||
Le planning natif d'EasyVista n'a jamais été l'outil idéal pour ce travail :
|
|
||||||
|
|
||||||
- **Lisibilité faible** : tickets mélangés dans une grille tabulaire, sans distinction visuelle immédiate entre interventions, réservations, absences, statuts pompiers ou conflits d'horaire.
|
|
||||||
- **Peu intuitif** : pour avoir une vue d'ensemble de l'équipe, il faut multiplier les clics et naviguer ticket par ticket.
|
|
||||||
- **Lourd à l'usage** : chaque action prend plusieurs étapes là où on aimerait un simple coup d'œil.
|
|
||||||
|
|
||||||
Et au fil des mises à jour, plusieurs fonctionnalités utiles ont disparu (filtres rapides, raccourcis vers les fiches, vues compactes). Concrètement pour un coordinateur : travail plus pénible, charge mentale accrue, plus d'erreurs, mauvaise optimisation du planning.
|
|
||||||
|
|
||||||
### La réponse
|
|
||||||
|
|
||||||
**Planification** transforme les données déjà présentes dans EasyVista en une vue immédiatement lisible :
|
|
||||||
|
|
||||||
- Chaque tech sur **sa propre carte** (ou ligne en vue horizontale) avec une **timeline horaire** complète qui rend les disponibilités évidentes au premier coup d'œil.
|
|
||||||
- **Catégories d'absence** distinguées par couleur (Maladie / Congé / Pompier).
|
|
||||||
- **Infos clés** (référence, contact, lieu, catégorie, statut) accessibles **au survol sans clic**.
|
|
||||||
- **Conflits d'horaire** détectés automatiquement et signalés en rouge plein.
|
|
||||||
- **Bascule rapide** entre vue cards (détail) et vue horizontale (équipe pleine largeur).
|
|
||||||
- **Interventions cliquables** : ouverture directe de la fiche EasyVista dans un nouvel onglet.
|
|
||||||
|
|
||||||
Le tout fonctionne en **lecture seule** sur EasyVista (sauf création d'absence et envoi sur douchette) : aucune perturbation des données serveur, juste une présentation différente.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Aperçu technique
|
|
||||||
|
|
||||||
| Élément | Valeur |
|
|
||||||
|---|---|
|
|
||||||
| Manifest | V3 (Chrome / Edge / Firefox 140+) |
|
|
||||||
| Architecture | Service worker + viewer (HTML/CSS/JS vanilla) |
|
|
||||||
| Lignes de code | ~10 700 (viewer.js) + ~1 600 (background.js) + ~4 800 (viewer.css) |
|
|
||||||
| Domaines cibles | `itsma.etat-de-vaud.ch` (interne), `itsma.vd.ch` (externe SSO) |
|
|
||||||
| SSO | Canton ForgeRock OpenAM |
|
|
||||||
| Stockage | `chrome.storage.local` (cache + `admin_config`) + `localStorage` (`view_mode`) |
|
|
||||||
| Auto-update Firefox | `firefox-updates.json` à la racine, `.xpi` signé Mozilla |
|
|
||||||
| Licence | MIT |
|
|
||||||
|
|
||||||
➡ Détail technique : **[Architecture](Architecture)**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Auteur & Licence
|
|
||||||
|
|
||||||
**FroSteel** (FRS) — Technicien DGNSI, Canton de Vaud — voir page **[Contact](Contact)**.
|
|
||||||
|
|
||||||
Code et documentation publiés sous **[MIT License](https://opensource.org/licenses/MIT)** — © 2026.
|
|
||||||
|
|
||||||
|
Auteur : Quentin Rouiller. Code publié sous [licence MIT](https://gitea.netaplaid.ch/FroSteel/Planification/src/branch/main/LICENSE).
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
# Installation
|
||||||
|
|
||||||
|
Cette page explique comment installer l'extension, choisir ton équipe et, si tu le souhaites, partager le planning entre plusieurs postes.
|
||||||
|
|
||||||
|
Les fichiers se trouvent dans la [dernière publication](https://gitea.netaplaid.ch/FroSteel/Planification/releases/latest) :
|
||||||
|
|
||||||
|
| Fichier | Pour |
|
||||||
|
|---|---|
|
||||||
|
| `planification-vAAAA.M.P-firefox.xpi` | Firefox 140 ou supérieur. Fichier signé par Mozilla, mises à jour automatiques. |
|
||||||
|
| `planification-vAAAA.M.P-chromium.zip` | Chrome et Edge. Mises à jour à faire à la main. |
|
||||||
|
| `planification-native-host.zip` | Script Windows de synchronisation entre postes. Facultatif. |
|
||||||
|
|
||||||
|
## Firefox (recommandé)
|
||||||
|
|
||||||
|
1. Télécharge le fichier `.xpi` de la dernière publication.
|
||||||
|
2. Ouvre `about:addons` dans Firefox.
|
||||||
|
3. Glisse le fichier sur la page, ou passe par la roue dentée puis « Installer un module depuis un fichier… ».
|
||||||
|
4. Confirme avec « Ajouter ».
|
||||||
|
|
||||||
|
Firefox installe ensuite chaque nouvelle version tout seul. Pour lancer la vérification sans attendre : `about:addons`, roue dentée, « Rechercher des mises à jour ».
|
||||||
|
|
||||||
|
## Chrome et Edge
|
||||||
|
|
||||||
|
1. Télécharge le fichier `.zip` de la dernière publication.
|
||||||
|
2. Extrais-le dans un dossier que tu gardes, par exemple `Documents\Planification`. L'extension tourne depuis ce dossier : ne le supprime pas.
|
||||||
|
3. Ouvre `chrome://extensions` (ou `edge://extensions`).
|
||||||
|
4. Active le « Mode développeur ».
|
||||||
|
5. Clique sur « Charger l'extension non empaquetée » (Edge : « Charger l'extension décompressée ») et choisis le dossier qui contient `manifest.json`.
|
||||||
|
|
||||||
|
> **Bon à savoir** : Chrome et Edge ne mettent pas à jour une extension chargée de cette façon. Voir [Mettre à jour](#mettre-à-jour).
|
||||||
|
|
||||||
|
## Premier lancement : choisir ton équipe
|
||||||
|
|
||||||
|
1. Connecte-toi à EasyVista dans un onglet.
|
||||||
|
2. Clique sur l'icône Planification dans la barre d'outils du navigateur. Le planning s'ouvre dans son propre onglet.
|
||||||
|
3. À la première ouverture, tu n'as encore choisi aucune équipe. Clique sur « Ouvrir paramètres » dans la carte « Aucune équipe configurée ».
|
||||||
|
4. Dans l'onglet Équipe, choisis ton groupe EasyVista, coche les techniciens à afficher, puis clique sur « Enregistrer ».
|
||||||
|
|
||||||
|
Le planning du jour se charge aussitôt. Tes réglages restent en place d'une version à l'autre. Le détail de chaque onglet est dans [Réglages](R%C3%A9glages).
|
||||||
|
|
||||||
|
## Synchroniser plusieurs postes (facultatif)
|
||||||
|
|
||||||
|
Avec la synchronisation, les postes de l'équipe partagent le planning enrichi par un dossier réseau : statuts, détails des fiches, informations des réservations. Chaque poste Windows a besoin d'un petit script, installé une fois.
|
||||||
|
|
||||||
|
1. Dans l'extension : clic sur tes initiales, « Paramètres », onglet « Synchronisation », puis « Télécharger l'installeur ». Le fichier `planification-native-host.zip` se télécharge.
|
||||||
|
2. Extrais le zip, puis double-clique sur `Gerer.cmd`. Si Windows affiche « Windows a protégé votre ordinateur », clique sur « Informations complémentaires » puis « Exécuter quand même » : le script n'a pas de signature Microsoft.
|
||||||
|
3. Dans la fenêtre qui s'ouvre, clique sur « Installer / Mettre a jour » et attends le message « Installation / mise a jour terminee. ». Aucun droit administrateur n'est nécessaire.
|
||||||
|
4. Ferme toutes les fenêtres du navigateur, puis rouvre-le.
|
||||||
|
5. Retourne dans l'onglet « Synchronisation » et colle le chemin du dossier partagé de l'équipe dans le champ « Dossier partagé ». Le champ s'enregistre quand tu cliques ailleurs.
|
||||||
|
6. Clique sur « Tester la communication » pour vérifier toute la chaîne.
|
||||||
|
|
||||||
|
Champ vide : la synchronisation reste désactivée et l'extension fonctionne avec son seul cache local.
|
||||||
|
|
||||||
|
## Mettre à jour
|
||||||
|
|
||||||
|
- **Firefox** : rien à faire, la mise à jour arrive toute seule.
|
||||||
|
- **Chrome et Edge** : télécharge le nouveau `.zip`, remplace le contenu de ton dossier d'installation, puis clique sur le bouton de rechargement de la carte Planification dans `chrome://extensions`.
|
||||||
|
- **Script de synchronisation** : si l'onglet « Synchronisation » annonce un script obsolète, télécharge l'installeur, relance `Gerer.cmd` et clique sur « Installer / Mettre a jour ».
|
||||||
|
|
||||||
|
## Désinstaller
|
||||||
|
|
||||||
|
- **Firefox** : `about:addons`, menu de la carte Planification, « Supprimer ».
|
||||||
|
- **Chrome et Edge** : `chrome://extensions`, bouton « Supprimer » de la carte Planification, puis supprime le dossier d'installation.
|
||||||
|
- **Script de synchronisation** : `Gerer.cmd`, bouton « Desinstaller ».
|
||||||
|
|
||||||
|
La désinstallation efface les réglages et le cache local de l'extension. Pour les garder, exporte d'abord tes paramètres (voir [Réglages](R%C3%A9glages)).
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# Réglages
|
||||||
|
|
||||||
|
Cette page décrit chaque onglet des Paramètres. Pour les ouvrir : clic sur tes initiales, à côté du titre Planification, puis « Paramètres ». La fenêtre « Administration » s'ouvre ; Échap la ferme.
|
||||||
|
|
||||||
|
## Apparence
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
| Réglage | Effet |
|
||||||
|
|---|---|
|
||||||
|
| Thème | Automatique (selon l'OS), Clair ou Sombre. Le bouton 🌙 / ☀️ de la barre du haut modifie le même réglage. |
|
||||||
|
| Taille du texte | Curseur de taille, 100 % par défaut. |
|
||||||
|
| Heures de la journée | Plage de la frise, 8 h à 18 h par défaut. Clique sur « Appliquer » : le planning se recharge avec la nouvelle plage. |
|
||||||
|
| Couleur de la barre du haut | Douze couleurs prêtes, ou une couleur perso au format `#rrggbb`. Le texte passe en clair ou en foncé pour rester lisible. |
|
||||||
|
| Police de l'application | Police de toute la page. |
|
||||||
|
| Afficher les pauses | Montre un rectangle entre deux interventions qui ne se suivent pas. |
|
||||||
|
| Vue horizontale : échelle de temps exacte | Place chaque intervention à son heure réelle en vue horizontale. Exclusif avec « Afficher les pauses ». |
|
||||||
|
| Mode coordinateur | Fonction en développement, désactivée par défaut. |
|
||||||
|
|
||||||
|
## Équipe
|
||||||
|
|
||||||
|
Choisis ici qui apparaît dans le planning.
|
||||||
|
|
||||||
|
1. **Groupe EasyVista** : la liste vient d'EasyVista à l'ouverture de l'onglet. Changer de groupe recharge la liste des personnes.
|
||||||
|
2. **Tableau** : coche « Inclure » pour chaque technicien à afficher. La colonne Email sert aux brouillons d'email. La colonne « Absences récurrentes » marque un jour d'absence fixe par semaine.
|
||||||
|
3. **Enregistrer** : le planning se met à jour tout de suite.
|
||||||
|
|
||||||
|
Adresses email :
|
||||||
|
|
||||||
|
- « Récupérer les emails » cherche dans l'annuaire EasyVista les adresses manquantes. Une adresse saisie à la main n'est jamais remplacée. La même recherche complète un nom affiché tronqué.
|
||||||
|
- Le login EasyVista fiabilise cette recherche quand deux personnes portent le même nom.
|
||||||
|
- « Domaine des adresses » : sans adresse saisie, l'extension propose `prenom.nom@domaine`.
|
||||||
|
|
||||||
|
Le bouton « Réinitialiser les absences récurrentes » remet ces cases à zéro si elles sont incohérentes.
|
||||||
|
|
||||||
|
## Email
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Les emails restent des brouillons : l'extension ouvre ta messagerie, tu relis et tu envoies.
|
||||||
|
|
||||||
|
- **Copie (CC)** : adresses mises en copie de chaque brouillon. L'aperçu montre les adresses retenues ; une adresse invalide ne part pas en copie.
|
||||||
|
- **Email de déplacement** : « Activer l'email de déplacement » ouvre un brouillon après un déplacement vers un autre jour ou un autre technicien.
|
||||||
|
- **Email d'annulation / suppression** : « Activer l'email d'annulation » ouvre un brouillon pour le technicien quand tu supprimes une de ses réservations.
|
||||||
|
|
||||||
|
Chaque email a son modèle, sujet et message. Les `{variables}` se remplacent au moment du brouillon : un clic sur une variable l'insère à l'endroit du curseur, et l'aperçu montre le résultat sur un exemple fictif. « Rétablir le modèle de base » remet le texte d'origine.
|
||||||
|
|
||||||
|
## EasyVista
|
||||||
|
|
||||||
|
- **Domaines** : `https://itsma.etat-de-vaud.ch` (réseau interne) et `https://itsma.vd.ch` (Internet), déjà remplis. Ne les change que si EasyVista change d'adresse. Pour un autre domaine, le navigateur te demande l'autorisation d'y accéder. « Réinitialiser aux valeurs par défaut » remet les deux adresses d'origine.
|
||||||
|
- **Statuts EasyVista** : les libellés qui signifient « Clôturé / Résolu (✓✓ vert) ». La comparaison ignore les majuscules et les accents.
|
||||||
|
- **Gérer les sessions multi-onglets EZV** : autorise l'extension à lire le cookie de session d'EasyVista. Elle reste alors connectée avec plusieurs onglets EasyVista, ou après la fermeture de l'onglet. Le bandeau « Multi-onglets EasyVista » propose la même autorisation (« Activer » ou « Ne plus afficher »).
|
||||||
|
|
||||||
|
## Synchronisation
|
||||||
|
|
||||||
|
Cet onglet relie l'extension au dossier partagé de l'équipe. La page [Installation](Installation#synchroniser-plusieurs-postes-facultatif) décrit l'installation du script.
|
||||||
|
|
||||||
|
- **État de la synchronisation** : script installé ou non, à jour ou obsolète. « Re-vérifier l'état » relance le contrôle.
|
||||||
|
- **Dossier partagé** : chemin UNC ou lecteur réseau. Vide, la synchronisation reste désactivée.
|
||||||
|
- **Télécharger l'installeur** : le zip du script, pour la version installée de l'extension.
|
||||||
|
- **Tester la communication** : vérifie l'extension, le script et le dossier, et dit à quelle étape ça bloque.
|
||||||
|
- **Journal d'activité (en direct)** : ce que fait le script, avec « Ouvrir dans un onglet » pour le lire en grand.
|
||||||
|
|
||||||
|
## Données
|
||||||
|
|
||||||
|
- **Durée du cache (jours)** : au-delà, l'extension efface les anciens jours du cache local. 7 jours par défaut.
|
||||||
|
- **Exporter le cache** et **Importer un cache** : fichier `.json`, un export complet ou un seul jour.
|
||||||
|
- **Exporter les paramètres** et **Importer les paramètres** : pour changer de poste ou garder une sauvegarde. L'import remplace les paramètres courants, sans fusion.
|
||||||
|
|
||||||
|
## Diagnostics
|
||||||
|
|
||||||
|
- État de l'extension : version, date, session EasyVista, nombre de bulles épinglées.
|
||||||
|
- **Logs verbeux (debug)** : détaille chaque étape dans la console (F12). Utile pour un rapport de bug.
|
||||||
|
- **Garder les disparitions** : garde à l'écran les interventions disparues d'EasyVista, au lieu de les retirer.
|
||||||
|
- **Réinitialiser la configuration** : remet tous les réglages par défaut, après confirmation. Exporte d'abord tes paramètres si tu veux pouvoir revenir en arrière.
|
||||||
|
|
||||||
|
## À propos
|
||||||
|
|
||||||
|
Version, auteur, licence MIT et lien vers le code source.
|
||||||
@@ -1,536 +1,206 @@
|
|||||||
# Guide d'utilisation
|
# Utilisation
|
||||||
|
|
||||||
Ce guide couvre toutes les fonctionnalités de l'extension **Planification** au fur et à mesure de leur découverte naturelle.
|
Cette page décrit l'écran de la Planification dans l'ordre où tu t'en sers : ouvrir le planning, le lire, le modifier, rechercher.
|
||||||
|
|
||||||
## Sommaire
|
## Sommaire
|
||||||
|
|
||||||
- [Installation et navigateurs](#installation-et-navigateurs)
|
- [Ouvrir le planning](#ouvrir-le-planning)
|
||||||
- [Premier lancement](#premier-lancement)
|
- [La barre du haut](#la-barre-du-haut)
|
||||||
- [Configuration initiale (1er install)](#configuration-initiale-1er-install)
|
|
||||||
- [La topbar (vue classique)](#la-topbar-vue-classique)
|
|
||||||
- [Les cartes des techniciens](#les-cartes-des-techniciens)
|
- [Les cartes des techniciens](#les-cartes-des-techniciens)
|
||||||
- [La timeline](#la-timeline)
|
- [La frise horaire](#la-frise-horaire)
|
||||||
- [La vue « échelle de temps exacte » (v2026.5.46)](#la-vue--échelle-de-temps-exacte--v2026546)
|
- [Les bulles d'information](#les-bulles-dinformation)
|
||||||
- [Les popups d'intervention](#les-popups-dintervention)
|
- [La vue horizontale](#la-vue-horizontale)
|
||||||
- [Les deux modes d'affichage](#les-deux-modes-daffichage)
|
- [L'échelle de temps exacte](#léchelle-de-temps-exacte)
|
||||||
- [Le badge utilisateur (initiales)](#le-badge-utilisateur-initiales)
|
- [Déplacer une intervention](#déplacer-une-intervention)
|
||||||
- [La gestion de session EasyVista](#la-gestion-de-session-easyvista)
|
- [Le dock](#le-dock)
|
||||||
- [Les paramètres](#les-paramètres)
|
- [Ajouter une réservation, une absence ou un pompier](#ajouter-une-réservation-une-absence-ou-un-pompier)
|
||||||
- [Prévenir par email après un déplacement (v2026.5.48)](#prévenir-par-email-après-un-déplacement-v2026548)
|
- [Envoyer sur la douchette](#envoyer-sur-la-douchette)
|
||||||
- [La recherche](#la-recherche)
|
- [Rechercher](#rechercher)
|
||||||
- [Cas particuliers](#cas-particuliers)
|
- [Prévenir les techniciens par email](#prévenir-les-techniciens-par-email)
|
||||||
- [Voir aussi : Dépannage](D%C3%A9pannage)
|
- [La session EasyVista](#la-session-easyvista)
|
||||||
|
- [Couleurs](#couleurs)
|
||||||
|
- [Raccourcis](#raccourcis)
|
||||||
|
|
||||||
---
|
## Ouvrir le planning
|
||||||
|
|
||||||
## Installation et navigateurs
|
Clique sur l'icône Planification dans la barre d'outils du navigateur. Le planning s'ouvre dans son propre onglet, ou reprend l'onglet déjà ouvert. L'extension utilise ta session EasyVista : connecte-toi à EasyVista dans un autre onglet si ce n'est pas déjà fait.
|
||||||
|
|
||||||
L'extension fonctionne sur **Firefox** et sur les navigateurs **Chromium** (Chrome, Edge, Brave). Le code et les fonctionnalités sont identiques, mais l'installation, le stockage et les mises à jour diffèrent légèrement entre les deux familles.
|
Au démarrage, l'extension affiche la journée en cache, puis la met à jour depuis EasyVista.
|
||||||
|
|
||||||
### Firefox 🦊
|
## La barre du haut
|
||||||
|
|
||||||
**Installation** :
|
|
||||||
1. Télécharger le `.xpi` **signé Mozilla** depuis la [release courante](https://gitea.netaplaid.ch/FroSteel/Planification/releases) (fichier `planification-vX.Y.Z-firefox.xpi`).
|
|
||||||
2. Drag-and-drop le fichier dans `about:addons` de Firefox.
|
|
||||||
3. Cliquer "Ajouter" — Firefox vérifie la signature Mozilla, l'installe.
|
|
||||||
|
|
||||||
**Mises à jour** : **automatiques**. Firefox vérifie toutes les ~24 h le manifest d'update (`firefox-updates.json` à la racine du repo Gitea), détecte les nouvelles versions, télécharge le `.xpi` signé correspondant, vérifie son sha256 et l'installe silencieusement. Aucune action requise du coordinateur.
|
|
||||||
|
|
||||||
**Désinstallation** : `about:addons` → cliquer sur "Planification" → "Supprimer".
|
|
||||||
|
|
||||||
**Stockage local** :
|
|
||||||
- **Mac** : `~/Library/Application Support/Firefox/Profiles/<profile>/storage/default/moz-extension+++<extension-uuid>/`
|
|
||||||
- **Windows** : `%APPDATA%\Mozilla\Firefox\Profiles\<profile>\storage\default\moz-extension+++<extension-uuid>\`
|
|
||||||
- **Linux** : `~/.mozilla/firefox/<profile>/storage/default/moz-extension+++<extension-uuid>/`
|
|
||||||
|
|
||||||
Le contenu (cache des plannings + `admin_config`) **survit aux mises à jour de l'extension**. Pour réinitialiser : Paramètres → Diagnostics → "Réinitialiser la configuration" (méthode propre), ou supprimer manuellement le dossier ci-dessus.
|
|
||||||
|
|
||||||
### Chromium 🌐 (Chrome, Edge, Brave)
|
|
||||||
|
|
||||||
**Installation** (mode développeur) :
|
|
||||||
1. Télécharger le `.zip` depuis la [release courante](https://gitea.netaplaid.ch/FroSteel/Planification/releases) (fichier `planification-vX.Y.Z-chromium.zip`).
|
|
||||||
2. Décompresser dans un dossier permanent (ex: `~/Documents/Planification-extension/`).
|
|
||||||
3. Ouvrir `chrome://extensions/` (ou `edge://extensions/`).
|
|
||||||
4. Activer **"Mode développeur"** (toggle en haut à droite).
|
|
||||||
5. Cliquer **"Charger l'extension non empaquetée"** → sélectionner le dossier décompressé.
|
|
||||||
|
|
||||||
**Mises à jour** : **manuelles**. Chrome ne fait pas d'auto-update pour les extensions chargées en "non empaquetées". Quand une nouvelle version sort :
|
|
||||||
1. Re-télécharger le nouveau `.zip` depuis la release Gitea.
|
|
||||||
2. Remplacer le contenu du dossier d'installation.
|
|
||||||
3. Dans `chrome://extensions/` → cliquer le bouton "Recharger" ⟳ sur la carte Planification.
|
|
||||||
|
|
||||||
**Désinstallation** : `chrome://extensions/` → bouton "Supprimer" sur la carte Planification.
|
|
||||||
|
|
||||||
**Stockage local** :
|
|
||||||
- **Mac** : `~/Library/Application Support/Google/Chrome/Default/Extensions/<extension-id>/` (code) + `~/Library/Application Support/Google/Chrome/Default/Local Extension Settings/<extension-id>/` (données `chrome.storage.local`)
|
|
||||||
- **Windows** : `%LOCALAPPDATA%\Google\Chrome\User Data\Default\Extensions\<extension-id>\`
|
|
||||||
- **Linux** : `~/.config/google-chrome/Default/Extensions/<extension-id>/`
|
|
||||||
|
|
||||||
(Pour Edge, remplacer `Google/Chrome` par `Microsoft/Edge`. Pour Brave, par `BraveSoftware/Brave-Browser`.)
|
|
||||||
|
|
||||||
Le contenu (cache + `admin_config`) **survit aux rechargements** de l'extension par "Recharger ⟳", mais peut être perdu si tu **supprimes puis re-installes** l'extension (l'ID change).
|
|
||||||
|
|
||||||
### Tableau comparatif
|
|
||||||
|
|
||||||
| | **Firefox** | **Chromium** |
|
|
||||||
|---|---|---|
|
|
||||||
| Format de distribution | `.xpi` signé Mozilla | `.zip` non packagé |
|
|
||||||
| Mode d'installation | Drag-and-drop dans `about:addons` | Mode développeur + dossier décompressé |
|
|
||||||
| Signature requise | ✅ Mozilla (auto par FroSteel pour chaque version) | ❌ Aucune |
|
|
||||||
| **Auto-update** | ✅ Natif (24h max) | ❌ Manuel (recharger ⟳) |
|
|
||||||
| Survit aux updates | ✅ | ✅ |
|
|
||||||
| Persistance du `admin_config` | ✅ | ✅ tant que l'extension n'est pas désinstallée |
|
|
||||||
| Compteur session EV | ✅ | ✅ |
|
|
||||||
| Auto-fetch périodique du planning | ✅ | ✅ |
|
|
||||||
|
|
||||||
### Choix recommandé pour les coordinateurs DGNSI
|
|
||||||
|
|
||||||
**Firefox est recommandé** pour la majorité des coordinateurs, car :
|
|
||||||
- L'auto-update évite de devoir re-télécharger à chaque correction
|
|
||||||
- Pas besoin d'activer le mode développeur (qui peut être bloqué par GPO)
|
|
||||||
- Installation 1-clic via `about:addons`
|
|
||||||
|
|
||||||
**Chromium reste utilisable** pour les coordinateurs qui préfèrent rester sur Chrome/Edge ou ceux dont le profil Firefox n'est pas configuré pour le SSO Canton. Mais ils devront être notifiés manuellement à chaque nouvelle version.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Premier lancement
|
|
||||||
|
|
||||||
À l'ouverture de l'extension, la fenêtre Planification affiche le **planning du jour** des techniciens cochés dans Paramètres → Équipe. Si une session EasyVista est ouverte dans un autre onglet, les données arrivent en quelques secondes.
|
|
||||||
|
|
||||||
> ⚠️ **Premier install ?** Aucune équipe n'est sélectionnée par défaut depuis v2026.5.41. Le viewer affiche *"Aucun technicien sélectionné"* tant que tu n'as rien configuré. Voir [Configuration initiale (1er install)](#configuration-initiale-1er-install) pour la procédure.
|
|
||||||
|
|
||||||
Si aucune session n'est détectée :
|
|
||||||
- Un message **"Session EasyVista expirée"** apparaît
|
|
||||||
- Cliquer sur **Ouvrir EasyVista** ouvre l'onglet de connexion
|
|
||||||
- Une fois connecté, retourner sur l'onglet Planification — la session est détectée automatiquement
|
|
||||||
|
|
||||||
Si EasyVista est inaccessible (panne, maintenance) :
|
|
||||||
- L'extension affiche les **données du cache local** avec une bannière d'avertissement
|
|
||||||
- Cliquer **Réessayer** une fois EV rétabli
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Configuration initiale (1er install)
|
|
||||||
|
|
||||||
Au premier démarrage après installation, **aucun technicien n'est sélectionné** et **aucune absence récurrente n'est configurée** (depuis v2026.5.41). Depuis **v2026.5.44**, le viewer affiche une **carte d'onboarding centrée** avec :
|
|
||||||
|
|
||||||
- une icône (👥) cerclée en couleur accent
|
|
||||||
- le titre **« Aucune équipe configurée »**
|
|
||||||
- une description courte
|
|
||||||
- un bouton **« Ouvrir paramètres »** qui te dépose directement sur la section Équipe du panel admin (plus besoin de cliquer sur la pastille initiales puis de chercher l'onglet).
|
|
||||||
|
|
||||||
### Procédure
|
|
||||||
|
|
||||||
1. **Ouvre EasyVista** dans un onglet (interne `itsma.etat-de-vaud.ch` ou externe `itsma.vd.ch`), connecte-toi.
|
|
||||||
2. **Pastille initiales** (haut gauche de l'extension) → **⚙ Paramètres** → onglet **Équipe**.
|
|
||||||
3. **Sélecteur "Groupe EasyVista"** : se peuple automatiquement (SI-CSS / SI-EXT / …). Choisis le tien.
|
|
||||||
4. **Tableau des techniciens** du groupe : se peuple automatiquement aussi. Coche ceux qui doivent apparaître dans la planification.
|
|
||||||
5. (Optionnel) **Absences récurrentes** : si un tech est absent un jour fixe par semaine (ex: tous les vendredis), coche le jour dans la colonne dédiée.
|
|
||||||
6. **💾 Enregistrer** : le planning se met à jour immédiatement.
|
|
||||||
|
|
||||||
### Persistance des préférences
|
|
||||||
|
|
||||||
Tous tes choix (équipe, absences récurrentes, groupe, domaines, thème, heures, taille texte, durée du cache) sont **persistés dans `chrome.storage.local`** et **survivent aux mises à jour d'extension**. Tu ne reconfigures **jamais** sauf si tu désinstalles complètement l'extension ou cliques "Réinitialiser la configuration" dans Diagnostics.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## La topbar (vue classique)
|
|
||||||
|
|
||||||
De gauche à droite :
|
|
||||||
|
|
||||||
| Élément | Rôle |
|
| Élément | Rôle |
|
||||||
|---|---|
|
|---|---|
|
||||||
| **Pastille initiales** (RQ) | Votre user EasyVista. Cliquer ouvre un popup avec accès aux paramètres et au mode d'affichage |
|
| Initiales | Ton compte EasyVista. Le clic ouvre un menu : temps de session restant, « Prolonger la session (30 min) », changement de vue, « Paramètres ». |
|
||||||
| **Planification** | Titre de l'app |
|
| Aujourd'hui | Revient au jour courant. La date et l'heure s'affichent à côté. |
|
||||||
| **Aujourd'hui + horloge** (depuis v2026.5.44) | Bloc encadré : bouton « Aujourd'hui » qui ramène au jour courant + date + heure réelles, taille discrète |
|
| Synchronisé à | Heure du dernier chargement du planning. |
|
||||||
| **Synchronisé à HH:MM** | Heure du dernier rafraîchissement |
|
| ◀ ▶ et la date | Jour précédent, jour suivant. Un clic sur la date ouvre le calendrier. |
|
||||||
| **◀ ▶** | Naviguer jour précédent / suivant |
|
| Ajouter | Menu pour créer une réservation, une absence ou un service pompier. |
|
||||||
| **Date du planning** (centrée) | Affiche le jour sélectionné en gros (ex: « Vendredi 24.04.2026 »). Cliquer ouvre un sélecteur de date. **Depuis v2026.5.44 : ancrée au centre absolu**, ne se décale plus quand le bouton « Arrêter » apparaît à droite |
|
| Douchette | Envoie la planification du jour sur la douchette des techniciens choisis. |
|
||||||
| **Compteur session** | Apparaît à moins de 5 min restantes EV (avec bouton "Prolonger") |
|
| Actualiser | Ajoute les nouvelles interventions et retire celles qui ne sont plus au planning. Rapide : ne recharge pas les fiches déjà connues. |
|
||||||
| **Absence** | Créer une absence pour un ou plusieurs techs |
|
| Tout recharger | Recharge le planning et toutes les fiches, pour voir évoluer les statuts. Plus lent. |
|
||||||
| **Douchette** | Envoyer le planning sur la douchette des techs |
|
| ✕ Arrêter | Visible pendant un chargement : l'interrompt. |
|
||||||
| **Actualiser** | Re-fetch rapide (pas les fiches déjà connues) |
|
| Vider cache | Efface le cache du jour affiché. |
|
||||||
| **Tout recharger** | Re-fetch complet (planning + fiches) |
|
| 🌙 / ☀️ | Thème sombre ou clair. |
|
||||||
| **✕ Arrêter** (pendant un refresh) | Annule le rafraîchissement en cours. **Depuis v2026.5.44 : abort instantané** via `AbortController` (au lieu d'attendre la fin du fetch en cours) |
|
|
||||||
| **Vider cache** | Supprime le cache du jour affiché |
|
|
||||||
| **🌙 / ☀️** | Toggle thème clair / sombre |
|
|
||||||
|
|
||||||
---
|
Sous la barre, une ligne de statistiques résume la journée et donne accès à la recherche.
|
||||||
|
|
||||||
## Personnaliser l'apparence (depuis v2026.5.44)
|
|
||||||
|
|
||||||
**Pastille initiales** → **⚙ Paramètres** → onglet **Apparence**.
|
|
||||||
|
|
||||||
### Couleur de la barre du haut
|
|
||||||
|
|
||||||
- **12 presets** cliquables : Défaut, Blanc, Gris clair, Anthracite, Bleu DGNSI, Marine, Vert sapin, Brique, Violet, Rouge, Bleu pastel, Vert pastel.
|
|
||||||
- **Couleur perso** : picker `<input type="color">` ou champ hex `#rrggbb` pour saisir n'importe quelle couleur.
|
|
||||||
- **Réinitialiser** : retour à la couleur par défaut (`--bg-elevated` du thème).
|
|
||||||
|
|
||||||
La couleur s'applique à la **topbar** (vue classique) ET à la **sidebar gauche** (vue horizontale, si la couleur est définie). **Le texte s'adapte automatiquement** : l'extension calcule la luminance de la couleur choisie et utilise du texte blanc sur fond foncé, foncé sur fond clair, pour rester toujours lisible.
|
|
||||||
|
|
||||||
### Police de l'application
|
|
||||||
|
|
||||||
Sélecteur avec **28 choix**, chaque option affichée dans sa propre police :
|
|
||||||
|
|
||||||
- **Sans-serif** : Système (recommandé), Arial, Helvetica, Verdana, Tahoma, Trebuchet MS, Calibri, Segoe UI, Gill Sans, Futura, Optima
|
|
||||||
- **Serif** : Times New Roman, Georgia, Cambria, Garamond, Palatino, Bookman
|
|
||||||
- **Monospace** : Courier New, Consolas, Lucida Console, JetBrains Mono / Fira Code
|
|
||||||
- **Display** : Comic Sans MS, Impact, Brush Script, Copperplate
|
|
||||||
- **Condensée** : Arial Narrow / Helvetica Narrow
|
|
||||||
|
|
||||||
La police choisie s'applique à **TOUTE la page** : topbar, cartes techs, popups, tooltips, panel admin. Un **aperçu live** à droite du select montre le rendu sur le texte « Vendredi 24.04.2026 ».
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Les cartes des techniciens
|
## Les cartes des techniciens
|
||||||
|
|
||||||
Chaque technicien a une carte qui contient :
|

|
||||||
|
|
||||||
### Header
|
En vue classique, chaque technicien a sa carte :
|
||||||
- **Nom** de la personne
|
|
||||||
- **Badge** d'absence si applicable :
|
|
||||||
- 🔴 **Pompier** (rouge) — l'icône reste visible même en vue horizontale
|
|
||||||
- 🟠 **Maladie / Accident** (indigo)
|
|
||||||
- 🔵 **Congé / Congés** (cyan, suffixe "s" si plusieurs jours)
|
|
||||||
|
|
||||||
### Body
|
- **En-tête** : le nom, et un badge en cas d'absence (Pompier, Maladie/Accident, Congé).
|
||||||
- **Note de statut** : "En pompier du XX au YY", "Absent toute la journée — Maladie/Accident", etc.
|
- **Frise horaire** : la journée du technicien d'un coup d'œil.
|
||||||
- **Timeline horaire** : représentation visuelle des occupations sur la journée (8h-18h par défaut)
|
- **Liste des interventions** : heure, référence, lieu, contact, catégorie, statut, séparées en MATIN et APRÈS-MIDI.
|
||||||
- **Stats** : nombre total d'interventions, répartition matin / après-midi
|
|
||||||
- **Liste des interventions** : référence, heure, lieu, contact, catégorie, statut
|
|
||||||
- **Séparateur "MATIN" / "APRÈS-MIDI"** pour distinguer visuellement les périodes
|
|
||||||
|
|
||||||
### Tri des cartes
|
Une intervention prévue pendant une absence ou une réservation du même technicien s'affiche en rouge plein. Une absence récurrente, réglée dans [Réglages](R%C3%A9glages), s'affiche en cyan avec la mention « Absent le » suivie du jour.
|
||||||
Par défaut :
|
|
||||||
1. Pompiers en premier (ils ont la priorité visuelle)
|
|
||||||
2. Techs actifs ensuite (ordre alphabétique nom de famille)
|
|
||||||
3. Absents en dernier
|
|
||||||
|
|
||||||
---
|
Une intervention terminée garde sa place avec une coche : ✓✓ vert pour une fiche clôturée ou résolue, ✓ pour une intervention faite par le technicien, ✓ jaune pour une fiche suspendue. Une intervention annulée quitte le planning.
|
||||||
|
|
||||||
## La timeline
|
## La frise horaire
|
||||||
|
|
||||||
La timeline représente la journée du tech sur une barre horizontale entre 8h et 18h (configurable).
|
La frise couvre la plage réglée dans Réglages (8 h à 18 h par défaut). Chaque segment est une intervention, une réservation ou une absence, dans la couleur de sa catégorie (voir [Couleurs](#couleurs)). Un trait marque midi.
|
||||||
|
|
||||||
### Lecture
|
Sur un segment d'intervention, en vue classique :
|
||||||
- **Segment coloré** : intervention ou réservation, la couleur indique la catégorie (livraison, récup, remplacement, incident, rollout, autre)
|
|
||||||
- **Bande hachurée grise** : créneau libre
|
|
||||||
- **Trait vertical à 12h** : sépare matin et après-midi (visible aussi en vue horizontale)
|
|
||||||
- **Cercle vert ✓** sur un segment : intervention clôturée
|
|
||||||
- **Outline coloré** : intervention en conflit avec une autre (chevauchement)
|
|
||||||
|
|
||||||
### Interactions
|
- **Survol** : une petite bulle suit la souris.
|
||||||
- **Survol d'un segment** (vue classique) : petite popup qui suit la souris avec les infos clés
|
- **Clic** : la grande bulle s'ouvre et reste affichée.
|
||||||
- **Clic simple sur un segment** : grande popup persistante (épinglée) avec tout le détail
|
- **Double-clic** : la fiche s'ouvre dans EasyVista, dans un nouvel onglet.
|
||||||
- **Double-clic / Ctrl+clic** : ouvre la fiche EasyVista dans un nouvel onglet
|
- **Ctrl + clic** (Cmd + clic sur Mac) ou **clic molette** : la fiche s'ouvre dans un onglet en arrière-plan.
|
||||||
- **Clic sur un trou (bande hachurée)** : popup avec la durée libre (utile pour caser une nouvelle intervention)
|
|
||||||
|
|
||||||
En **vue horizontale**, le comportement change :
|
Les segments d'absence et de réservation réagissent au survol seulement.
|
||||||
- **Survol** = directement la grande popup (pas de petite popup intermédiaire)
|
|
||||||
- **Clic** = ouvre la fiche EV (raccourci direct)
|
|
||||||
|
|
||||||
---
|
## Les bulles d'information
|
||||||
|
|
||||||
## La vue « échelle de temps exacte » (v2026.5.46)
|

|
||||||
|
|
||||||
Une seconde disposition pour la **vue horizontale**, activable dans **Paramètres → Apparence → « Vue horizontale : échelle de temps exacte »** (exclusive avec « Afficher les pauses » : cocher l'une décoche l'autre).
|
Survole une intervention pour afficher sa bulle : référence, horaire, statut, lieu, contact, catégorie, texte de l'action.
|
||||||
|
|
||||||
- Chaque intervention est posée **pile à son heure réelle** : une intervention 9h→10h occupe exactement le segment 9h→10h, sur toutes les lignes.
|
- Clique sur la **référence** pour ouvrir la fiche dans EasyVista. Le bouton 📋 la copie.
|
||||||
- **Règle des heures** fixe en haut (reste visible au défilement) ; traits verticaux continus à chaque heure (pointillés aux demi-heures, césure rayée à midi) ; la **ligne rouge** indique l'heure actuelle. Les techniciens absents ne sont pas traversés par les traits.
|
- **📌** épingle la bulle : elle reste ouverte et tu peux la déplacer à la souris. Plusieurs bulles épinglées se comparent côte à côte.
|
||||||
- **Bord gauche coloré** de chaque carte = couleur de catégorie **et poignée** : cliquer = fenêtre de modification, glisser = déplacer (bloqué pour les faites/clôturées, réservations et absences).
|
- **↻** recharge cette seule intervention.
|
||||||
- Deux éléments qui se chevauchent s'empilent en sous-lignes ; la zone du technicien s'agrandit seulement dans ce cas.
|
- Le bouton de réduction range une bulle épinglée en pastille, en bas de l'écran. Survole la pastille : « Agrandir » la rouvre, « Fermer » la ferme.
|
||||||
- **Zones libres** : survol = « Libre HH:MM–HH:MM » (aussi sur les journées vides), clic droit = Réservation/Absence à l'heure du curseur, dépôt du drag précis (pas de 30 min).
|
- **Échap** ferme la bulle sous la souris. Maintenu trois secondes, il ferme toutes les bulles épinglées, sauf les pastilles.
|
||||||
- Cartes étroites : texte compact (ville + fin d'adresse), le détail complet reste au survol.
|
|
||||||
- Les **réservations** affichent le lieu renseigné, sinon le nom de la personne qui a réservé.
|
|
||||||
|
|
||||||
---
|
Pour une intervention terminée, « Retirer du planning » l'enlève de la Planification, sans effet sur EasyVista. Pour une réservation ou une absence, le bouton de suppression la supprime dans EasyVista, après confirmation.
|
||||||
|
|
||||||
## Les popups d'intervention
|
## La vue horizontale
|
||||||
|
|
||||||
Au survol d'une ligne d'intervention dans la liste, ou d'un segment timeline, un popup détaillé apparaît avec :
|

|
||||||
|
|
||||||
| Section | Contenu |
|
La vue horizontale met chaque technicien sur une ligne, avec la barre de commandes à gauche. Elle montre toute l'équipe sur un grand écran.
|
||||||
|
|
||||||
|
- Pour changer de vue : clic sur tes initiales, puis « Passer en vue Horizontale » (ou « Passer en vue Classique »).
|
||||||
|
- **Survol** d'une intervention : sa bulle s'affiche.
|
||||||
|
- **Clic** : la fiche s'ouvre dans EasyVista.
|
||||||
|
|
||||||
|
L'extension retient la vue choisie.
|
||||||
|
|
||||||
|
## L'échelle de temps exacte
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Cette disposition de la vue horizontale place chaque intervention à son heure réelle, sur une règle des heures continue. Active-la dans Réglages, onglet Apparence, « Vue horizontale : échelle de temps exacte ». Elle remplace l'option « Afficher les pauses » : cocher l'une décoche l'autre.
|
||||||
|
|
||||||
|
- Une ligne rouge verticale marque l'heure actuelle.
|
||||||
|
- Deux éléments qui se chevauchent s'empilent sur deux sous-lignes.
|
||||||
|
- Le bord gauche coloré de chaque carte sert de poignée : un clic ouvre la fenêtre de modification, un glisser déplace l'intervention.
|
||||||
|
- Survole une zone libre pour voir le créneau disponible. Un clic droit dans cette zone ouvre une réservation à cette heure.
|
||||||
|
|
||||||
|
## Déplacer une intervention
|
||||||
|
|
||||||
|
Tu peux déplacer une intervention non terminée, sur une seule journée. Les réservations et les absences ne se déplacent pas.
|
||||||
|
|
||||||
|
- **Glisser-déposer** : attrape l'heure de l'intervention (ou la poignée colorée en échelle exacte) et dépose-la sur un autre technicien ou un autre créneau.
|
||||||
|
- **Fenêtre de modification** : un clic sur l'heure ouvre « Modifier l'horaire / déplacer » : date, heure de début, durée, technicien.
|
||||||
|
|
||||||
|
Dans les deux cas, une fenêtre « Confirmer le déplacement ? » récapitule le changement. Si le créneau d'arrivée est occupé, elle l'annonce et propose des créneaux libres. L'extension applique ensuite le déplacement dans EasyVista.
|
||||||
|
|
||||||
|
## Le dock
|
||||||
|
|
||||||
|
Le dock, au bord droit de l'écran, garde des interventions de côté pendant que tu changes de jour.
|
||||||
|
|
||||||
|
1. Pendant un glisser, amène l'intervention au bord droit : le dock s'ouvre, dépose-la dedans.
|
||||||
|
2. Change de jour, puis sors la carte du dock et dépose-la sur un technicien. La confirmation habituelle s'affiche.
|
||||||
|
|
||||||
|
Rien ne change dans EasyVista tant que la carte reste au dock. Pour en retirer une carte, maintiens le bouton × deux secondes. « Tout annuler » vide le dock : les interventions restent à leur jour d'origine.
|
||||||
|
|
||||||
|
## Ajouter une réservation, une absence ou un pompier
|
||||||
|
|
||||||
|
Le bouton « Ajouter » de la barre du haut ouvre trois choix :
|
||||||
|
|
||||||
|
- **Réservation** : bloque un créneau d'un technicien pour une intervention à venir. Tu peux y noter le n° d'intervention, la ville, la rue et la catégorie (Installation, Remplacement, Récupération, Incident, Roll Out, Déménagement). Dans EasyVista, la réservation apparaît comme « Evènements spéciaux ». Les autres postes voient ces informations par le dossier partagé.
|
||||||
|
- **Absence** : pour un ou plusieurs techniciens, sur une période.
|
||||||
|
- **Pompier** : désigne le technicien de service pompier pour une période.
|
||||||
|
|
||||||
|
Raccourcis : un clic droit sur le nom d'un technicien ouvre ce menu avec le technicien déjà choisi (Réservation, Absence, Pompier, Sync douchette). Un clic droit dans une zone vide de sa carte ouvre une réservation, à l'heure libre la plus proche du curseur.
|
||||||
|
|
||||||
|
Sans session EasyVista, l'extension bloque ces créations.
|
||||||
|
|
||||||
|
## Envoyer sur la douchette
|
||||||
|
|
||||||
|
Le bouton « Douchette » ouvre la fenêtre « Envoyer la planification sur la douchette ». Coche le ou les techniciens, puis clique sur « Envoyer ». Une notification confirme l'envoi dès qu'EasyVista l'a pris en compte.
|
||||||
|
|
||||||
|
## Rechercher
|
||||||
|
|
||||||
|
Le champ de recherche 🔍 se trouve à droite des statistiques. La recherche démarre quand tu arrêtes de taper, ou tout de suite avec Entrée. Le bouton ❕ rappelle la syntaxe.
|
||||||
|
|
||||||
|
| Tu tapes | Résultat |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Référence | `SYYMMDD_NNNNN` (demande) ou `IYYMMDD_NNNNN` (incident) |
|
| `mot1 mot2` | Tous les mots, dans n'importe quel ordre |
|
||||||
| Heure | Début → Fin |
|
| `%` | Joker : `I2606%123` (dans cet ordre), `%123` (contient) |
|
||||||
| Lieu | Ville + adresse |
|
| `"…"` | Expression exacte, espaces compris |
|
||||||
| Contact | Nom + téléphone (cliquable) |
|
| `-mot` | Exclut un mot : `ecran -reservation` |
|
||||||
| Action | Description complète (chargée à la demande) |
|
| `tech:` `lieu:` `ref:` `cat:` `contact:` | Cible un champ |
|
||||||
| Catégorie | Badge coloré |
|
|
||||||
| Statut | "En cours", "Clôturé", "Résolu", etc. |
|
|
||||||
|
|
||||||
### Boutons
|
La recherche porte sur le planning en cache et sur EasyVista (demandes, matériel, employés). La liste replie les résultats passés en bas, sous « Planifiée (passé) ». Chaque résultat propose « EasyVista ↗ », qui ouvre la fiche, et « Jour ↗ », qui ouvre le jour concerné et met l'intervention en évidence. Ctrl + clic sur « EasyVista ↗ » ouvre la fiche en arrière-plan et garde ta recherche.
|
||||||
- **📌 Épingler** : le popup reste ouvert même si on bouge la souris. Permet de comparer plusieurs popups épinglés côte à côte.
|
|
||||||
- **📌 Copier la référence** : copie la ref (ex: `SYYMMDD_NNNNN`) dans le presse-papiers
|
|
||||||
- **↻ Recharger** : re-fetch les données de cette intervention seule (utile pour voir l'évolution du statut sans re-télécharger toute la journée)
|
|
||||||
- **Ouvrir** : ouvre la fiche EV dans un nouvel onglet
|
|
||||||
|
|
||||||
### Drag-and-drop
|
## Prévenir les techniciens par email
|
||||||
Un popup épinglé peut être **déplacé à la souris**. Plusieurs popups peuvent être empilés et organisés à l'écran selon le besoin du moment (par exemple, comparer 3 interventions).
|
|
||||||
|
|
||||||
### Désépinglage
|
Coche « Activer l'email de déplacement » dans Réglages, onglet Email. Ensuite :
|
||||||
- **Clic en dehors** d'un popup épinglé : le ferme proprement
|
|
||||||
- **Clic 📌** : ré-épingle si désépinglé (mode "soft unpin")
|
|
||||||
- **Échap** : ferme tous les popups non-épinglés
|
|
||||||
|
|
||||||
---
|
1. Déplace une intervention vers un autre jour ou un autre technicien. Un simple changement d'heure n'ouvre rien.
|
||||||
|
2. Laisse cochée la case « Prévenir les techniciens par email » de la fenêtre de confirmation. La décocher vaut pour ce déplacement seulement.
|
||||||
|
3. Un brouillon s'ouvre dans ta messagerie, adressé aux deux techniciens, avec l'horaire d'avant et d'après. Relis-le et envoie-le toi-même.
|
||||||
|
|
||||||
|
Il manque l'adresse d'un technicien ? Le brouillon s'ouvre quand même et une notification te dit qui compléter. Même principe quand tu supprimes une réservation, si « Activer l'email d'annulation » est coché : le brouillon prévient le technicien que l'intervention est annulée.
|
||||||
|
|
||||||
## Le dock latéral (depuis v2026.5.45)
|
## La session EasyVista
|
||||||
|
|
||||||
Le **dock à droite** permet de mettre des interventions de côté pendant la navigation entre les jours, puis de les redéposer plus tard sur un autre tech / un autre jour. Aucun appel EasyVista tant que le dépôt final n'est pas validé.
|
EasyVista ferme la session après 30 minutes sans activité. L'extension suit ce délai :
|
||||||
|
|
||||||
### Apparition pendant un drag
|
- À 5 minutes de la fin, un compteur apparaît dans la barre du haut.
|
||||||
|
- À 2 minutes, il passe au rouge et une fenêtre te propose de prolonger.
|
||||||
|
- « Prolonger » (dans le compteur ou dans le menu de tes initiales) remet la session à 30 minutes.
|
||||||
|
|
||||||
Au début d'un drag d'intervention, le dock apparaît :
|
Session expirée : un bandeau rouge propose « Me reconnecter ». Connecte-toi dans l'onglet EasyVista qui s'ouvre ; la Planification reprend d'elle-même. Tant que tu n'es pas connecté, elle affiche le cache local, n'écrit plus dans le dossier partagé et bloque toute modification.
|
||||||
|
|
||||||
- **peep-min** (~12 % visibles) : drag en cours, dock vide. Petit onglet à droite pour signaler la cible.
|
Avec plusieurs onglets EasyVista ouverts, active « Gérer les sessions multi-onglets EZV » (Réglages, onglet EasyVista) : l'extension reste connectée même après la fermeture de l'onglet EasyVista.
|
||||||
- **peep** (~50 % visibles) : drag en cours OU à l'arrêt, dock contient au moins une carte. Le numéro DS reste lisible à droite.
|
|
||||||
- **expanded** (100 % visibles) : au survol du dock OU quand on approche le curseur du bord droit pendant un drag.
|
|
||||||
|
|
||||||
Un **délai de 500 ms** est appliqué sur expand/collapse pour éviter le clignotement quand le curseur effleure simplement le bord du dock.
|
## Couleurs
|
||||||
|
|
||||||
### Mettre une carte dans le dock
|
| Couleur | Signification |
|
||||||
|
|
||||||
Glisser une intervention vers le bord droit pendant un drag → drop dans la zone du dock. La carte apparaît dans le dock avec :
|
|
||||||
|
|
||||||
- **Référence** en gras + **durée prévue** (`1h`, `1h30`, `45min`).
|
|
||||||
- **Barre verticale 4 px** sur la gauche dans la couleur de la catégorie (livraison / installation / incident / etc.) — identique aux mini-cards du planning.
|
|
||||||
- Fond transparent.
|
|
||||||
|
|
||||||
### Reprendre une carte du dock
|
|
||||||
|
|
||||||
Maintenir le bouton gauche de la souris sur la carte du dock + déplacer (> 5 px) → la carte sort du dock et suit le curseur. Un clic simple (mousedown + relâche sans bouger) ne fait rien — anti-clic accidentel.
|
|
||||||
|
|
||||||
Pendant le drag depuis le dock, le ghost flottant n'affiche pas l'heure d'origine (elle n'a plus de sens — l'intervention est en attente d'un nouveau créneau).
|
|
||||||
|
|
||||||
- Drop sur un tech → modal de confirmation (date, heure, tech) → appel EV pour appliquer le déplacement.
|
|
||||||
- Drop hors zone valide → la carte revient dans le dock.
|
|
||||||
- Drop sur le même slot d'origine → la carte revient dans le dock (no-op silencieux).
|
|
||||||
- Échap pendant le drag → annulation, retour dans le dock.
|
|
||||||
|
|
||||||
### Retirer une carte du dock (sans la déposer)
|
|
||||||
|
|
||||||
**Appui long 2 s** sur la croix `×` en haut à droite de la carte. Une animation circulaire se remplit progressivement pour indiquer la progression. Si on relâche avant 2 s, rien ne se passe — anti-clic accidentel.
|
|
||||||
|
|
||||||
Bouton **« Tout annuler »** en haut du dock (visible quand le dock est en mode expanded) : retire toutes les cartes du dock.
|
|
||||||
|
|
||||||
## Les deux modes d'affichage
|
|
||||||
|
|
||||||
L'extension propose deux dispositions pour s'adapter au contexte d'usage :
|
|
||||||
|
|
||||||
### Vue classique (cards)
|
|
||||||
- Layout en **grille** : 4 colonnes sur écran 24" (compact mode), 3 colonnes sur écran HD
|
|
||||||
- Idéale pour avoir le **détail complet** de chaque tech
|
|
||||||
- Toutes les interventions listées, popups au survol
|
|
||||||
|
|
||||||
### Vue horizontale (rangées)
|
|
||||||
- Chaque tech est sur **une seule ligne** : header + timeline pleine largeur
|
|
||||||
- Sidebar verticale à gauche (200 px) avec topbar repositionnée
|
|
||||||
- Idéale pour avoir une **vue d'ensemble** de l'équipe sur un grand écran (planning de la journée d'un coup d'œil)
|
|
||||||
- Les détails des interventions sont accessibles via **survol direct du segment timeline**
|
|
||||||
|
|
||||||
### Comment basculer
|
|
||||||
1. Clic sur la **pastille des initiales** (en haut à gauche)
|
|
||||||
2. Cliquer **"Passer en vue Horizontale"** (ou "Classique" selon le mode actuel)
|
|
||||||
|
|
||||||
Le mode est **persisté entre les sessions** (localStorage `view_mode`).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Le badge utilisateur (initiales)
|
|
||||||
|
|
||||||
La pastille en haut à gauche affiche les **initiales** de l'utilisateur EasyVista connecté, avec une couleur dérivée du nom (chaque user a sa couleur stable).
|
|
||||||
|
|
||||||
### Cliquer dessus ouvre un popup contenant :
|
|
||||||
- **Nom complet** de l'utilisateur
|
|
||||||
- **Compteur de session** (MM:SS restantes avant expiration EV) avec bouton **🔄 Prolonger**
|
|
||||||
- **⊞ Vue** : bascule entre les 2 modes d'affichage
|
|
||||||
- **⚙ Paramètres** : ouvre le panel d'administration
|
|
||||||
- **"Développé par FroSteel"** (signature)
|
|
||||||
|
|
||||||
### Si la détection user échoue
|
|
||||||
Une pastille **grise avec "?"** apparaît. Possible si :
|
|
||||||
- Pas connecté à EasyVista
|
|
||||||
- EV inaccessible
|
|
||||||
- Page intermédiaire SSO en cours
|
|
||||||
|
|
||||||
L'extension retente automatiquement toutes les 60 secondes (max 10 essais).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## La gestion de session EasyVista
|
|
||||||
|
|
||||||
EasyVista expire la session après **30 minutes d'inactivité**. L'extension surveille ce timer en arrière-plan pour vous prévenir.
|
|
||||||
|
|
||||||
### Affichage du temps restant
|
|
||||||
- **Visible** dans le compteur de session topbar à partir de **5 min** restantes
|
|
||||||
- Couleur évoluant : vert → jaune → rouge selon le seuil
|
|
||||||
- Aussi visible dans le popup user-badge
|
|
||||||
|
|
||||||
### Alertes proactives
|
|
||||||
- **À 5 min** : alerte "glissante" douce en haut à gauche (peut être reportée à plus tard)
|
|
||||||
- **À 2 min** : alerte urgente bloquante avec bouton **Prolonger**
|
|
||||||
- **À 0** : popup "Session expirée — reconnectez-vous"
|
|
||||||
|
|
||||||
### Prolonger la session
|
|
||||||
- Bouton **🔄 Prolonger** (popup user-badge ou alerte) : envoie un keep-alive et remet le compteur à 30 min
|
|
||||||
- Toute action sur EasyVista (visite d'une page, fetch) prolonge automatiquement
|
|
||||||
|
|
||||||
### Reconnexion automatique
|
|
||||||
Si la session expire et que l'utilisateur se reconnecte sur un autre onglet, l'extension détecte la nouvelle session et **reprend automatiquement** sans rien demander.
|
|
||||||
|
|
||||||
### Sans session active (v2026.5.49)
|
|
||||||
Tant que tu n'es pas identifié dans EasyVista, l'extension se limite au **cache local** déjà présent : elle n'accède plus au dossier partagé et **bloque toute modification** (déplacement, suppression, création ou édition d'absence, réservation). Reconnecte-toi pour retrouver la synchronisation et les actions.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Les paramètres
|
|
||||||
|
|
||||||
Accès via le bouton **⚙ Paramètres** dans le popup user-badge (clic sur les initiales).
|
|
||||||
|
|
||||||
Le panel est organisé en sections : Apparence, Équipe, **Email** (v2026.5.48), EasyVista, Synchronisation, Données, Diagnostics, À propos.
|
|
||||||
|
|
||||||
### 1. Apparence
|
|
||||||
- **Thème** : Auto (selon l'OS) / Clair / Sombre. Depuis v2026.5.41, ce sélecteur est **synchronisé avec le toggle 🌙/☀️ de la topbar** : cliquer le toggle bascule en clair/sombre ET met à jour le sélecteur, ils ne peuvent plus se désynchroniser. Le mode "Auto" suit `prefers-color-scheme` du navigateur et bascule en live quand l'OS change de thème.
|
|
||||||
- **Durée du cache** : combien de jours conserver les anciennes données (défaut 7). Au survol du champ, l'emplacement physique du cache sur le disque s'affiche en infobulle (varie selon Chrome / Firefox + Mac / Windows / Linux).
|
|
||||||
- **Taille du texte** : slider 5 paliers (70%, 85%, 100%, 110%, 120%) — le zoom s'applique quand on relâche le curseur (pas pendant le drag, pour éviter l'effet yo-yo).
|
|
||||||
- **Heures de la journée** : plage horaire affichée sur la timeline ET envoyée aux requêtes EasyVista (défaut 8h - 18h). Depuis v2026.5.41, **bouton ✓ Appliquer** explicite : modifier les heures n'a aucun effet tant que tu ne valides pas. À l'application : toast de confirmation + refetch automatique du planning du jour avec les nouvelles bornes.
|
|
||||||
|
|
||||||
### 2. Équipe
|
|
||||||
- **Sélecteur de groupe EasyVista** (depuis v2026.5.40) — en tête de section, choisit quel groupe EV est affiché (SI-CSS, SI-EXT, …). La liste est détectée **automatiquement** à l'ouverture de la section, en parsant le `<select id="plan_group_id">` de la page Planning EV. Si le DGNSI ajoute un nouveau groupe ou en renomme un, ça apparaît tout seul (pas besoin de mettre à jour l'extension).
|
|
||||||
- ID du groupe affiché en italique à côté du sélecteur (ex: `ID groupe : 191`).
|
|
||||||
- **Quand on change de groupe**, la liste de techniciens en dessous se rafraîchit automatiquement avec les membres du nouveau groupe — il n'y a plus aucun bouton "Détecter" à cliquer, tout est instantané.
|
|
||||||
- **Tableau des techniciens** (cases à cocher pour inclure/exclure dans la planification, jours d'absence récurrente du lundi au vendredi). **Au 1er install (v2026.5.41)** : tableau vide tant que rien n'est coché, et **aucune absence récurrente** présélectionnée — c'est à toi de configurer ton équipe la première fois.
|
|
||||||
- **Tri double automatique** : les techs **inclus** sont d'abord, puis les **exclus**, et alphabétique dans chaque sous-groupe. Le tri se fige tant que tu travailles dans le tableau (toggler une case ne fait pas sauter la ligne) ; il se rafraîchit à la prochaine ouverture de la section.
|
|
||||||
- **💾 Enregistrer** : application immédiate sans demander de recharger. Le planning se met à jour tout de suite avec les nouveaux techs cochés ; toast "Config enregistrée" affiché au-dessus du flou du panel.
|
|
||||||
- **v2026.5.48** — les boutons **Enregistrer** et **🔄 Récupérer les emails** sont **au-dessus de la table**, avec le champ **Domaine des adresses** (sert à proposer `prenom.nom@domaine` à tout le monde quand l'adresse n'est pas saisie).
|
|
||||||
- **Colonne Email (v2026.5.48)** : une adresse par technicien. Vide = l'adresse grisée proposée sera utilisée pour les brouillons. « **Récupérer les emails** » interroge l'annuaire EasyVista, remplit les adresses **manquantes** (une adresse saisie n'est jamais écrasée) et **complète un nom affiché tronqué** (badge « ✓ complété » — ex. « Martins, … » → « De Almeida Martins, … ») ; clique Enregistrer pour conserver.
|
|
||||||
- **Colonne Login (v2026.5.49)** : l'identifiant EasyVista du technicien. Renseigné, il fiabilise « Récupérer les emails » en cas d'homonymes ou de comptes multiples — la recherche se fait alors par **login exact** plutôt que par nom.
|
|
||||||
|
|
||||||
### 3. Email (v2026.5.49)
|
|
||||||
|
|
||||||
Cet onglet configure les emails générés par la planification, en trois parties :
|
|
||||||
|
|
||||||
- **Copie (CC)** — adresses à mettre systématiquement en copie de **tous** les emails générés (déplacement comme annulation). Un aperçu en direct, sous forme de puces, montre les adresses effectivement retenues (une adresse invalide apparaît barrée). Aucune adresse n'est présente par défaut : tu renseignes celles que tu veux, elles sont mémorisées.
|
|
||||||
- **Déplacement d'une intervention** — case pour activer le brouillon d'email après un déplacement, et son **modèle** (sujet + message). Les `{variables}` sont remplacées automatiquement ; la légende cliquable au-dessus des champs les range en **colonnes** par thème (Intervention / Avant / Après), un clic insère la variable au curseur, et l'aperçu montre le résultat sur un exemple. « Rétablir le modèle de base » puis Enregistrer remet le texte d'origine (blocs AVANT / APRÈS).
|
|
||||||
- **Annulation / suppression** — même principe pour la **suppression** d'une intervention : une case d'activation et son propre modèle (variables en colonnes Intervention / Technicien & lieu), pour informer le technicien concerné que l'intervention est annulée.
|
|
||||||
|
|
||||||
Chaque bouton **Enregistrer** de cet onglet sauve l'ensemble des réglages Email.
|
|
||||||
|
|
||||||
|
|
||||||
### 4. EasyVista
|
|
||||||
- **Domaine interne (DGNSI)** — par défaut `https://itsma.etat-de-vaud.ch`, c'est le domaine accessible depuis le réseau interne du Canton.
|
|
||||||
- **Domaine externe (Internet)** — par défaut `https://itsma.vd.ch`, accessible depuis l'extérieur via SSO.
|
|
||||||
- Modifier ces champs uniquement si EasyVista change d'URL. Bouton **💾 Enregistrer** (l'`https://` est ajouté automatiquement si tu l'oublies, le slash final est retiré). Bouton **↺ Réinitialiser** pour revenir aux valeurs par défaut.
|
|
||||||
- **v2026.5.41** : si tu saisis un domaine **autre que les deux par défaut**, le navigateur ouvre une popup pour te demander la permission d'accéder à ce domaine. Sans cet accord, le service worker ne peut pas y fetcher de données. Refus → toast d'avertissement, tu peux retenter en cliquant à nouveau sur Enregistrer.
|
|
||||||
- Les valeurs par défaut restent codées en dur dans l'extension comme filet de sécurité — on ne peut pas se planter au point de tout casser.
|
|
||||||
|
|
||||||
### 5. Synchronisation, Données
|
|
||||||
- **Synchronisation** : dossier partagé multi-postes, script du poste, bouton « Tester la communication » (voir la page Dépannage).
|
|
||||||
- **Données** : purge du cache local.
|
|
||||||
|
|
||||||
### 6. Diagnostics
|
|
||||||
- Version de l'extension
|
|
||||||
- Date courante / Aujourd'hui
|
|
||||||
- État de la session EV
|
|
||||||
- Nombre de popups épinglés
|
|
||||||
- **Logs verbeux (debug)** : toggle pour afficher dans la console (F12) toutes les étapes détaillées (utile pour reporter un bug)
|
|
||||||
- **Réinitialiser la configuration** : remet tout aux valeurs par défaut
|
|
||||||
|
|
||||||
### 7. À propos
|
|
||||||
Version, auteur, affiliation, licence MIT, lien vers le code source sur Gitea (repo public).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Prévenir par email après un déplacement (v2026.5.48)
|
|
||||||
|
|
||||||
1. Active l'option dans **Paramètres → Email** (ou coche la case directement dans une fenêtre de déplacement : ça l'active pour de bon).
|
|
||||||
2. Déplace une intervention vers un **autre jour** ou un **autre technicien** (fenêtre de modification ou glisser-déposer). Un simple ajustement d'heures n'ouvre rien.
|
|
||||||
3. Un **brouillon** s'ouvre dans l'application mail, pré-adressé aux deux techniciens (séparés par « ; »), avec le récapitulatif AVANT / APRÈS. Relis, complète si besoin, envoie.
|
|
||||||
4. **Pour un déplacement sans email** : décoche la case dans la fenêtre — ça ne vaut que pour **ce déplacement-là**, la prochaine fenêtre revient cochée. L'option ne se désactive durablement que dans Paramètres → Email.
|
|
||||||
5. Si un technicien n'a pas d'adresse (ni saisie, ni déductible), le brouillon s'ouvre **quand même** avec le destinataire à compléter — une notification en bas à droite dit qui manque.
|
|
||||||
|
|
||||||
**À la suppression d'une intervention** : si l'option « Annulation / suppression » est active (Paramètres → Email), supprimer une intervention ouvre de la même manière un brouillon pré-rempli pour prévenir le technicien concerné que l'intervention est annulée. L'envoi reste manuel.
|
|
||||||
|
|
||||||
## La recherche
|
|
||||||
|
|
||||||
- Champ 🔍 à droite des statistiques. La recherche part **quand tu arrêtes de taper**, ou **immédiatement avec Entrée** ; la roue tourne pendant la lecture des données.
|
|
||||||
- Résultats : planning en cache (réfs, contacts, lieux, descriptions…) + annuaire/demandes EasyVista. Le **passé** est replié en bas (« Planifiée (passé) — AFFICHER ») — le déplier ne ferme pas la zone.
|
|
||||||
- Seuls les statuts **Clôturé** et **Fait** sont affichés sur les résultats ; le liseré de couleur indique l'état pour le reste.
|
|
||||||
- Boutons sur chaque résultat : **EasyVista ↗** (ouvre la fiche) et **Jour ↗** (ouvre le planning du jour concerné et met l'intervention en évidence). Échap ferme la zone.
|
|
||||||
- **Ouvrir en arrière-plan (v2026.5.49)** : un **Ctrl+clic** (Cmd+clic sur Mac) ou un **clic molette** sur **EasyVista ↗** ouvre la fiche dans un onglet d'arrière-plan — tu restes sur le planning et ta recherche est conservée.
|
|
||||||
|
|
||||||
## Cas particuliers
|
|
||||||
|
|
||||||
### Conflits absence/réservation × intervention (depuis v2026.5.41)
|
|
||||||
Si un technicien est marqué **absent** (toute la journée ou demi-journée) ou a une **réservation** au moment où une intervention lui est attribuée, sa carte d'intervention apparaît **en rouge plein** avec texte blanc. Logique :
|
|
||||||
- Absent toute la journée → **toutes** ses interventions du jour en rouge.
|
|
||||||
- Absent demi-journée (ex: 08-12) → **seules** les interventions de cette plage en rouge.
|
|
||||||
- Réservation 14h-16h → seule l'intervention qui chevauche en rouge.
|
|
||||||
|
|
||||||
Cela permet de repérer immédiatement les conflits d'affectation.
|
|
||||||
|
|
||||||
### Catégories de réservation (depuis v2026.5.50)
|
|
||||||
À la création ou à la modification d'une réservation, la **catégorie** se choisit parmi : Installation, Remplacement, Récupération, Incident, **Roll Out** et **Déménagement**.
|
|
||||||
|
|
||||||
- Roll Out et Déménagement sont propres à la Planification : dans EasyVista, la réservation reste « Evènements spéciaux ».
|
|
||||||
- La catégorie est partagée entre tous les postes par le dossier partagé, comme le n°, la ville et la rue.
|
|
||||||
- Saisir le n° d'une intervention Roll Out propose la catégorie Roll Out.
|
|
||||||
|
|
||||||
### Absences récurrentes
|
|
||||||
Un tech peut être marqué comme absent récurrent un ou plusieurs jours de la semaine via Paramètres → Équipe (cases à cocher Lun-Mar-Mer-Jeu-Ven). Ce jour-là, sa carte affiche "Absent le \<jour\>" avec un badge **cyan** (différent du rouge pompier). Si des interventions lui sont quand même attribuées ce jour-là, elles apparaissent en rouge plein (cf. paragraphe précédent).
|
|
||||||
|
|
||||||
### Tickets fantômes (disparus du planning)
|
|
||||||
|
|
||||||
Quand un ticket disparaît entre deux rafraîchissements (clôturé, déplacé, redirigé, etc.), l'extension va chercher la fiche réelle pour déterminer le verdict avant d'agir.
|
|
||||||
|
|
||||||
Verdicts possibles :
|
|
||||||
|
|
||||||
- **✓✓ vert** (`terminated-clos`) : la fiche est officiellement clôturée et le tech a laissé son commentaire (`login: …`).
|
|
||||||
- **✓ jaune** (`terminated-suspended`) : la fiche est en statut « Suspendu » + commentaire du tech.
|
|
||||||
- **gris « fait »** (`terminated-pending`) : le tech a fait son intervention et a écrit un commentaire, mais la fiche n'est pas encore officiellement clôturée (statut « Finalisation », « Exécution », « Redirigé », etc.).
|
|
||||||
- **retrait silencieux** (`cancelled`) : statut EV ∈ Annulé/Supprimé, OU statut clos sans commentaire du tech, OU action sans commentaire `login: …`. L'iv est retirée du planning.
|
|
||||||
|
|
||||||
Modes de fonctionnement (Paramètres → Diagnostics, depuis v2026.5.45) :
|
|
||||||
|
|
||||||
- **« Garder les disparitions » coché** : aucune iv n'est retirée — verdict CANCELLED log seulement, l'iv reste affichée. Sert à valider les verdicts cas par cas avant de basculer en prod.
|
|
||||||
- **case décochée** (défaut) : verdict appliqué, les iv `cancelled` sortent du planning.
|
|
||||||
|
|
||||||
> ⚠ Une intervention dont le verdict est `terminated-pending` ou `terminated-clos` n'est plus déplaçable (clic / drag bloqué) — le ticket est figé côté EV, on ne propose pas une opération qu'EV refusera.
|
|
||||||
|
|
||||||
### Conflits d'horaire
|
|
||||||
Si un tech a 2 interventions au **même créneau** (chevauchement d'heures), un **outline rouge** apparaît sur les segments timeline concernés et un avertissement ⚠ sur les rows.
|
|
||||||
|
|
||||||
### Réservations
|
|
||||||
Une réservation (créneau bloqué sans intervention concrète) apparaît avec :
|
|
||||||
- Couleur **orange clair** sur la timeline
|
|
||||||
- Mention "Créé par : `nom_créateur`" dans le détail
|
|
||||||
|
|
||||||
### Absences partielles (demi-journée)
|
|
||||||
Si un tech est absent **08-12** (matin uniquement), le bloc absence apparaît dans la liste des interventions à sa place chronologique, avec un libellé adapté.
|
|
||||||
|
|
||||||
### Mode debug
|
|
||||||
Activez **Logs verbeux** dans Diagnostics pour voir dans la console (F12) :
|
|
||||||
- Chaque chargement de date avec timing
|
|
||||||
- Chaque fetch fiche
|
|
||||||
- Étapes de bascule de vue
|
|
||||||
- Tentatives de retry sur fetch user
|
|
||||||
|
|
||||||
Format : `[HH:MM:SS.mmm][vX.Y.Z][module/prefix][LEVEL] message {context}`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Raccourcis utiles
|
|
||||||
|
|
||||||
| Action | Raccourci |
|
|
||||||
|---|---|
|
|---|---|
|
||||||
| Fermer un popup non-épinglé | Échap |
|
| Bleu | Installation |
|
||||||
| Ouvrir une fiche EV en arrière-plan | Ctrl + clic sur la référence |
|
| Turquoise | Récupération |
|
||||||
| Ouvrir une fiche EV nouvel onglet | Double-clic sur l'intervention |
|
| Orange | Remplacement |
|
||||||
| Bascule de vue | Pastille initiales → ⊞ Vue |
|
| Violet clair | Incident |
|
||||||
| Ouvrir paramètres | Pastille initiales → ⚙ Paramètres |
|
| Brun | Roll Out |
|
||||||
| Activer le mode debug | Paramètres → Diagnostics → Logs verbeux |
|
| Jaune ambré | Réservation |
|
||||||
|
| Violet foncé | Autre |
|
||||||
|
| Rouge plein | Intervention en conflit avec une absence ou une réservation |
|
||||||
|
| Indigo, cyan, rouge (badge) | Maladie/Accident, Congé, Pompier |
|
||||||
|
|
||||||
|
## Raccourcis
|
||||||
|
|
||||||
|
| Action | Geste |
|
||||||
|
|---|---|
|
||||||
|
| Fermer la bulle sous la souris | Échap |
|
||||||
|
| Fermer toutes les bulles épinglées | Échap maintenu trois secondes |
|
||||||
|
| Ouvrir une fiche dans un nouvel onglet | Double-clic sur le segment (vue classique), clic (vue horizontale) |
|
||||||
|
| Ouvrir une fiche en arrière-plan | Ctrl + clic, Cmd + clic ou clic molette |
|
||||||
|
| Réservation, absence ou pompier pour un technicien | Clic droit sur son nom |
|
||||||
|
| Changer de vue | Initiales, puis « Passer en vue… » |
|
||||||
|
| Ouvrir les réglages | Initiales, puis « Paramètres » |
|
||||||
|
|||||||
@@ -1,375 +1,78 @@
|
|||||||
# Versions
|
# Versions
|
||||||
|
|
||||||
L'extension a connu **3 systèmes de versionning successifs** :
|
Cette page résume ce que chaque version change pour toi, de la plus récente à la plus ancienne. Le détail technique se trouve dans le [CHANGELOG](https://gitea.netaplaid.ch/FroSteel/Planification/src/branch/main/CHANGELOG.md) et dans les [publications](https://gitea.netaplaid.ch/FroSteel/Planification/releases).
|
||||||
|
|
||||||
| Période | Format | Exemple |
|
## Numérotation
|
||||||
|---|---|---|
|
|
||||||
| Avril 2026 (jeudi 16) | Versions de base | `1.0.0`, `2.0.0`, `3.0.0` |
|
|
||||||
| Avril 2026 | SemVer classique | `4.1.3`, `4.2.8`, `5.0.12` |
|
|
||||||
| Avril 2026 → maintenant | **`ANNÉE.MAJEURE.PATCH`** | `2026.5.16` → `2026.5.50` |
|
|
||||||
|
|
||||||
---
|
Depuis la 2026.5.16, le numéro suit la forme `ANNÉE.MAJEURE.CORRECTIF` :
|
||||||
|
|
||||||
## Récap chronologique express
|
- **ANNÉE** change avec l'année civile.
|
||||||
|
- **MAJEURE** change lors d'une refonte ou d'un ajout important.
|
||||||
|
- **CORRECTIF** augmente à chaque publication.
|
||||||
|
|
||||||
| Date | Version | Résumé en 1 ligne |
|
La 2026.5.16 succède à la 5.0.12 et reprend son chiffre 5.
|
||||||
|---|---|---|
|
|
||||||
| 29 septembre 2026 | **`v2026.5.50`** (latest) | Texte complet des actions rétabli après un changement de format d'EasyVista (lecture par contenu, plus robuste) ; catégories de réservation Roll Out et Déménagement |
|
|
||||||
| 1 septembre 2026 | **`v2026.5.49`** | Sécurité hors session (plus d'accès/écriture au dossier partagé ni de modification sans connexion EasyVista), onglet Email clarifié (sections déplacement / annulation, copie CC avec aperçu), lecture au défilement (nom + compteur + frise horaire collants, survol de pause), bannière de session fiabilisée + plus de techniciens vides, noms de contact nettoyés, homonymes levés via le login |
|
|
||||||
| 24 juillet 2026 | **`v2026.5.48`** | Notification par email des déplacements (brouillon pré-rempli, modèle personnalisable, variables + aperçu), onglet Paramètres → Email, adresses depuis l'annuaire EV (noms tronqués complétés), infos de réservation fiables entre postes (horodatées), bouton « Ouvrir EasyVista » fiable sans cache, recherche durcie (Entrée, statuts finals) |
|
|
||||||
| 18 juillet 2026 | **`v2026.5.47`** | Vue « échelle de temps exacte » : aide à la saisie (zone surlignée + heure choisie, bulle plage/durée), erreurs début=fin en rouge + blocage, corrections de fiabilité, bouton « Tester la communication », script poste 2026.1.8 |
|
|
||||||
| 9 juillet 2026 | **`v2026.5.46`** | Couche données v2 + vue « échelle de temps exacte » + session fiabilisée + réservations partagées + installeur PowerShell publié |
|
|
||||||
| 8 mai 2026 | **`v2026.5.45`** | Dock latéral drag&drop + fix verdicts ghost (parser dates) + multi-onglets EZV (#4) + 5 autres issues (#3 #5 #6 #7 #8) |
|
|
||||||
| 1 mai 2026 | **`v2026.5.44`** | Refonte topbar + personnalisation Apparence (couleur + 28 polices) + onboarding équipe + fix #1 |
|
|
||||||
| 27 avril 2026 | `v2026.5.43` | Fix Firefox menu dock + stabilité popup pin/unpin |
|
|
||||||
| 27 avril 2026 | `v2026.5.42` | Nettoyage de commentaires + exemples génériques |
|
|
||||||
| 27 avril 2026 | `v2026.5.41` | Suppression hardcodes runtime + UX admin + thème unifié + conflits absence/intervention |
|
|
||||||
| 27 avril 2026 | `v2026.5.40` | Sélection groupe EV + édition domaines + tri équipe + vue horizontale enrichie |
|
|
||||||
| 26 avril 2026 | `v2026.5.39` | Séparation Matin / Après-midi + section Apparence (thème, taille, cache, heures) |
|
|
||||||
| 25 avril 2026 | `v2026.5.38` | Attribution auteur + nettoyage + observabilité (LOG unifié) |
|
|
||||||
| 24-25 avril 2026 | `v2026.5.33` → `.37` | Vue horizontale (sidebar verticale, interactions différenciées, mini-cards) |
|
|
||||||
| 23 avril 2026 | `v2026.5.16` → `.26` | Schéma `YYYY.M.PATCH`, drag-and-drop popups, panel admin via popup user-badge |
|
|
||||||
| 21 avril 2026 | `v5.0.0` → `v5.0.15` | Refonte topbar (horloge + compteur session), absences partielles |
|
|
||||||
| 20 avril 2026 | `v4.3.3` → `v4.3.0` | Soft-unpin, popup timeline persistante, drag des popups |
|
|
||||||
| 16-20 avril 2026 | `v1.0.0` → `v4.2.x` | Premier viewer EasyVista, tooltips épinglables, infos enrichies |
|
|
||||||
|
|
||||||
➡ Détails complets ci-dessous.
|
## 2026.5.50 (29 septembre 2026)
|
||||||
|
|
||||||
---
|
- Le texte complet des actions s'affiche de nouveau : EasyVista avait changé le format de ses réponses.
|
||||||
|
- Réservations : deux nouvelles catégories, Roll Out et Déménagement. Dans EasyVista, la réservation reste « Evènements spéciaux ».
|
||||||
|
- Passe tous les postes en 2026.5.50 le même jour : un poste resté en 2026.5.49 effacerait ces catégories en modifiant une réservation.
|
||||||
|
|
||||||
## Versions notables
|
## 2026.5.49 (1er septembre 2026)
|
||||||
|
|
||||||
### `v2026.5.50` (latest, 29 septembre 2026) — Texte des actions rétabli, catégories Roll Out et Déménagement
|
- Sans session EasyVista, l'extension n'écrit plus dans le dossier partagé et bloque les modifications.
|
||||||
|
- Onglet Email en deux sections, déplacement et annulation, avec une copie (CC) commune.
|
||||||
|
- Vue classique : le nom du technicien, son compteur et sa frise restent visibles au défilement.
|
||||||
|
- Bandeau de session mieux placé ; plus de cartes de techniciens vides quand la session expire.
|
||||||
|
- Corrections : noms de contact nettoyés, deux interventions d'un même technicien le même jour affichées séparément.
|
||||||
|
|
||||||
> Correctif urgent : depuis le 29 septembre 2026, le texte complet des actions ne s'affichait plus. EasyVista renvoie désormais les actions avec une cellule de moins, et l'extension les lisait par position. Elle les retrouve maintenant par leur contenu. Cette version ajoute aussi deux catégories de réservation.
|
## 2026.5.48 (24 juillet 2026)
|
||||||
|
|
||||||
#### Texte des actions
|
- Brouillon d'email après un déplacement vers un autre jour ou un autre technicien, avec un modèle personnalisable.
|
||||||
|
- Adresses des techniciens récupérées dans l'annuaire EasyVista.
|
||||||
|
- Informations de réservation fiables d'un poste à l'autre.
|
||||||
|
- Bouton « Ouvrir EasyVista » fiable ; recherche plus robuste.
|
||||||
|
|
||||||
- **Texte complet des actions rétabli** dans les bulles et les fiches, avec l'ancien comme avec le nouveau format d'EasyVista.
|
## 2026.5.47 (18 juillet 2026)
|
||||||
- **Plus robuste aux prochains changements** : la description est repérée par le nom de sa colonne, et l'identifiant de l'action par son contenu, plus par leur position.
|
|
||||||
- **Changement de format signalé** : si EasyVista modifie encore la structure au point qu'aucune action ne soit lisible, un avertissement apparaît dans la console (une seule fois, sans aucune donnée personnelle). Les fiches ou historiques qui ne se chargent pas sont aussi signalés dans la console.
|
|
||||||
|
|
||||||
#### Réservations
|
- Échelle de temps exacte : la zone et l'heure de dépose s'affichent pendant le glisser ; un rendez-vous de durée nulle apparaît en rouge et bloque la validation.
|
||||||
|
- Corrections : navigation rapide entre les dates, synchronisation du dossier partagé, absences en double.
|
||||||
|
- Onglet Synchronisation réorganisé, avec le bouton « Tester la communication ».
|
||||||
|
|
||||||
- **Deux nouvelles catégories : Roll Out et Déménagement.** Elles sont propres à la Planification : dans EasyVista, la réservation reste « Evènements spéciaux ». Elles sont partagées entre tous les postes par le dossier partagé, comme le n°, la ville et la rue.
|
## 2026.5.46 (9 juillet 2026)
|
||||||
- **Catégorie proposée à la saisie du n°** : le n° d'une intervention Roll Out propose Roll Out.
|
|
||||||
- **Catégorie inconnue conservée** : une catégorie posée par une version plus récente n'est plus effacée quand on modifie la réservation.
|
|
||||||
|
|
||||||
#### Déploiement
|
- Nouvelle disposition « échelle de temps exacte » pour la vue horizontale.
|
||||||
|
- Fin des fausses déconnexions d'EasyVista.
|
||||||
|
- Informations des réservations (n°, lieu, catégorie) partagées entre les postes.
|
||||||
|
- Douchette : confirmation par EasyVista.
|
||||||
|
- Recherche : opérateurs et pagination.
|
||||||
|
- Script de synchronisation téléchargeable depuis l'onglet Synchronisation.
|
||||||
|
|
||||||
- **Mettre à jour tous les postes le même jour.** Un poste resté en 2026.5.49 qui modifie une réservation Roll Out ou Déménagement effacerait cette catégorie sur tous les postes.
|
## 2026.5.45 (8 mai 2026)
|
||||||
|
|
||||||
### `v2026.5.49` (1 septembre 2026) — Sécurité hors session, onglet Email clarifié, lecture au défilement, affichage fiabilisé
|
- Dock latéral : mets des interventions de côté et dépose-les un autre jour.
|
||||||
|
- Interventions terminées mieux reconnues.
|
||||||
|
- Session conservée avec plusieurs onglets EasyVista ; tickets #3 à #8 résolus.
|
||||||
|
|
||||||
- **Sécurité et confidentialité** : sans session EasyVista active, l'extension travaille sur le **cache local seul** (plus d'accès ni d'écriture au dossier partagé) et **bloque toute modification** (déplacement, suppression, création/édition d'absence, réservation).
|
## 2026.5.44 (1er mai 2026)
|
||||||
- **Onglet Email clarifié** : deux sections distinctes (déplacement / annulation-suppression), chacune avec sa case d'activation et son modèle ; bloc **« Copie (CC) »** commun avec aperçu en direct des adresses retenues (invalides barrées) ; variables cliquables en colonnes. La suppression d'une intervention propose désormais un brouillon d'annulation.
|
|
||||||
- **Lecture au défilement (vue classique)** : nom du technicien, compteur d'interventions et **frise horaire** restent visibles en haut de chaque carte au scroll ; survol d'une pause qui met la frise en évidence.
|
|
||||||
- **Affichage et reconnexion fiabilisés** : bannière « Session expirée » bien positionnée et affichée uniquement quand de vraies cartes existent ; plus de **bulles de techniciens vides** quand la session est morte ; barre de progression qui ne recouvre plus le nom du technicien.
|
|
||||||
- **Corrections** : noms de contact nettoyés (« ? » parasites), deux interventions d'un même technicien le même jour affichées séparément, intervention partagée entre deux techniciens visible sur les **deux**, homonymes levés par recherche via le **login**, caractères parasités depuis EasyVista corrigés, indicateur d'écart d'adresse remis à jour après correction.
|
|
||||||
|
|
||||||
### `v2026.5.48` (24 juillet 2026) — Notification par email des déplacements, onglet Email, fiches réservation fiables entre postes
|
- Barre du haut revue.
|
||||||
|
- Apparence : couleur de la barre du haut et police de l'application.
|
||||||
|
- Carte d'accueil quand aucune équipe n'est choisie.
|
||||||
|
- Statuts EasyVista réglables.
|
||||||
|
|
||||||
- **Brouillon d'email après un déplacement** (autre jour ou autre technicien, fenêtre de modification ou glisser-déposer) : pré-adressé aux deux techniciens (séparateur « ; » compatible Outlook), sujet et message issus d'un **modèle personnalisable** (Paramètres → Email) avec variables cliquables par thème (Intervention / Avant / Après) et aperçu en direct. L'envoi reste manuel. La case « Prévenir les techniciens par email » des fenêtres de déplacement ne vaut, décochée, que pour ce déplacement-là.
|
## 2026.5.39 à 2026.5.43 (26 et 27 avril 2026)
|
||||||
- **Adresses des techniciens** (onglet Équipe, colonne Email, boutons au-dessus de la liste) : « Récupérer les emails » remplit les adresses manquantes depuis l'annuaire EasyVista et **complète un nom affiché tronqué** (garde anti-homonyme) ; adresse saisie jamais écrasée ; déduction `prenom.nom@domaine` configurable sinon.
|
|
||||||
- **Réservations fiables entre postes** : les infos saisies (n°, ville, rue, catégorie) voyagent avec la réservation, horodatées — la modification la plus récente gagne ; plus de fuites entre créneaux, techniciens ou postes ; transfert conservé sur re-planification EasyVista non ambiguë ; pompier du jour plus compté en double.
|
|
||||||
- **Reconnexion** : l'écran « Session expirée » sans cache se ferme réellement après reconnexion ; re-cliquer relance le chargement.
|
|
||||||
- **Recherche** : départ fiable en fin de frappe, Entrée immédiate, roue visible dès le début, « Planifiée (passé) » ne ferme plus la zone, statuts affichés seulement pour Clôturé / Fait.
|
|
||||||
|
|
||||||
### `v2026.5.47` (18 juillet 2026) — Vue « échelle de temps exacte » : aide à la saisie, erreurs mises en évidence, corrections de fiabilité
|
- Séparation matin et après-midi ; onglet Apparence (thème, taille du texte, heures).
|
||||||
|
- Groupe EasyVista et domaines réglables dans les Paramètres ; plus aucune équipe inscrite dans le code.
|
||||||
|
- Intervention en conflit avec une absence ou une réservation en rouge plein.
|
||||||
|
- Vue horizontale enrichie : référence, ville et couleur de catégorie.
|
||||||
|
- Firefox : menu des pastilles et bulles épinglées stabilisés.
|
||||||
|
|
||||||
**Aide à la saisie** : au survol d'un créneau libre en échelle exacte, une zone surlignée suit la souris et affiche l'**heure choisie** (début → fin) ; une **bulle fixe** rappelle la **plage libre et la durée disponible**, toujours placée sur un espace libre (jamais par-dessus un rendez-vous). Les **rendez-vous en erreur** (début = fin) sont désormais affichés en **rouge** et restent **visibles** ; en poser un par-dessus est **bloqué** avec un avertissement. Interventions courtes (1–5 min) visibles ; zone du nom du technicien pleine hauteur ; barre des heures collée sous la banderole.
|
## 2026.5.16 à 2026.5.38 (21 au 26 avril 2026)
|
||||||
|
|
||||||
**Fiabilité** : navigation rapide entre dates (plus d'écrasement du jour affiché), technicien retiré de l'équipe, **blocage de synchronisation du dossier partagé** corrigé, jour lu depuis le dossier d'emblée, doublon d'absence, réservations multiples le même jour, barre de progression et message de reconnexion bien placés.
|
Arrivée de la vue horizontale, du menu des initiales avec les Paramètres, des couleurs d'absence (Maladie, Congé, Pompier) et des bulles épinglables que tu peux déplacer.
|
||||||
|
|
||||||
**Synchronisation** : bouton **« Tester la communication »** (diagnostic extension → script du poste → dossier), panneau Synchro réorganisé, **script du poste 2026.1.8** (verrou d'index multi-postes, icône persistante ; le bouton « Télécharger le script » récupère cette version).
|
## 1.0.0 à 5.0.12 (16 au 20 avril 2026)
|
||||||
|
|
||||||
### `v2026.5.46` (9 juillet 2026) — Couche données v2, vue « échelle de temps exacte », session fiabilisée, réservations partagées
|
Premières versions : planning EasyVista par technicien, bulles épinglables, grande bulle de la frise, horloge et compteur de session.
|
||||||
|
|
||||||
**Couche données v2 (refonte complète)** : un store par jour (`planv2_<date>`), un seul verdict par intervention (live / done / suspended / closed / gone / moved), une seule fusion vie/mort pour tout (EV↔store, local↔dossier, import). Dossier partagé en sous-dossier `v2` (les anciens postes n'interfèrent plus) ; EasyVista s'affiche immédiatement, le dossier habille les cartes sans re-télécharger ; les déplacements portent un verdict propagé.
|
|
||||||
|
|
||||||
**Vue « échelle de temps exacte »** (option Paramètres → Apparence, exclusive avec « Afficher les pauses ») : chaque intervention est posée à son heure réelle sur une bande continue — règle des heures fixe en haut, traits d'heures continus sur toute la hauteur (pointillés aux demi-heures, césure rayée à midi, les absents sont sautés), ligne rouge « maintenant », chevauchements empilés en sous-lignes, bord gauche coloré = poignée (cliquer = modifier, glisser = déplacer), zones libres survolables et cibles de drop précises, cartes étroites en texte compact (« Université 5 »).
|
|
||||||
|
|
||||||
**Session fiabilisée** : fin des faux « déconnecté » (cookie réécrit ≠ supprimé, expiration déclarée sur preuve uniquement, onglet EasyVista facultatif avec la permission cookies, contre-vérification serveur des statuts HTTP, compteur recalé sur la vraie valeur EV).
|
|
||||||
|
|
||||||
**Réservations** : modal enrichie (préréglages, n°/ville/rue/catégorie, recherche automatique des infos EV par n°) ; les informations sont désormais partagées entre tous les postes via le dossier. En vue par heure, la carte affiche le lieu, sinon qui a réservé.
|
|
||||||
|
|
||||||
**Douchette** : vraie confirmation EasyVista + resynchronisation automatique après un déplacement. **Recherche** : opérateurs (`%`, `"..."`, `-mot`, `tech:`...), pagination, mise en avant stabilisée. **Pompier** : assignations par période (« pompier du mois »). **Divers** : conflit au déplacement avec créneau libre proposé, vérification d'adresse fiche/action, badge multi-jours, contacts à deux numéros corrigés, réouverture des fiches faites/clôturées, catégorie « Autre » en violet foncé.
|
|
||||||
|
|
||||||
**Installeur du dossier partagé publié** : le script PowerShell (native messaging) est en asset de la release, téléchargeable depuis Paramètres → Dossier partagé.
|
|
||||||
|
|
||||||
### `v2026.5.45` (8 mai 2026) — Dock latéral drag&drop, fix verdicts ghost, multi-onglets EZV résolu
|
|
||||||
|
|
||||||
**Dock latéral drag&drop**
|
|
||||||
|
|
||||||
Le dock à droite permet de mettre des interventions de côté pendant la navigation entre les jours, puis de les redéposer plus tard.
|
|
||||||
|
|
||||||
- Apparition graduelle pendant un drag : peep-min (sans contenu), peep (avec cartes, ~50 % visibles), expanded (au survol ou au bord droit).
|
|
||||||
- **Délai 500 ms** pour expand/collapse pour éviter le flicker quand le curseur effleure le bord du dock. Wrapper debouncé qui s'auto-annule si l'intention change avant 500 ms.
|
|
||||||
- **Card du dock** : référence en gras + durée prévue (`1h`, `1h30`, `45min`) calculée depuis `startTime` / `endTime` du snapshot, avec une **barre verticale 4 px** sur la gauche dans la couleur de la catégorie d'intervention. Fond transparent. La couleur est lue directement sur la classe `color-*` de la card source du planning.
|
|
||||||
- **Bouton de retrait `×`** : repositionné dans la card (`top: 2px / right: 2px`). **Appui long 2 s** avec animation `conic-gradient` (`@property --hold`). Un clic simple ne fait rien (anti-clic accidentel).
|
|
||||||
- **Drag depuis le dock** : retrait différé à l'activation effective du drag (5 px). Un clic-relâche sans bouger ne sort plus la carte. Ghost flottant **sans heure à gauche**. Drop sur tech → modal de confirmation. Drop hors zone / Échap / sur le même slot d'origine → restauration dans le dock.
|
|
||||||
- **Pas de scrollbar horizontale** en bas du dock (`overflow-x: hidden` explicite). **Pas de clic-through** dans la zone du dock en peep / expanded.
|
|
||||||
- **Pas de placeholder fantôme** pendant un drag-from-dock : fallback sur `iv._dockHtml` (HTML capturé à l'add) puisque la card source n'existe plus dans le planning courant.
|
|
||||||
|
|
||||||
**Verdicts ghost — fix critique parser de fiche**
|
|
||||||
|
|
||||||
Une intervention terminée par le tech mais dont la fiche était passée en statut « Redirigé » / « Finalisation » / « Exécution » était à tort marquée comme « annulée » et retirée du planning, parce que le parser cherchait les dates aux indices fixes `[8]` / `[9]` / `[11]` du tableau `rows` alors que le layout EV récent les place en `[6]` / `[7]` / `[9]`.
|
|
||||||
|
|
||||||
- **Détection robuste** : scan des valeurs pour le pattern `DD/MM/YYYY HH:MM:SS` et garde des 2 dernières occurrences comme (création, fin). Description = 2 colonnes après la date de fin. Survit aux variations de layout EV.
|
|
||||||
- **Décorrélation logs / KEEP-forcé** : nouvelle case dédiée « Garder les disparitions » dans Paramètres → Diagnostics, indépendante des « Logs verbeux ». Persistée dans `admin_config.keepDisappearedGhosts` (défaut OFF). Mode prod par défaut → verdict `REMOVE` appliqué.
|
|
||||||
- **Conditions de retrait** : statut EV ∈ Annulé/Supprimé, OU statut clos sans action du tech avec commentaire, OU action sans commentaire `login: …`.
|
|
||||||
- **Garde KEEP par sécurité** sur tous les chemins d'erreur (pas de session, JSON `basicAutoComplete` invalide, exception réseau, fiche tronquée < 20 000 octets, exception non rattrapée).
|
|
||||||
|
|
||||||
**Drag&drop bloqué pour les interventions non-déplaçables**
|
|
||||||
|
|
||||||
`_canRescheduleIv` refuse maintenant explicitement le drag pour :
|
|
||||||
|
|
||||||
- iv en verdict `terminated-pending` (gris « fait »).
|
|
||||||
- iv en verdict `terminated-clos` (vert ✓✓).
|
|
||||||
- iv dont le statut EV est dans `CLOSED_STATUS` ou `RESOLVED_STATUS`.
|
|
||||||
- iv en cours d'analyse de disparition (`_disappearChecking`).
|
|
||||||
|
|
||||||
**Popups dépinglés — auto-fermeture**
|
|
||||||
|
|
||||||
- Auto-fermeture du popup `.soft-unpinned` quand la souris quitte sa zone et celle des cards liées de la même iv (300 ms de grâce, fade-out 180 ms). Hit-test géométrique `mousemove` document.
|
|
||||||
- Pause du hit-test pendant un drag de planning en cours (`reschedule-dragging`).
|
|
||||||
|
|
||||||
**Tooltip / contact nettoyé**
|
|
||||||
|
|
||||||
Le contact ne contient plus les labels « fiche » (`Étage`, `Bureau`, `Service`, `Matériel`, `Problème`, `TFS`, `Date`, `Heure`, `Lieu`, `Bénéficiaire`, `Nom utilisateur`) qui se collent parfois au contact à cause de séparateurs perdus dans la source EV. `extractContacts` détecte 2 patterns : label suivi de `:`, ou lettre minuscule collée à un label en majuscule. Côté tooltip, `formatActionTextMultiline` insère un saut de ligne avant chaque label, y compris quand le `:` manque mais que le label est collé à un mot minuscule.
|
|
||||||
|
|
||||||
**Issues résolues — détails par ticket**
|
|
||||||
|
|
||||||
- **#3** — Coches « Absences récurrentes » : merge propre au lieu d'écrasement.
|
|
||||||
- **#4** — Perte session EZV multi-onglets : permission optionnelle `cookies` + listener `chrome.cookies.onChanged` qui broadcaste un `cookieChanged` au viewer.
|
|
||||||
- **#5** — Copie référence depuis popup épinglée : handler `copy-ref` ajouté.
|
|
||||||
- **#6** — Popup épinglée premier plan au clic : recalcul du z-index sur `mousedown`.
|
|
||||||
- **#7** — Notification « +2 min » fantôme : reset des flags slide-alert au retour de la prolongation.
|
|
||||||
- **#8** — Compteur pompier : un pompier absent toute la journée est exclu du compteur.
|
|
||||||
|
|
||||||
### `v2026.5.44` — Refonte topbar, personnalisation Apparence, onboarding équipe, fix #1
|
|
||||||
|
|
||||||
**Refonte topbar (vue classique)**
|
|
||||||
- Sélecteur de date du planning **ancré au centre absolu** (`position: absolute; left: 50%; transform: translate(-50%, -50%)`) — il ne se décale plus quand le bouton « ✕ Arrêter » apparaît à droite pendant un rafraîchissement. Auparavant il était centré via `margin-left: auto; margin-right: auto;` dans le flex flow → l'arrivée du bouton Arrêter rétrécissait `topbar-left` et la date glissait vers la gauche.
|
|
||||||
- Bouton **« Aujourd'hui »** affiché en toutes lettres (au lieu de « Auj. »).
|
|
||||||
- Horloge contextuelle (date du jour + heure) réduite et discrète, à côté du bouton Aujourd'hui dans un cadre encadré (today-block).
|
|
||||||
- Date du planning agrandie (28px en classique, 17px gras en horizontal) et neutre — la couleur ne change plus selon la date sélectionnée.
|
|
||||||
|
|
||||||
**Personnalisation — Paramètres → Apparence**
|
|
||||||
- **Couleur de la barre du haut** : nouveau panneau avec **12 presets cliquables** (Défaut, Blanc, Gris clair, Anthracite, Bleu DGNSI, Marine, Vert sapin, Brique, Violet, Rouge, Bleu pastel, Vert pastel) + **picker custom** (`<input type="color">`) + **champ hex** `#rrggbb` + bouton **Réinitialiser**. Persisté dans `cfg.topbarColor`.
|
|
||||||
- **Calcul automatique du contraste** : la luminance de la couleur choisie détermine la couleur du texte topbar. Variable CSS `--topbar-text` posée sur `:root` (blanc sur fond foncé, foncé sur fond clair). `.topbar h1`, `.app-clock*`, `.capture-info`, `.date-custom`, boutons et badges héritent de cette variable. Plus de texte invisible quand le user pique du noir/marine.
|
|
||||||
- Quand une couleur custom est active (`html.has-topbar-color`), les boutons de la topbar (et de la sidebar en horizontal) adoptent un **look translucide cohérent** via `color-mix(in srgb, var(--topbar-text) X%, transparent)` (10% bg, 28% border, hover plus marqué).
|
|
||||||
- **Police de l'application** : sélecteur avec **28 choix** organisés en familles :
|
|
||||||
- sans-serif : Arial, Helvetica, Verdana, Tahoma, Trebuchet MS, Calibri, Segoe UI, Gill Sans, Futura, Optima
|
|
||||||
- serif : Times New Roman, Georgia, Cambria, Garamond, Palatino, Bookman
|
|
||||||
- monospace : Courier New, Consolas, Lucida Console, JetBrains Mono / Fira Code
|
|
||||||
- display : Comic Sans MS, Impact, Brush Script, Copperplate
|
|
||||||
- condensée : Arial Narrow / Helvetica Narrow
|
|
||||||
|
|
||||||
La police choisie s'applique à **TOUTE la page** (body) — topbar, cards, popups, tooltips, panel admin. Variable CSS `--app-font`. Chaque option du select s'affiche dans sa propre police pour prévisualiser, avec un aperçu live (« Aperçu — Vendredi 24.04.2026 ») à droite du select.
|
|
||||||
- Persisté dans `cfg.appFont` (ancien `cfg.topbarFont` lu en fallback pour migration).
|
|
||||||
|
|
||||||
**Vue horizontale**
|
|
||||||
- Bloc « Aujourd'hui + horloge » déplacé en bloc dans la sidebar (`today-block` ajouté à `ELEMENTS_TO_RELOCATE`). Aujourd'hui en haut, horloge en dessous, dans le **même cadre encadré** que la vue classique.
|
|
||||||
- Date sélectionnée mise en avant (17px gras), date du jour + heure réduites à 12px (même petite taille pour rester discrètes).
|
|
||||||
- **Barre verticale verte** ajoutée à droite des mini-cards quand le ticket est officiellement clôturé / résolu (✓✓). Pseudo-élément `::before` à `right: 0; width: 4px; background: var(--ok)`. Le ✓✓ est décalé à `right: 14px` pour ne pas chevaucher la barre.
|
|
||||||
- Quand une couleur de topbar est choisie, **la sidebar adopte aussi cette couleur** : titre, horloge, capture-info, stats globales, today-block, date sélectionnée, boutons (`.btn-action`, `.btn-refresh`, `.btn-today`, `.btn-subtle`, `.btn-icon`, `.btn-nav`), theme-toggle et séparateurs prennent une teinte translucide cohérente. Bordure droite de la sidebar adaptée. Séparateurs (border-top/bottom de `#stats`, trait au-dessus du 1er bouton) en `color-mix(--topbar-text 30%)`.
|
|
||||||
|
|
||||||
**Statistiques globales**
|
|
||||||
- Nouveau compteur **« X faits / Y clos »** entre `(matin · après-midi)` et `tech. dispo`. `s.done` calculé dans `computeStats` englobe tous les `_disappearStatus` ∈ {closed, terminated, terminated-clos, terminated-pending, terminated-suspended} + statuts EV reconnus comme clôturés/résolus.
|
|
||||||
- En vue classique, séparateur `//` après `clos` (au lieu de `·`).
|
|
||||||
- En vue horizontale (sidebar), une **barre horizontale 1px** pleine largeur sépare le bloc interventions/faits/clos du bloc tech. dispo + pompiers / absents (le `//` est masqué visuellement et remplacé par `border-top`).
|
|
||||||
|
|
||||||
**Onboarding équipe (1ʳᵉ install ou config vide)**
|
|
||||||
- L'erreur générique « Aucun technicien sélectionné » est remplacée par une **carte d'onboarding centrée propre** avec :
|
|
||||||
- icône `👥` cerclée (88×88 px, `--accent-soft` / `--accent`)
|
|
||||||
- titre « Aucune équipe configurée » (20px, gras)
|
|
||||||
- description courte (14px, `--text-muted`, line-height 1.6)
|
|
||||||
- bouton primary **« Ouvrir paramètres »** qui ouvre directement le panel admin sur la section **Équipe** via `showAdminPanel("team")`.
|
|
||||||
- Carte centrée verticalement et horizontalement dans la zone disponible : `position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%)` ancré sur `<main>` (qui prend `min-height: calc(100vh - var(--topbar-height))` quand la carte est visible). Identique en vue classique et horizontale.
|
|
||||||
- `showError(msg, options)` étendu pour supporter `centered: true`, `icon`, `title`, `actionLabel` + `actionHandler`.
|
|
||||||
- `showAdminPanel(initialSection)` accepte un identifiant de section (`"appearance"`, `"team"`, `"easyvista"`, `"diagnostics"`, `"about"`) pour ouvrir directement sur l'onglet voulu.
|
|
||||||
|
|
||||||
**Refresh / cache / verdicts ghost**
|
|
||||||
- Rafraîchissement **séquentiel** (1 fiche à la fois) au lieu de 5 workers parallèles. Avantages : arrêt instantané via `AbortController` (registre `_evFetchControllers` dans `background.js`, message `abortAllFetches`), plus de races DOM, ordre d'affichage stable (pompier d'abord, alpha, puis matin → après-midi).
|
|
||||||
- Re-fetch du **checksum frais** via `basicAutoComplete` + `redirectHeader` avant chaque fetch fiche → plus de fiche périmée entre sessions.
|
|
||||||
- **Cache merge robuste** : fallback `cachedByRef` quand `actionId` change. Cache écrit toutes les 5 fiches pendant le refresh (incrémental), pour ne pas perdre les statuts déjà récupérés si l'user change de date en cours.
|
|
||||||
- **Verdicts ghost unifiés** dans `analyzeOneDisappearedIv` :
|
|
||||||
- `terminated-clos` → ✓✓ vert (clos officiel + commentaire tech)
|
|
||||||
- `terminated-pending` → ✓ gris « Fait » (commentaire tech mais pas encore clos)
|
|
||||||
- `terminated-suspended` → ✓ jaune « Suspendu » (statut Suspendu côté EV)
|
|
||||||
- `cancelled` / `cancelled-reservation` / `cancelled-absence` → REMOVE silencieux
|
|
||||||
- **Statuts EV configurables** depuis Paramètres → EasyVista (`cfg.closedStatus`, `cfg.resolvedStatus`, `cfg.cancelledStatus`, `cfg.suspendedStatus`) avec matching insensible à la casse, accents et conjugaisons via `_normalizeStatus` + `_stemStatus` + `_statusMatchesAny`.
|
|
||||||
- Mise à jour live du tooltip et du popup épinglé après un verdict (plus besoin de fermer/réouvrir).
|
|
||||||
- Clic immédiat possible sur la carte dès que le verdict tombe (`updateInterventionRow` attache le click handler dès que `iv.ghost=false` est posé par `verdict()`).
|
|
||||||
- Boutons **« Actualiser »** (rapide, ne re-télécharge pas les fiches déjà connues) vs **« Tout recharger »** (force tout sauf les ✓✓ déjà clos).
|
|
||||||
- **Mode diagnostic optionnel** (Paramètres → Diagnostics, `LOG.isDebug()`) : aucune iv n'est retirée silencieusement, tout est tracé sous le préfixe `[disparition]` dans la console F12. En PROD (par défaut), les iv `cancelled` sont bien retirées.
|
|
||||||
|
|
||||||
**Bugfix #1 (Pompier + Absence)**
|
|
||||||
- Si un technicien est à la fois pompier ET absent, les deux badges s'affichent désormais avec un séparateur `/` (ex: `Pompier / Absent`) au lieu de masquer l'absence derrière le badge pompier.
|
|
||||||
- Logique : détection d'un `extraAbsenceBlock` qui ajoute une note d'absence sous la note pompier dans la card.
|
|
||||||
|
|
||||||
**Autres bugfixes**
|
|
||||||
- **Absences récurrentes au switch de groupe** : quand on changeait de groupe puis revenait au groupe initial, les jours d'absence cochés disparaissaient visuellement (la donnée elle-même restait en `cfg.recurringAbsences`). Fix : restauration depuis `cfg.recurringAbsences[id]` à chaque ré-ajout de ligne dans `refreshTeamForGroup` et la boucle d'auto-détection initiale.
|
|
||||||
- **Barre de progression / bannière session expirée** : suivent désormais la hauteur dynamique de la topbar via `--topbar-height` calculée par un `ResizeObserver` sur `header.topbar`. Plus de chevauchement quand on scrolle (les anciens `top: 56px` hardcodés sont remplacés par `top: var(--topbar-height, 56px)`).
|
|
||||||
- **STATUS_FR regex** : limite augmentée de `[^"]{2,30}` à `[^"]{2,200}` (ne matchait pas « Suspendu : Attente info bénéficiaire/demandeur » qui fait 47 chars).
|
|
||||||
- **Description action** : décodage `" → "`, `<br> → \n`, HTML strippé via une nouvelle pipeline. Préfixe `login: ` retiré du commentaire technicien dans le tooltip / popup.
|
|
||||||
- **Tooltip référence** : flèche ` ↗` retirée du lien cliquable (`.tt-ref-link::after { content: " ↗" }` neutralisée).
|
|
||||||
|
|
||||||
### `v2026.5.43` — Fix Firefox menu dock + stabilité popup pin/unpin
|
|
||||||
|
|
||||||
**Menu hover sur pastille du dock (popup réduit) — bug Firefox uniquement**
|
|
||||||
Quand un popup épinglé était réduit dans la taskbar du bas, le menu qui apparaît au survol de la pastille (Agrandir / Fermer) se positionnait trop haut. Cause : `getBoundingClientRect()` appelé immédiatement après `appendChild` sans attendre la mise en page Firefox, combiné à un `transform: translateY` dans l'animation. Fix : positionnement hors écran initial, force-layout via `offsetHeight`, puis pose finale. Animation simplifiée en opacité-only.
|
|
||||||
|
|
||||||
**Stabilité popup au pin/unpin (tous navigateurs)**
|
|
||||||
La popup épinglée bougeait de 16px et changeait de 1px de bordure quand on la dé-épinglait via 📌. Cause : différence de `padding-top` (28px vs 12px) et `border-width` (2px vs 1px) entre `.pinned-popup` et `.soft-unpinned`. Fix : `.soft-unpinned` conserve les mêmes dimensions, juste la couleur de bordure change (gris discret au lieu de bleu accent) pour signaler le mode détaché.
|
|
||||||
|
|
||||||
### `v2026.5.42` — Nettoyage de commentaires + exemples génériques
|
|
||||||
|
|
||||||
Passage en revue des commentaires de `src/viewer.js` : les exemples qui illustraient le parsing des contacts / lieux / références / codes-barres ont été uniformisés en placeholders abstraits (`Nom1 Prénom1 +41XXXXXXXXX`, `SYYMMDD_NNNNN`, `XXXX_NNNNNNNN`, etc.) plutôt que des chaînes spécifiques.
|
|
||||||
|
|
||||||
**Comportement runtime strictement inchangé** — uniquement de la documentation et des commentaires. Mise à jour cohérente du README, du CHANGELOG et de la page wiki Utilisation pour utiliser les mêmes notations génériques dans les exemples de référence.
|
|
||||||
|
|
||||||
### `v2026.5.41` — Suppression des hardcodes runtime + UX admin + thème unifié
|
|
||||||
|
|
||||||
**Plus aucun hardcode runtime**
|
|
||||||
- Le groupe EV, les domaines, la liste de techniciens et les absences récurrentes ne sont **plus codés en dur** dans `background.js` / `viewer.js`. Tout est lu depuis `admin_config` (chrome.storage.local), alimenté par les onglets **Équipe** et **EasyVista** du panel admin.
|
|
||||||
- `chrome.storage.local` survit aux mises à jour d'extension → la configuration de l'utilisateur (groupe, équipe, absences récurrentes, domaines) est conservée d'une version à l'autre.
|
|
||||||
- **Au 1er install** : aucun tech sélectionné, aucune absence récurrente. Le viewer affiche *"Aucun technicien sélectionné. Ouvrez ⚙ Paramètres → Équipe…"* tant que rien n'est configuré.
|
|
||||||
- Suppression de `isPillonelAbsentFriday()` (hardcode du nom + du jour) → remplacée par `isRecurringAbsence(tech, isoDate)` générique. Label "Absent le X" calculé depuis le jour de la semaine.
|
|
||||||
|
|
||||||
**UX admin**
|
|
||||||
- **Auto-refresh à l'enregistrement** (équipe / domaines / heures) → plus besoin de recharger l'extension manuellement.
|
|
||||||
- **Bouton ✓ Appliquer** pour les heures de la journée + toast de confirmation.
|
|
||||||
- **Toasts au-dessus du flou** du panel admin (z-index 11000 > 10000).
|
|
||||||
- **Onglet Statuts retiré** (placeholder lecture-seule).
|
|
||||||
- **Tri équipe** : inclus d'abord, puis exclus, alphabétique dans chaque sous-groupe (ne saute plus quand on coche/décoche).
|
|
||||||
|
|
||||||
**Thème unifié**
|
|
||||||
- Le toggle 🌙 de la topbar et le sélecteur Apparence du panel admin écrivent dans la même clé `cfg.theme`.
|
|
||||||
- Mode "Automatique" résolu en JS via `prefers-color-scheme` (avant : le CSS retombait sur le clair même quand l'OS était en sombre, faute de bloc `@media`).
|
|
||||||
- Listener `matchMedia` pour bascule live en mode auto.
|
|
||||||
|
|
||||||
**Conflits absence/réservation × intervention**
|
|
||||||
- Si une intervention est planifiée pendant qu'un tech a une **absence** (toute la journée ou demi-journée) ou une **réservation** au même créneau, sa carte (row classique + mini-card en vue horizontale) est peinte en **rouge plein** avec texte blanc. Logique : full-day → toutes les interv en rouge ; partiel → seules celles en chevauchement.
|
|
||||||
|
|
||||||
**Synchronisation des heures EV**
|
|
||||||
- Les paramètres `day_start_hour` / `day_end_hour` envoyés à `planning_xhr.php` et `begin_hour` / `end_hour` envoyés à `plan_set_holidays_popup.php` (création absence) et `plan_set_tech_planif_popup.php` (douchette) lisent désormais `cfg.dayStart` / `cfg.dayEnd`. Avant : `8` / `18` / `19` figés en dur.
|
|
||||||
|
|
||||||
**Permissions runtime pour domaines**
|
|
||||||
- `manifest.json` : ajout de `optional_host_permissions: ["https://*/*"]`.
|
|
||||||
- `chrome.permissions.request()` au save d'un domaine custom dans Paramètres → EasyVista. Refus → toast d'avertissement.
|
|
||||||
|
|
||||||
**Vue horizontale**
|
|
||||||
- Popups au survol/clic limités aux candidats `dessous`/`dessus` (la sidebar à gauche et la timeline pleine largeur rendent gauche/droite peu praticables).
|
|
||||||
|
|
||||||
**Coulisses (`background.js`)**
|
|
||||||
- Nouveaux helpers : `getAdminConfig()`, `getEvOrigins()`, `getGroupId()`, `getSupportIds()`, `getDayBounds()`.
|
|
||||||
- `fetchPlanningXml()` lève `Error("no_team_configured")` quand la liste de techs est vide.
|
|
||||||
|
|
||||||
**Ménage**
|
|
||||||
- Suppression de `CACHE_DAYS` (inutilisée), `LS_THEME` (clé localStorage obsolète), commentaire historique sur `initAdminMenu()`. Aucun symbole orphelin restant.
|
|
||||||
|
|
||||||
### `v2026.5.40` — Sélection groupe EV + édition domaines + tri équipe + réorga repo
|
|
||||||
|
|
||||||
**Onglet Équipe**
|
|
||||||
- Nouveau **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 → source autoritative, robuste aux ajouts/renommages côté EV (un nouveau groupe apparaît tout seul).
|
|
||||||
- ID groupe affiché en italique à côté du sélecteur (ex: `ID groupe : 191`).
|
|
||||||
- Quand on change de groupe, la **liste d'équipe se rafraîchit automatiquement** avec les membres du nouveau groupe (fetch live).
|
|
||||||
- **Plus de bouton "Détecter"** : tout est auto à l'ouverture de l'onglet.
|
|
||||||
- **Tri double** des techniciens : d'abord les inclus (cases cochées), puis les exclus, et alphabétique dans chaque sous-groupe (insensible casse/accents). Le tri se rafraîchit uniquement aux render() pour éviter que les lignes sautent au toggle.
|
|
||||||
|
|
||||||
**Onglet EasyVista**
|
|
||||||
- Refonte complète : **édition manuelle des deux domaines** EV (interne DGNSI = `https://itsma.etat-de-vaud.ch`, externe Internet = `https://itsma.vd.ch`).
|
|
||||||
- Bouton **💾 Enregistrer** (normalise : ajoute `https://`, retire le trailing slash) + bouton **↺ Réinitialiser** pour revenir aux valeurs par défaut.
|
|
||||||
- Les domaines par défaut restent codés en dur en fallback ; le branchement effectif côté `background.js` (utiliser `cfg.evOrigins`) sera fait dans une prochaine version après validation.
|
|
||||||
|
|
||||||
**Onglet Statuts retiré**
|
|
||||||
- Section "Statuts" supprimée du panel admin (placeholder lecture-seule, jamais utile).
|
|
||||||
|
|
||||||
**Vue horizontale enrichie**
|
|
||||||
- Chaque segment timeline contient désormais une barre verticale **couleur catégorie** à gauche (mêmes teintes que les `intervention-dot` de la vue classique : livraison/recup/remplacement/incident/rollout/réservation/autre), la **référence** (ex: `SYYMMDD_NNNNN`) en gras, et la **ville** en gris muted.
|
|
||||||
- Hauteur de la timeline horizontale passée de 22px à 32px pour laisser la place au texte.
|
|
||||||
- Vue classique inchangée.
|
|
||||||
|
|
||||||
**Réorganisation interne du repo**
|
|
||||||
- `src/` : sources de l'extension (manifest, background, viewer.{html,js,css}, icons).
|
|
||||||
- `Autres/` : build.sh + meta files (LICENSE, README, CHANGELOG).
|
|
||||||
- `Builds/` : artefacts distribués aux techniciens (Chromium/, Firefox/, .zip, .xpi).
|
|
||||||
- `dist/` : sortie de build (gitignoré).
|
|
||||||
|
|
||||||
**Coulisses (`background.js`)**
|
|
||||||
- Nouveau message `detectGroups` + fonction `detectGroupsFromEV()` qui fetche `/index.php?eventName=HelpDesk_PlanningItem` et extrait les paires `(id, nom)` via le `<select>`.
|
|
||||||
- `detectTeamFromEV()` accepte désormais un `groupId` en argument → permet de basculer entre SI-CSS / SI-EXT depuis l'admin.
|
|
||||||
- ⚠ Le fetch du planning continue d'utiliser `group_id=191` codé en dur — sera retiré quand on validera que `cfg.groupId` est bien alimenté par le sélecteur en terrain réel.
|
|
||||||
|
|
||||||
### `v2026.5.39` — Séparation Matin / Après-midi + Apparence
|
|
||||||
- Pills "MATIN" / "APRÈS-MIDI" entre les interventions de chaque tech
|
|
||||||
- Timeline : coupure midi très visible (bande verticale + stripes)
|
|
||||||
- Section **Apparence** dans les paramètres :
|
|
||||||
- Sélecteur thème (Auto / Clair / Sombre)
|
|
||||||
- Slider taille du texte (70% à 120%, 5 paliers)
|
|
||||||
- Durée du cache configurable (défaut 7 jours)
|
|
||||||
- Heures de la journée configurables (défaut 8h-18h)
|
|
||||||
- Section **À propos** (version, auteur, licence)
|
|
||||||
- Bouton "Vue" (popup user-badge) plus clair : montre la vue de destination
|
|
||||||
- Tooltips : 500ms à l'apparition + 500ms à la disparition (cohérent entre vues)
|
|
||||||
- Compteur "X tech. dispo" dans les stats globales
|
|
||||||
|
|
||||||
### `v2026.5.38` — Attribution auteur + nettoyage + observabilité
|
|
||||||
- Module `LOG` unifié avec préfix + timestamp + version
|
|
||||||
- Handlers globaux d'erreur (`window.error`, `unhandledrejection`)
|
|
||||||
- Toggle "Logs verbeux (debug)" dans le panel admin
|
|
||||||
- `sendMessage` avec timeout 15s
|
|
||||||
- `writeCache` avec gestion quota (purge auto + retry)
|
|
||||||
- `renderFromData` wrappé en try/catch + null checks
|
|
||||||
- Signature "Développé par FroSteel" en bas du popup user-badge
|
|
||||||
- En-têtes copyright dans tous les fichiers source
|
|
||||||
- Nettoyage : suppression de code mort (initAdminMenu, classes CSS orphelines, console.log debug verbeux)
|
|
||||||
|
|
||||||
### `v2026.5.37` — Refonte vue horizontale (sidebar complète)
|
|
||||||
- Topbar entièrement déplacée en sidebar verticale
|
|
||||||
- User-badge + titre + bouton Aujourd'hui + date/heure dans la sidebar
|
|
||||||
- Banderole pompier masquée
|
|
||||||
|
|
||||||
### `v2026.5.36` — Sidebar verticale en vue horizontale
|
|
||||||
- Wrapper flex-row `#horizontal-wrapper` [sidebar 200px] + [main]
|
|
||||||
- Déplacement physique des éléments via JS
|
|
||||||
|
|
||||||
### `v2026.5.32` — Vue horizontale togglable
|
|
||||||
- Bouton ⊞ "Vue" dans popup user-badge
|
|
||||||
- Toggle Vue classique ↔ Vue horizontale persisté
|
|
||||||
- Chaque tech = 1 ligne horizontale compacte
|
|
||||||
|
|
||||||
### `v2026.5.27` — Classification absences
|
|
||||||
- ABSENCE_LABELS regex (Congé/Maladie/Pompier)
|
|
||||||
- Couleurs catégories : Maladie indigo, Congé cyan, Pompier rouge
|
|
||||||
- Topbar une ligne, fermeture auto popups
|
|
||||||
|
|
||||||
### `v2026.5.25` — Bouton Paramètres dans popup user-badge
|
|
||||||
- Remplace les 5 clics sur le titre pour ouvrir admin
|
|
||||||
|
|
||||||
### `v2026.5.16` — Passage au versionning par année
|
|
||||||
- Format `YYYY.M.PATCH`
|
|
||||||
- Bump du PATCH à chaque livraison
|
|
||||||
|
|
||||||
### `v5.0.0` — Refonte topbar
|
|
||||||
- `initAppClock` (horloge HH:MM)
|
|
||||||
- `initSessionTimer` (compteur de session EV, tick 1s)
|
|
||||||
- `initAdminMenu` (5 clics sur le titre, retiré en 2026.5.25)
|
|
||||||
|
|
||||||
### `v4.2.3` — Grande popup timeline persistante
|
|
||||||
- `bindTimelinePopover`, `showTimelinePopover`
|
|
||||||
- Clic = popup persistante, hover = popup qui suit la souris
|
|
||||||
|
|
||||||
### `v4.1.3` — Tooltips épinglables
|
|
||||||
- Introduction de `pinTooltip`
|
|
||||||
|
|
||||||
### `v1.0.0` (16 avril 2026) — Version initiale
|
|
||||||
- Premier viewer EasyVista pour le canton
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Historique complet
|
|
||||||
|
|
||||||
40+ tags depuis `v1.0.0` jusqu'à `v2026.5.40`. Liste exhaustive accessible aux personnes ayant accès au repo.
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
Planification v2026.5.50 · Licence MIT · [Signaler un problème](https://gitea.netaplaid.ch/FroSteel/Planification/issues/new)
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
**Planification**
|
||||||
|
|
||||||
|
- [Accueil](Home)
|
||||||
|
- [Installation](Installation)
|
||||||
|
- [Utilisation](Utilisation)
|
||||||
|
- [Réglages](R%C3%A9glages)
|
||||||
|
- [Dépannage](D%C3%A9pannage)
|
||||||
|
- [Versions](Versions)
|
||||||
|
- [Architecture](Architecture)
|
||||||
|
- [Contact](Contact)
|
||||||
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 56 KiB |