Checkpoint: Correction de l'affichage vide des apprenants dans la gestion des attestations après le regroupement par séquence. Le problème venait de la référence à un champ premiereDate inexistant. Solution: utiliser l'ID de séquence pour le tri et le regroupement.
This commit is contained in:
@@ -459,24 +459,22 @@ export default function AdminGestionAttestations() {
|
|||||||
{/* Regrouper les apprenants par séquence */}
|
{/* Regrouper les apprenants par séquence */}
|
||||||
{Object.entries(
|
{Object.entries(
|
||||||
apprenants.reduce((acc: Record<string, typeof apprenants>, item) => {
|
apprenants.reduce((acc: Record<string, typeof apprenants>, item) => {
|
||||||
const sequenceKey = `${item.sequence.id}-${item.sequence.nom}-${item.sequence.premiereDate || ''}`;
|
const sequenceId = item.sequence.id.toString();
|
||||||
if (!acc[sequenceKey]) acc[sequenceKey] = [];
|
if (!acc[sequenceId]) acc[sequenceId] = [];
|
||||||
acc[sequenceKey].push(item);
|
acc[sequenceId].push(item);
|
||||||
return acc;
|
return acc;
|
||||||
}, {})
|
}, {})
|
||||||
)
|
)
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
// Extraire la première date de la clé de séquence
|
// Trier par ID de séquence (ordre de création)
|
||||||
const dateA = a[0].split('-').pop() || '';
|
const idA = parseInt(a[0]);
|
||||||
const dateB = b[0].split('-').pop() || '';
|
const idB = parseInt(b[0]);
|
||||||
return dateA.localeCompare(dateB);
|
return idA - idB;
|
||||||
})
|
})
|
||||||
.map(([sequenceKey, sequenceApprenants]) => {
|
.map(([sequenceId, sequenceApprenants]) => {
|
||||||
// Extraire le nom de la séquence (sans l'ID ni la date)
|
const sequenceName = sequenceApprenants[0]?.sequence?.nom || 'Séquence inconnue';
|
||||||
const parts = sequenceKey.split('-');
|
|
||||||
const sequenceName = parts.slice(1, -1).join('-');
|
|
||||||
return (
|
return (
|
||||||
<div key={sequenceKey} className="border rounded-lg overflow-hidden">
|
<div key={sequenceId} className="border rounded-lg overflow-hidden">
|
||||||
{/* En-tête de séquence */}
|
{/* En-tête de séquence */}
|
||||||
<div className="bg-gradient-to-r from-blue-50 to-indigo-50 border-b px-4 py-3">
|
<div className="bg-gradient-to-r from-blue-50 to-indigo-50 border-b px-4 py-3">
|
||||||
<div className="flex items-center justify-between">
|
<div className="flex items-center justify-between">
|
||||||
|
|||||||
@@ -174,7 +174,6 @@ export async function getApprenantsWithAttestationStatus(formationId: number) {
|
|||||||
sequence: {
|
sequence: {
|
||||||
id: sequences.id,
|
id: sequences.id,
|
||||||
nom: sequences.nom,
|
nom: sequences.nom,
|
||||||
premiereDate: sequences.premiereDate,
|
|
||||||
},
|
},
|
||||||
attestation: {
|
attestation: {
|
||||||
id: attestations.id,
|
id: attestations.id,
|
||||||
|
|||||||
6
todo.md
6
todo.md
@@ -1278,4 +1278,10 @@
|
|||||||
|
|
||||||
- [x] Modifier le backend pour inclure la première date de chaque séquence
|
- [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] 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
|
- [ ] Déployer sur le VPS
|
||||||
|
|||||||
Reference in New Issue
Block a user