Public Access
v2026.5.48 — Architecture
+21
@@ -167,6 +167,9 @@ Côté `background.js`, tous les hardcodes runtime ont été remplacés par des
|
||||
|
||||
## 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 |
|
||||
@@ -189,6 +192,24 @@ Côté `background.js`, tous les hardcodes runtime ont été remplacés par des
|
||||
|
||||
---
|
||||
|
||||
## 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 :
|
||||
|
||||
Reference in New Issue
Block a user