From f51e027a5c087dced7f27ceaf6198424af0af431 Mon Sep 17 00:00:00 2001 From: Manus Date: Sun, 25 Jan 2026 09:03:13 -0500 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Correction=20de=20l'affichage=20v?= =?UTF-8?q?ide=20des=20apprenants=20dans=20la=20gestion=20des=20attestatio?= =?UTF-8?q?ns=20apr=C3=A8s=20le=20regroupement=20par=20s=C3=A9quence.=20Le?= =?UTF-8?q?=20probl=C3=A8me=20venait=20de=20la=20r=C3=A9f=C3=A9rence=20?= =?UTF-8?q?=C3=A0=20un=20champ=20premiereDate=20inexistant.=20Solution:=20?= =?UTF-8?q?utiliser=20l'ID=20de=20s=C3=A9quence=20pour=20le=20tri=20et=20l?= =?UTF-8?q?e=20regroupement.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/pages/AdminGestionAttestations.tsx | 22 +++++++++---------- server/gestionAttestationsDb.ts | 1 - todo.md | 6 +++++ 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/client/src/pages/AdminGestionAttestations.tsx b/client/src/pages/AdminGestionAttestations.tsx index 8446bf3..c3b5bd6 100644 --- a/client/src/pages/AdminGestionAttestations.tsx +++ b/client/src/pages/AdminGestionAttestations.tsx @@ -459,24 +459,22 @@ export default function AdminGestionAttestations() { {/* Regrouper les apprenants par séquence */} {Object.entries( apprenants.reduce((acc: Record, item) => { - const sequenceKey = `${item.sequence.id}-${item.sequence.nom}-${item.sequence.premiereDate || ''}`; - if (!acc[sequenceKey]) acc[sequenceKey] = []; - acc[sequenceKey].push(item); + const sequenceId = item.sequence.id.toString(); + if (!acc[sequenceId]) acc[sequenceId] = []; + acc[sequenceId].push(item); return acc; }, {}) ) .sort((a, b) => { - // Extraire la première date de la clé de séquence - const dateA = a[0].split('-').pop() || ''; - const dateB = b[0].split('-').pop() || ''; - return dateA.localeCompare(dateB); + // Trier par ID de séquence (ordre de création) + const idA = parseInt(a[0]); + const idB = parseInt(b[0]); + return idA - idB; }) - .map(([sequenceKey, sequenceApprenants]) => { - // Extraire le nom de la séquence (sans l'ID ni la date) - const parts = sequenceKey.split('-'); - const sequenceName = parts.slice(1, -1).join('-'); + .map(([sequenceId, sequenceApprenants]) => { + const sequenceName = sequenceApprenants[0]?.sequence?.nom || 'Séquence inconnue'; return ( -
+
{/* En-tête de séquence */}
diff --git a/server/gestionAttestationsDb.ts b/server/gestionAttestationsDb.ts index 19f1f64..22c2a8a 100644 --- a/server/gestionAttestationsDb.ts +++ b/server/gestionAttestationsDb.ts @@ -174,7 +174,6 @@ export async function getApprenantsWithAttestationStatus(formationId: number) { sequence: { id: sequences.id, nom: sequences.nom, - premiereDate: sequences.premiereDate, }, attestation: { id: attestations.id, diff --git a/todo.md b/todo.md index 1464998..96f9dd1 100644 --- a/todo.md +++ b/todo.md @@ -1278,4 +1278,10 @@ - [x] Modifier le backend pour inclure la première date de chaque séquence - [x] Adapter le frontend pour trier les séquences par date +- [x] Déployer sur le VPS + +## Corriger l'affichage vide de la liste des apprenants après le tri chronologique + +- [x] Identifier la cause du problème (champ premiereDate inexistant) +- [x] Corriger le code de regroupement/tri (utiliser l'ID de séquence) - [ ] Déployer sur le VPS