From c4de33d4483c8453b7b7d9328d2405a27794653f Mon Sep 17 00:00:00 2001 From: louispaulb Date: Sat, 6 Jun 2026 09:15:16 -0400 Subject: [PATCH] =?UTF-8?q?roster(planif):=20chip=20compteur=20=C2=AB=20N?= =?UTF-8?q?=20hors=20quart=20=C2=BB=20dans=20la=20barre=20(signal=20hebdo?= =?UTF-8?q?=20des=20jobs=20assign=C3=A9s=20sans=20quart=20publi=C3=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- apps/ops/src/pages/PlanificationPage.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/ops/src/pages/PlanificationPage.vue b/apps/ops/src/pages/PlanificationPage.vue index 9cc0b1a..8c33a37 100644 --- a/apps/ops/src/pages/PlanificationPage.vue +++ b/apps/ops/src/pages/PlanificationPage.vue @@ -4,6 +4,7 @@
Planification
{{ dirtyCount }} non publié(s) + {{ offShiftWeekCount }} hors quart{{ offShiftWeekCount }} job(s) assigné(s) cette période un jour où la ressource n'a AUCUN quart publié. Repère le ⚠ dans la grille → publier un quart ou réassigner. Semaine précédente @@ -1168,6 +1169,7 @@ function cellPct (techId, iso) { const o = cellOcc(techId, iso); return o ? o.pc function cellJobs (techId, iso) { const o = cellOcc(techId, iso); return o ? (o.jobs || []) : [] } // jobs du jour, déjà triés priorité→heure côté hub function rawCellJobs (techId, iso) { const o = occByTechDay.value[techId + '|' + iso]; return o ? (o.jobs || []) : [] } // jobs BRUTS (inclut les jours SANS quart publié) function offShiftJobs (techId, iso) { return (hasReg(techId, iso) || onGarde(techId, iso)) ? [] : rawCellJobs(techId, iso) } // jobs assignés un jour où le tech n'a AUCUN quart publié +const offShiftWeekCount = computed(() => { let n = 0; for (const t of visibleTechs.value) for (const d of dayList.value) n += offShiftJobs(t.id, d.iso).length; return n }) // total jobs hors quart sur la période visible function prioColor (p) { return p === 'urgent' ? '#ef4444' : p === 'high' ? '#f59e0b' : p === 'medium' ? '#6366f1' : '#9e9e9e' } // Aperçu en survol de drop : occupation projetée si on dépose la sélection ici. function isDropTarget (techId, iso) { return dropPreview.key === techId + '|' + iso }