Files
geo/app/docs/STATISTICS-DUAL-FILTERS.md

3.8 KiB

🎯 Filtres Secteur et Membre Séparés dans les Statistiques

📋 Changements effectués

La page de statistiques a été modifiée pour avoir deux comboboxes de filtrage distinctes au lieu d'un système avec sélection du type de filtre puis du filtre lui-même.

Améliorations apportées

1. 🎨 Interface simplifiée

  • Avant : Une combobox "Filtrer par" (Secteur/Membre) puis une combobox dynamique
  • Après : Deux comboboxes distinctes toujours visibles :
    • Une pour les Secteurs
    • Une pour les Membres

2. 📊 Filtrage fonctionnel pour les membres

  • Le filtre par membre fonctionne correctement
  • Les graphiques se mettent à jour quand on sélectionne un membre
  • L'option "Tous" affiche toutes les données

3. 🔧 Code nettoyé

  • Suppression de _selectedFilterType et _filterTypes
  • Remplacement de _selectedUser par _selectedMember (plus clair)
  • Deux méthodes de dropdown distinctes : _buildSectorDropdown() et _buildMemberDropdown()

📂 Modifications apportées

Variables d'état

// Avant
String _selectedFilterType = 'Secteur';
String _selectedSector = 'Tous';
String _selectedUser = 'Tous';

// Après
String _selectedSector = 'Tous';
String _selectedMember = 'Tous';

Layout des filtres

// Desktop : 2 lignes
Row 1: [Période] [Nombre de jours]
Row 2: [Secteur] [Membre]

// Mobile : Tous en colonne
[Période]
[Nombre de jours]
[Secteur]
[Membre]

Utilisation dans les graphiques

ActivityChart(
  userId: _selectedMember != 'Tous'
      ? _getMemberIdFromName(_selectedMember)
      : null,
  // Le filtre par secteur n'est pas encore supporté
)

⚠️ Limitation actuelle : Filtre par secteur

Le filtre par secteur n'est pas encore fonctionnel car les widgets de graphiques (ActivityChart et PassageSummaryCard) ne supportent pas le paramètre sectorId.

Pourquoi ?

Les graphiques actuels sont conçus pour filtrer uniquement par userId. Pour ajouter le support du secteur, il faudrait :

  1. Modifier les widgets de graphiques pour accepter un paramètre sectorId
  2. Adapter les requêtes de données pour joindre les tables passages et secteurs
  3. Implémenter la logique de filtrage basée sur l'appartenance du passage au secteur

Solution temporaire

  • La combobox Secteur est visible mais inactive sur les graphiques
  • Seul le filtre par membre est fonctionnel
  • J'ai ajouté des commentaires dans le code pour indiquer cette limitation

Pour implémenter le filtre par secteur

Il faudrait modifier ActivityChart et PassageSummaryCard ainsi :

// Dans ActivityChart
class ActivityChart extends StatefulWidget {
  final int? userId;
  final int? sectorId; // Nouveau paramètre
  // ...
}

// Dans la logique de filtrage
List<PassageModel> getFilteredPassages() {
  var passages = allPassages;
  
  if (widget.userId != null) {
    passages = passages.where((p) => p.userId == widget.userId).toList();
  }
  
  if (widget.sectorId != null) {
    passages = passages.where((p) => p.sectorId == widget.sectorId).toList();
  }
  
  return passages;
}

🎯 Résultat final

  • Interface plus claire : Les deux filtres sont toujours visibles
  • Filtre par membre fonctionnel : Les graphiques se mettent à jour correctement
  • Données réelles : Les comboboxes affichent les vrais secteurs et membres
  • ⚠️ Filtre par secteur en attente : Nécessite des modifications plus profondes

📈 Utilisation

  1. Sélectionner un membre : Le graphique affiche uniquement les données de ce membre
  2. Sélectionner "Tous" : Affiche toutes les données
  3. Changer la période : Modifie l'échelle temporelle
  4. Changer le nombre de jours : Ajuste la plage de données affichées

Le filtre par secteur sera fonctionnel dans une prochaine version après modification des widgets de graphiques.