planif: retirer les jobs faits/annulés datés dans le FUTUR (artefacts legacy) de l'occupation

occupancyByTechDay incluait Completed/Cancelled (trace du tech). Un ticket F fermé mais à due_date
FUTURE → le pont crée un Dispatch Job 'Completed' daté au futur (ex. LEG-250851, Completed, 2026-07-08)
→ il apparaissait comme travail à venir (surtout visible sur mobile, où le desktop l'estompe).
Fix : on écarte les jobs faits/annulés dont scheduled_date > aujourd'hui (Est) ; la trace passée/du jour reste.
Vérifié : 250851 absent de l'occupation après fix.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
louispaulb 2026-07-07 12:04:15 -04:00
parent 8b0241673d
commit 8ee4c834f8

View File

@ -1052,6 +1052,7 @@ async function statsByDay (start, days) {
// → la grille Planification affiche la fenêtre du shift ET les blocs pris (donc les trous offrables).
async function occupancyByTechDay (start, days) {
const dates = rangeDates(start, days)
const TODAY_ET = new Date().toLocaleDateString('en-CA', { timeZone: 'America/Toronto' }) // aujourd'hui (Est)
const jobs = await erp.list('Dispatch Job', {
// Inclut Completed/Cancelled : la grille montre AUSSI le travail fait/annulé de la journée (trace du tech),
// pas seulement le planifiable. (Filtrés par assigned_tech ci-dessous : les annulés « non assigné » n'apparaissent pas.)
@ -1069,6 +1070,9 @@ async function occupancyByTechDay (start, days) {
const dur = estMin ? estMin / 60 : (Number(j.duration_h) || 0) // estimation additive (sinon duration_h)
const done = j.status === 'Completed'
const cancelled = j.status === 'Cancelled'
// Job FAIT/ANNULÉ daté dans le FUTUR = artefact (ticket F fermé mais due_date future via le pont legacy) → JAMAIS du travail à venir.
// On le retire du tableau (les 2 plateformes) ; la trace du travail passé/du jour (fait/annulé) reste affichée.
if ((done || cancelled) && j.scheduled_date && j.scheduled_date > TODAY_ET) continue
if (!cancelled) o.h += dur // les annulés n'ont pas consommé de temps → hors capacité
const skill = skillForJob(j) || deptToSkill(j.legacy_dept || j.job_type || j.subject) // compétence → couleur du bloc (palette skills)
const s = j.start_time ? timeToH(j.start_time) : null