From b7c24f58b27c940c24051e4d1b9d97fba6d822c7 Mon Sep 17 00:00:00 2001 From: louispaulb Date: Sat, 4 Jul 2026 08:55:29 -0400 Subject: [PATCH] =?UTF-8?q?feat(planif):=20s=C3=A9lecteur=20de=20jour=20?= =?UTF-8?q?=C2=AB=20Tourn=C3=A9es=20=C2=BB=20=3D=202=20semaines=20par=20d?= =?UTF-8?q?=C3=A9faut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit routeStripDays passe de 7 → 14 jours (depuis le lundi affiché), données via /roster/capacity (14 j, découplé de la fenêtre de charge 7 j du grid → barres réelles en semaine 2). Chargé à l'entrée de la vue Tournées + au changement de semaine (watch [boardView, start]). Bande pleine largeur + défilement horizontal ; jour courant marqué. Vérifié préview : 14 cellules (29/06→12/07), today marqué, scroll. Co-Authored-By: Claude Opus 4.8 --- apps/ops/src/pages/PlanificationPage.vue | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/apps/ops/src/pages/PlanificationPage.vue b/apps/ops/src/pages/PlanificationPage.vue index a627f4d..f11ed06 100644 --- a/apps/ops/src/pages/PlanificationPage.vue +++ b/apps/ops/src/pages/PlanificationPage.vue @@ -482,7 +482,7 @@
Journée : - + Positions GPS des techs (Traccar), rafraîchies ~25 s. Cliquer pour {{ showLivePos ? 'masquer' : 'afficher' }}. {{ dayRoutes.length }} tournée(s) · clic tech = zoom · clic arrêt = détail @@ -4682,11 +4682,20 @@ const suggestRoutes = computed(() => { watch(() => suggestDlg.view, (v) => { if (v === 'map' && !suggestMapDay.value) suggestMapDay.value = suggestWindow.value[0] || '' }) // ── P3 — Onglet « Tournées » : tournées RÉELLES (jobs assignés, occupation) de la journée choisie, 1 couleur/tech, tracés OSRM (RouteMap). ── const routesDay = ref(null) -// Sélecteur de jour (Tournées) enrichi : bande d'occupation (barres de charge) au lieu de simples chips « lun 29/06 ». -const routeStripDays = computed(() => dayList.value.slice(0, 7).map(d => { - const load = estLoad(d.iso) || 0; const cap = visStat(d.iso).hours || 0 - return { iso: d.iso, dow: d.dow, dnum: d.dnum, weekend: d.weekend, holiday: isHoliday(d.iso), h: load, cap, ratio: hdrRatio(d.iso), over: cap > 0 && load > cap, today: d.iso === todayISO() } -})) +// Sélecteur de jour (Tournées) = bande d'occupation sur 2 SEMAINES (14 j depuis le lundi affiché) par défaut. +// Données via /roster/capacity (14 j) — DÉCOUPLÉ de la fenêtre de charge du grid (7 j) → barres réelles même en semaine 2. +const routeCapacity = ref({}) +async function loadRouteCapacity () { try { const r = await roster.getCapacity(start.value, 14); routeCapacity.value = r.capacity || {} } catch (e) { routeCapacity.value = {} } } +watch([boardView, start], () => { if (boardView.value === 'routes') loadRouteCapacity() }, { immediate: true }) +const routeStripDays = computed(() => { + const out = [] + for (let i = 0; i < 14; i++) { + const iso = addDaysISO(start.value, i); const c = routeCapacity.value[iso] || {} + const h = +c.due_h || 0; const cap = +c.cap_h || 0; const dw = dowOf(iso) + out.push({ iso, dow: FR_DOW[dw], dnum: iso.slice(8) + '/' + iso.slice(5, 7), weekend: dw === 0 || dw === 6, holiday: isHoliday(iso), h, cap, ratio: cap > 0 ? h / cap : (h > 0 ? 1 : 0), over: !!c.overbooked, today: iso === todayISO() }) + } + return out +}) // ── Deep-link (?day=YYYY-MM-DD & ?skill=…) + action « planifier des quarts » du slot-finder ── const route = useRoute()