fix(dispatch): lever le cap 50 sur les techniciens (occupation + charge)
techOccupancy et getTechsWithLoad récupéraient les Dispatch Technician avec limit_page_length=50 alors que l'effectif est de 56. Les techs au-delà du 50e (ordre ERPNext) étaient donc ABSENTS de l'occupation → dans le calendrier mois de leur horaire (TechScheduleDialog), c.hasShift est piloté UNIQUEMENT par l'occupation (shiftMap), donc leurs quarts créés en Semaine/Jour n'y apparaissaient jamais (tout gris) — ex. Philippe Bourdon & co., alors que Simon Clot-Gagnon (dans les 50) s'affichait bien. Même cap = mêmes techs invisibles au dispatch/ranking (getTechsWithLoad). Cap porté à 500 (comme les requêtes jobs/disponibilités voisines). Confirmé live : roster/technicians = 56 (Philippe présent) vs dispatch/occupancy = 45 sans Philippe. Les Shift Assignment existaient (fetchés limit 2000) mais ne nourrissent que le menu de cellule, pas la barre d'occupation. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
c7c9f81364
commit
e0e1da1c01
|
|
@ -52,7 +52,7 @@ function distKm (a, b) {
|
|||
|
||||
async function getTechsWithLoad (dateStr) {
|
||||
const [techRes, jobRes] = await Promise.all([
|
||||
erpFetch(`/api/resource/Dispatch Technician?fields=${encodeURIComponent(JSON.stringify(['name', 'technician_id', 'full_name', 'status', 'longitude', 'latitude', 'traccar_device_id', 'phone']))}&limit_page_length=50`),
|
||||
erpFetch(`/api/resource/Dispatch Technician?fields=${encodeURIComponent(JSON.stringify(['name', 'technician_id', 'full_name', 'status', 'longitude', 'latitude', 'traccar_device_id', 'phone']))}&limit_page_length=500`), // 500 : couvre tout l'effectif (>50) — sinon les techs au-delà du 50e sont invisibles au dispatch/ranking
|
||||
erpFetch(`/api/resource/Dispatch Job?filters=${encodeURIComponent(JSON.stringify({ status: ['in', ['open', 'assigned']], scheduled_date: dateStr }))}&fields=${encodeURIComponent(JSON.stringify(['name', 'assigned_tech', 'duration_h', 'longitude', 'latitude', 'status', 'route_order']))}&limit_page_length=200`),
|
||||
])
|
||||
if (techRes.status !== 200) throw new Error('Failed to fetch technicians')
|
||||
|
|
@ -323,7 +323,7 @@ async function techOccupancy ({ after_date, days = SLOT_HORIZON_DAYS, skill = ''
|
|||
const [techRes, jobRes, tplRes, shiftRes, availRes] = await Promise.all([
|
||||
erpFetch(`/api/resource/Dispatch Technician?fields=${encodeURIComponent(JSON.stringify([
|
||||
'name', 'technician_id', 'full_name', 'status', 'absence_from', 'absence_until', 'skills', '_user_tags',
|
||||
]))}&limit_page_length=50`),
|
||||
]))}&limit_page_length=500`), // 500 : couvre tout l'effectif (56+ techs) — le cap 50 laissait les techs au-delà du 50e SANS occupation → calendrier mois de leur horaire tout gris (bug Philippe Bourdon & co.)
|
||||
erpFetch(`/api/resource/Dispatch Job?filters=${encodeURIComponent(JSON.stringify([
|
||||
['status', 'in', ['open', 'assigned']],
|
||||
['scheduled_date', '>=', dates[0]],
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user