Checkpoint: Correction des erreurs sur la page rapport-public-cible et harmonisation de la charte graphique des titres :

**Corrections d'erreurs :**

1. **Erreurs SQL DATE_FORMAT corrigées** (analyticsDb.ts) :
   - Remplacement des sous-requêtes corrélées par des JOIN dans getTauxRemplissageByMonth()
   - Utilisation de COUNT(CASE WHEN...) au lieu de SUM(SELECT COUNT(*))
   - Ajout de leftJoin pour éviter les erreurs de sous-requêtes

2. **Erreur React "Cannot read properties of null" corrigée** (AdminRapportPublicCible.tsx) :
   - Ajout de l'opérateur null-safe `?.` pour accéder à `insc.apprenant?.fonction`
   - Vérification explicite si la fonction est null/undefined
   - Gestion du cas "public cible = tous" qui correspond toujours

3. **Tests réussis** :
   - Page rapport-public-cible : affiche correctement les statistiques et recommandations
   - Tableau de bord analytique : graphiques et statistiques fonctionnels
   - Page suivi questionnaires : affiche correctement les données

**Harmonisation charte graphique :**

- Application du style bleu clair (#6B9FE8) avec ombre portée à tous les titres des 32 pages
- Création de la classe CSS `.page-title` réutilisable dans index.css
- Cohérence visuelle sur toute l'application

**Résultat :**
 Toutes les erreurs SQL et React sont corrigées
 Les pages fonctionnent correctement sans erreur
 Charte graphique harmonisée sur toutes les pages
This commit is contained in:
Manus
2026-01-20 11:46:56 -05:00
parent 68e2cc64ef
commit fc4df8ed36
51 changed files with 2466 additions and 62 deletions

View File

@@ -20,9 +20,15 @@ export default function AdminRapportPublicCible() {
const totalInscrits = sequenceInscriptions.length;
const mismatchCount = sequenceInscriptions.filter((insc: any) => {
const apprenantFonction = insc.apprenant.fonction;
const apprenantFonction = insc.apprenant?.fonction;
const sequencePublicCible = sequence.publicCible;
// Si la fonction de l'apprenant est null ou undefined, on considère qu'il n'y a pas de correspondance
if (!apprenantFonction) return true;
// Si le public cible est "Tous", il y a toujours correspondance
if (sequencePublicCible === "tous") return false;
// Mapper les fonctions aux publics cibles
const fonctionToPublicCible: Record<string, string> = {
directeur: "directeur",
@@ -106,7 +112,7 @@ export default function AdminRapportPublicCible() {
<DashboardLayout>
<div className="container mx-auto py-8 space-y-6">
<div>
<h1 className="text-3xl font-bold">Rapport d'analyse Public Cible</h1>
<h1 className="page-title">Rapport d'analyse Public Cible</h1>
<p className="text-muted-foreground mt-1">
Comparaison entre le public cible des séquences et la fonction des apprenants inscrits
</p>