Checkpoint: Retrait des compteurs dynamiques de taux de présence et ajout d'une vérification backend empêchant l'émargement avant la date de formation concernée
This commit is contained in:
@@ -316,17 +316,6 @@ export default function FormateurEmargement() {
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Statistiques Matin */}
|
||||
<div className="flex items-center justify-between bg-blue-50 dark:bg-blue-950/20 px-3 py-2 rounded">
|
||||
<span className="text-xs font-medium">🌅 Matin</span>
|
||||
<Badge variant="secondary" className="text-xs">
|
||||
{(() => {
|
||||
const stats = getPresenceStats(date.id, "matin");
|
||||
return `${stats.present}/${stats.total} présents (${stats.percentage}%)`;
|
||||
})()}
|
||||
</Badge>
|
||||
</div>
|
||||
|
||||
{/* Matin */}
|
||||
<div className="flex items-center justify-between pl-4">
|
||||
<div className="flex items-center gap-2 flex-1">
|
||||
@@ -387,17 +376,6 @@ export default function FormateurEmargement() {
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Statistiques Après-midi */}
|
||||
<div className="flex items-center justify-between bg-orange-50 dark:bg-orange-950/20 px-3 py-2 rounded mt-2">
|
||||
<span className="text-xs font-medium">🌆 Après-midi</span>
|
||||
<Badge variant="secondary" className="text-xs">
|
||||
{(() => {
|
||||
const stats = getPresenceStats(date.id, "apres_midi");
|
||||
return `${stats.present}/${stats.total} présents (${stats.percentage}%)`;
|
||||
})()}
|
||||
</Badge>
|
||||
</div>
|
||||
|
||||
{/* Après-midi */}
|
||||
<div className="flex items-center justify-between pl-4">
|
||||
<div className="flex items-center gap-2 flex-1">
|
||||
|
||||
@@ -18,6 +18,29 @@ export async function validerPresence(params: {
|
||||
const db = await getDb();
|
||||
if (!db) throw new Error("Database not available");
|
||||
|
||||
// Récupérer la date de formation
|
||||
const dateFormation = await db
|
||||
.select()
|
||||
.from(datesFormation)
|
||||
.where(eq(datesFormation.id, params.dateFormationId))
|
||||
.limit(1);
|
||||
|
||||
if (dateFormation.length === 0) {
|
||||
throw new Error("Date de formation introuvable");
|
||||
}
|
||||
|
||||
// Vérifier que la date actuelle est le jour de la formation ou après
|
||||
const now = new Date();
|
||||
const dateDebut = new Date(dateFormation[0].dateDebut);
|
||||
|
||||
// Réinitialiser les heures pour comparer uniquement les dates
|
||||
now.setHours(0, 0, 0, 0);
|
||||
dateDebut.setHours(0, 0, 0, 0);
|
||||
|
||||
if (now < dateDebut) {
|
||||
throw new Error("Vous ne pouvez pas émarger avant la date de formation");
|
||||
}
|
||||
|
||||
// Vérifier si la présence existe déjà pour cette période
|
||||
const presenceExistante = await db
|
||||
.select()
|
||||
|
||||
4
todo.md
4
todo.md
@@ -1496,3 +1496,7 @@
|
||||
|
||||
- [x] Ajouter un indicateur visuel de rafraîchissement avec badge "Mis à jour il y a X secondes"
|
||||
- [x] Ajouter des statistiques en temps réel du taux de présence par période
|
||||
|
||||
- [x] Retirer les compteurs dynamiques de taux de présence de la page d'émargement numérique
|
||||
|
||||
- [x] Empêcher l'émargement avant la date de formation concernée (vérification backend)
|
||||
|
||||
Reference in New Issue
Block a user