From a0049436cc83f46a0e58201fe49a1730fbdcf7e7 Mon Sep 17 00:00:00 2001 From: Manus Sandbox Date: Sun, 23 Nov 2025 17:28:12 -0500 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Ajout=20de=20badges=20Actif/Inact?= =?UTF-8?q?if=20dans=20la=20liste=20des=20apprenants=20et=20cr=C3=A9ation?= =?UTF-8?q?=20d'une=20page=20d=C3=A9di=C3=A9e=20aux=20=C3=A9tablissements?= =?UTF-8?q?=20avec=20statistiques=20de=20participation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/App.tsx | 2 + client/src/components/DashboardLayout.tsx | 3 +- client/src/pages/AdminApprenants.tsx | 10 ++ client/src/pages/AdminEtablissements.tsx | 123 ++++++++++++++++++++++ server/db.ts | 19 +++- server/etablissementsDb.ts | 110 +++++++++++++++++++ server/routers.ts | 15 +++ todo.md | 7 ++ 8 files changed, 287 insertions(+), 2 deletions(-) create mode 100644 client/src/pages/AdminEtablissements.tsx create mode 100644 server/etablissementsDb.ts diff --git a/client/src/App.tsx b/client/src/App.tsx index 369439c..7819e29 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -19,6 +19,7 @@ import AdminEmailConfig from "./pages/AdminEmailConfig"; import AdminCalendrier from "./pages/AdminCalendrier"; import AdminRappels from "./pages/AdminRappels"; import AdminAnalytics from "./pages/AdminAnalytics"; +import AdminEtablissements from "./pages/AdminEtablissements"; import Inscription from "./pages/Inscription"; import Login from "./pages/Login"; @@ -42,6 +43,7 @@ function Router() { + {/* Final fallback route */} diff --git a/client/src/components/DashboardLayout.tsx b/client/src/components/DashboardLayout.tsx index 59e91ae..96cb844 100644 --- a/client/src/components/DashboardLayout.tsx +++ b/client/src/components/DashboardLayout.tsx @@ -21,7 +21,7 @@ import { } from "@/components/ui/sidebar"; import { APP_LOGO, APP_TITLE, getLoginUrl } from "@/const"; import { useIsMobile } from "@/hooks/useMobile"; -import { LayoutDashboard, LogOut, PanelLeft, Users, GraduationCap, Calendar, CalendarDays, Bell, BarChart3, UserCog, Mail, Settings, TrendingUp } from "lucide-react"; +import { LayoutDashboard, LogOut, PanelLeft, Users, GraduationCap, Calendar, CalendarDays, Bell, BarChart3, UserCog, Mail, Settings, TrendingUp, Building2 } from "lucide-react"; import { CSSProperties, useEffect, useRef, useState } from "react"; import { useLocation } from "wouter"; import { DashboardLayoutSkeleton } from './DashboardLayoutSkeleton'; @@ -34,6 +34,7 @@ const menuItems = [ { icon: CalendarDays, label: "Calendrier", path: "/admin/calendrier" }, { icon: Bell, label: "Rappels", path: "/admin/rappels" }, { icon: Users, label: "Apprenants", path: "/admin/apprenants" }, + { icon: Building2, label: "Établissements", path: "/admin/etablissements" }, { icon: UserCog, label: "Utilisateurs", path: "/admin/users" }, { icon: Mail, label: "Templates d'emails", path: "/admin/email-templates" }, { icon: Settings, label: "Configuration SMTP", path: "/admin/email-config" }, diff --git a/client/src/pages/AdminApprenants.tsx b/client/src/pages/AdminApprenants.tsx index 32461d4..e93d15b 100644 --- a/client/src/pages/AdminApprenants.tsx +++ b/client/src/pages/AdminApprenants.tsx @@ -284,6 +284,7 @@ export default function AdminApprenants() { Email Code établissement Fonction + Statut Actions @@ -304,6 +305,15 @@ export default function AdminApprenants() { apprenant.fonction === "chef_service" ? "Chef de service" : "Autre"} + + 0 + ? "bg-green-100 text-green-800" + : "bg-gray-100 text-gray-800" + }`}> + {apprenant.inscriptions && apprenant.inscriptions.length > 0 ? "Actif" : "Inactif"} + +