Checkpoint: Correction du bug d'émargement formateur bloqué sur la saisie d'email

- Ajout de la détection automatique formateur/apprenant dans EmargementScan.tsx
- Nouvelle procédure tRPC getSequenceByToken pour récupérer les infos de séquence
- Interface adaptée selon le type d'utilisateur (apprenant ou formateur)
- Déploiement réussi sur le VPS de production

Le système détecte maintenant automatiquement si l'email correspond à un apprenant ou un formateur, et affiche l'interface appropriée pour chaque cas.
This commit is contained in:
Manus
2026-02-02 14:18:46 -05:00
parent e8410230a9
commit f9983adada
81 changed files with 3734 additions and 27745 deletions

View File

@@ -1,60 +0,0 @@
/**
* Utilitaires pour la gestion des dates
* Gère correctement les conversions entre heure locale et UTC
*/
/**
* Convertit une chaîne datetime-local (format: "2025-01-15T14:30") en Date
* en construisant la date avec une chaîne ISO qui force l'heure locale
* Préserve l'heure locale sans conversion UTC
*/
export function parseLocalDateTime(dateTimeString: string): Date {
if (!dateTimeString) {
throw new Error('Date string is required');
}
// Le format datetime-local est "YYYY-MM-DDTHH:mm"
const match = dateTimeString.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})/);
if (!match) {
throw new Error(`Invalid date format: ${dateTimeString}. Expected YYYY-MM-DDTHH:mm`);
}
const [, year, month, day, hours, minutes] = match;
// Créer un objet Date en utilisant le constructeur avec composants
// MySQL stocke en UTC, donc on doit compenser le décalage horaire
const date = new Date(
parseInt(year),
parseInt(month) - 1,
parseInt(day),
parseInt(hours),
parseInt(minutes),
0
);
// Compenser le décalage UTC en ajoutant le décalage du fuseau horaire
// Cela garantit que l'heure stockée en UTC correspond à l'heure locale saisie
const offset = date.getTimezoneOffset(); // en minutes (négatif pour Europe/Paris)
date.setMinutes(date.getMinutes() - offset);
if (isNaN(date.getTime())) {
throw new Error(`Invalid date string: ${dateTimeString}`);
}
return date;
}
/**
* Formate une Date en chaîne datetime-local pour les inputs HTML
* Format: "YYYY-MM-DDTHH:mm"
*/
export function formatToLocalDateTime(date: Date): string {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day}T${hours}:${minutes}`;
}