diff --git a/apps/ops/src/pages/PlanificationPage.vue b/apps/ops/src/pages/PlanificationPage.vue
index acbb6dc..8d8060c 100644
--- a/apps/ops/src/pages/PlanificationPage.vue
+++ b/apps/ops/src/pages/PlanificationPage.vue
@@ -880,7 +880,7 @@
Jobs à assigner ({{ assignTypeFilter.length ? assignJobsFiltered.length + '/' + assignPanel.jobs.length : assignPanel.jobs.length }})
Localiser les {{ assignNoCoord }} job(s) sans coordonnées : adresse → base RQA + GPS (ils apparaissent ensuite sur la carte)
-
Proposer une répartition optimisée (proximité · charge · compétence){{ selectedNames.length ? ' pour la sélection lasso' : (assignDateFilter.length ? ' pour les jours cochés' : '') }} — tu revois et ajustes avant d'appliquer
+
Proposer une répartition optimisée (proximité · charge · compétence){{ suggestFiltered ? ' — ' + suggestJobCount + ' job(s) ' + suggestScope : '' }} — tu revois et ajustes avant d'appliquer
Carte des jobs (regrouper par région)
@@ -1023,8 +1023,8 @@
Répartir :
-
- {{ suggestJobCount }} job(s) {{ selectedNames.length ? 'sélectionnés' : 'des jours cochés' }}
+
+ {{ suggestJobCount }} job(s) {{ suggestScope }}
{{ suggestWindow.map(windowDayLabel).join(', ') }}
{{ selectedNames.length ? 'sélection lasso' : 'ajuste les chips sous le pool' }}
@@ -4383,14 +4383,23 @@ const suggestWindow = computed(() => {
if (f.includes('__overdue__') || f.includes('Sans date') || !days.size) days.add(todayISO()) // en retard / sans date → placés aujourd'hui
return [...days].sort()
})
-// Jobs que « Suggérer » doit répartir : la sélection lasso si active, sinon le pool filtré par les CHIPS de date.
+// Jobs que « Suggérer » doit répartir : la sélection lasso si active, sinon « ce que je vois » = le pool filtré
+// par les CHIPS de TYPE **et** de DATE (assignJobsFiltered). Ex. décocher « téléphonie » → non réparti aux techs terrain.
const suggestJobs = () => {
- const useSel = selectedNames.value.length > 0
- let jobs = (assignPanel.jobs || []).filter(j => j.status !== 'On Hold')
- jobs = useSel ? jobs.filter(j => selectedJobs[j.name]) : jobs.filter(jobMatchesDateChips)
- return jobs
+ if (selectedNames.value.length) return (assignPanel.jobs || []).filter(j => j.status !== 'On Hold' && selectedJobs[j.name]) // sélection lasso explicite
+ return (assignJobsFiltered.value || []).filter(j => j.status !== 'On Hold') // pool tel qu'affiché (type + date)
}
const suggestJobCount = computed(() => suggestJobs().length)
+// Y a-t-il un filtre restreignant le dispatch ? (lasso, chips de date ou de type)
+const suggestFiltered = computed(() => !!(selectedNames.value.length || assignDateFilter.value.length || assignTypeFilter.value.length))
+// Libellé du périmètre : « sélectionnés » (lasso) · « des jours/types cochés » (chips) — décrit ce qui limite le jeu de jobs.
+const suggestScope = computed(() => {
+ if (selectedNames.value.length) return 'sélectionnés'
+ const parts = []
+ if (assignDateFilter.value.length) parts.push('jours')
+ if (assignTypeFilter.value.length) parts.push('types')
+ return parts.length ? ('des ' + parts.join(' + ') + ' cochés') : 'du pool'
+})
const windowDayLabel = iso => iso === todayISO() ? "Aujourd'hui" : (iso === tomorrowISO() ? 'Demain' : (fmtDueLabel(iso) || iso))
const suggestWindowLabel = computed(() => {
const w = suggestWindow.value; if (!w.length) return '—'