✅ **1. Indicateur visuel de remplissage** - Composant CapacityProgressBar avec barre de progression colorée - Affichage "X / Y" avec pourcentage - Couleurs automatiques : vert (<70%), orange (70-90%), rouge (>90%) - Intégré dans la colonne capacité du tableau des séquences ✅ **2. Vue calendrier mensuel** - Nouvelle page AdminCalendrier accessible depuis le menu - Calendrier mensuel avec navigation (mois précédent/suivant, aujourd'hui) - Affichage des séquences sur leurs dates respectives - Dialog de détails au clic sur une séquence - Vue complète avec toutes les informations (lieu, formateur, capacité, dates) ✅ **3. Système de rappels automatiques personnalisables** - Tables rappels et rappelsEnvoyes créées - Procédures tRPC complètes (list, create, update, delete) - Page AdminRappels avec interface de gestion - Configuration de rappels multiples (J-15, J-7, J-1, etc.) - Templates d'emails personnalisables avec variables dynamiques - Activation/désactivation des rappels - Infrastructure prête pour l'envoi automatique (nécessite service de planification externe) Ces améliorations facilitent grandement la planification et le suivi des formations.
58 lines
2.3 KiB
TypeScript
58 lines
2.3 KiB
TypeScript
import { Toaster } from "@/components/ui/sonner";
|
|
import { TooltipProvider } from "@/components/ui/tooltip";
|
|
import NotFound from "@/pages/NotFound";
|
|
import { Route, Switch } from "wouter";
|
|
import ErrorBoundary from "./components/ErrorBoundary";
|
|
import { ThemeProvider } from "./contexts/ThemeContext";
|
|
import Home from "./pages/Home";
|
|
import AdminRapportPublicCible from "./pages/AdminRapportPublicCible";
|
|
import Admin from "./pages/Admin";
|
|
import AdminFormations from "./pages/AdminFormations";
|
|
import AdminSequences from "./pages/AdminSequences";
|
|
import AdminCalendrier from "./pages/AdminCalendrier";
|
|
import AdminApprenants from "./pages/AdminApprenants";
|
|
import AdminSequenceInscrits from "./pages/AdminSequenceInscrits";
|
|
import AdminUsers from "./pages/AdminUsers";
|
|
import AdminEmailTemplates from "./pages/AdminEmailTemplates";
|
|
import AdminEmailConfig from "./pages/AdminEmailConfig";
|
|
import AdminRappels from "./pages/AdminRappels";
|
|
import Inscription from "./pages/Inscription";
|
|
|
|
function Router() {
|
|
return (
|
|
<Switch>
|
|
<Route path={"/"} component={Home} />
|
|
<Route path={"/admin/rapport-public-cible"} component={AdminRapportPublicCible} />
|
|
<Route path={"/inscription/:lien"} component={Inscription} />
|
|
<Route path={"/admin"} component={Admin} />
|
|
<Route path={"/admin/formations"} component={AdminFormations} />
|
|
<Route path={"/admin/sequences"} component={AdminSequences} />
|
|
<Route path={"/admin/calendrier"} component={AdminCalendrier} />
|
|
<Route path={"/admin/apprenants"} component={AdminApprenants} />
|
|
<Route path={"/admin/sequences/:id/inscrits"} component={AdminSequenceInscrits} />
|
|
<Route path={"/admin/users"} component={AdminUsers} />
|
|
<Route path={"/admin/email-templates"} component={AdminEmailTemplates} />
|
|
<Route path={"/admin/email-config"} component={AdminEmailConfig} />
|
|
<Route path={"/admin/rappels"} component={AdminRappels} />
|
|
<Route path={"/404"} component={NotFound} />
|
|
{/* Final fallback route */}
|
|
<Route component={NotFound} />
|
|
</Switch>
|
|
);
|
|
}
|
|
|
|
function App() {
|
|
return (
|
|
<ErrorBoundary>
|
|
<ThemeProvider defaultTheme="light">
|
|
<TooltipProvider>
|
|
<Toaster />
|
|
<Router />
|
|
</TooltipProvider>
|
|
</ThemeProvider>
|
|
</ErrorBoundary>
|
|
);
|
|
}
|
|
|
|
export default App;
|