Mise en place suppression membre

This commit is contained in:
d6soft
2025-06-12 16:39:44 +02:00
parent ace38d4025
commit 25c9d5874c
19 changed files with 63219 additions and 61871 deletions

View File

@@ -39,7 +39,7 @@ GEOSECTOR est une solution complète développée en Flutter qui révolutionne l
### 🎯 Fonctionnalités métier
#### Pour les **Distributeurs** (Rôle 1)
#### Pour les **Membres** (Rôle 1)
- ✅ Visualisation des secteurs assignés sur carte interactive
- ✅ Suivi GPS en temps réel des tournées
@@ -368,7 +368,7 @@ Timeout : "Délai d'attente dépassé"
### Hiérarchie des permissions
Distributeur (Rôle 1) : Consultation et distribution dans ses secteurs
Membre (Rôle 1) : Consultation et distribution dans ses secteurs
Admin Amicale (Rôle 2) : Gestion complète de son amicale et ses membres
Super Admin (Rôle 3+) : Administration globale multi-amicales
@@ -387,6 +387,237 @@ Checkbox statut actif : Contrôle d'accès aux comptes
Édition contextuelle : Champs modifiables selon les permissions
Actions conditionnelles : Boutons disponibles selon le niveau d'autorisation
## 👥 Gestion des membres (Admin Amicale)
### 🎯 Vue d'ensemble
La gestion des membres est une fonctionnalité clé pour les **Admins Amicale** (Rôle 2) qui permet une administration complète des équipes au sein de leur amicale. Cette interface centralise toutes les opérations liées aux membres avec une approche sécurisée et intuitive.
### 📱 Interface AdminAmicalePage
L'interface principale `admin_amicale_page.dart` offre une vue d'ensemble complète :
- **Informations de l'amicale** : Affichage des détails de l'amicale courante
- **Liste des membres** : Tableau interactif avec actions contextuelles
- **Ajout de membres** : Bouton d'action pour créer de nouveaux comptes
- **Opération courante** : Indication de l'opération active en cours
### ✨ Fonctionnalités principales
#### 🆕 Création de nouveaux membres
```dart
// Workflow de création
1. Clic sur "Ajouter un membre"
2. Ouverture du UserFormDialog
3. Formulaire vierge avec valeurs par défaut
4. Sélection du rôle (Membre/Administrateur)
5. Configuration du statut actif
6. Validation et création via API
7. Attribution automatique à l'amicale courante
```
**Champs obligatoires :**
- Email (unique dans le système)
- Au moins un nom (nom de famille OU nom de tournée)
- Rôle dans l'amicale
**Champs optionnels :**
- Nom d'utilisateur (éditable pour les admins)
- Prénom, téléphones, dates
- Nom de tournée (pour identification terrain)
#### ✏️ Modification des membres existants
```dart
// Actions disponibles
- Clic sur une ligne Ouverture du formulaire d'édition
- Modification de tous les champs personnels
- Changement de rôle (Membre Administrateur)
- Activation/Désactivation du compte
- Gestion du nom de tournée
```
**Workflow de modification :**
1. Sélection du membre dans le tableau
2. Ouverture automatique du `UserFormDialog`
3. Formulaire pré-rempli avec données existantes
4. Modification des champs souhaités
5. Validation et mise à jour via API
6. Synchronisation automatique avec Hive
#### 🗑️ Suppression intelligente des membres
La suppression des membres intègre une **logique métier avancée** pour préserver l'intégrité des données :
##### 🔍 Vérification des passages
```dart
// Algorithme de vérification
1. Récupération de l'opération courante
2. Analyse des passages du membre pour cette opération
3. Classification : passages réalisés vs passages à finaliser
4. Comptage total des passages actifs
```
##### 📊 Scénarios de suppression
**Cas 1 : Aucun passage (suppression simple)**
```http
DELETE /users/{id}
```
- Confirmation simple
- Suppression directe
- Aucun transfert nécessaire
**Cas 2 : Passages existants (suppression avec transfert)**
```http
DELETE /users/{id}?transfer_to={destinataire}&operation_id={operation}
```
- Dialog d'avertissement avec détails
- Sélection obligatoire d'un membre destinataire
- Transfert automatique de tous les passages
- Préservation de l'historique
**Cas 3 : Alternative recommandée (désactivation)**
```dart
// Mise à jour du statut
membre.copyWith(isActive: false)
```
- Préservation complète des données
- Blocage de la connexion
- Maintien de l'historique
- Réactivation possible ultérieurement
### 🔐 Sécurité et permissions
#### Contrôles d'accès
- **Isolation par amicale** : Admins limités à leur amicale
- **Vérification des rôles** : Validation côté client et serveur
- **Opération courante** : Filtrage par contexte d'opération
- **Validation API** : Contrôles d'unicité et cohérence
#### Gestion des erreurs
```mermaid
graph TD
A[Action utilisateur] --> B[Validation locale]
B --> C[Appel API]
C --> D{Succès ?}
D -->|Oui| E[Mise à jour Hive]
D -->|Non| F[Affichage erreur]
E --> G[Notification succès]
F --> H[Dialog reste ouvert]
```
### 🎨 Interface utilisateur
#### Tableaux interactifs
**MembreTableWidget** - Composant principal :
- Colonnes : ID, Prénom, Nom, Email, Rôle, Statut
- Actions : Modification, Suppression
- Alternance de couleurs pour lisibilité
- Tri et navigation intuitifs
**MembreRowWidget** - Ligne individuelle :
- Clic pour édition rapide
- Boutons d'action contextuels
- Indicateurs visuels de statut
- Tooltip informatifs
#### Formulaires adaptatifs
**UserFormDialog** - Modale réutilisable :
- Layout responsive (>900px vs mobile)
- Validation en temps réel
- Gestion des erreurs inline
- Sauvegarde avec feedback
### 📡 Synchronisation et réactivité
#### Architecture ValueListenableBuilder
```dart
// Écoute automatique des changements
ValueListenableBuilder<Box<MembreModel>>(
valueListenable: membreRepository.getMembresBox().listenable(),
builder: (context, membresBox, child) {
// Interface mise à jour automatiquement
final membres = membresBox.values
.where((m) => m.fkEntite == currentUser.fkEntite)
.toList();
return MembreTableWidget(membres: membres);
},
)
```
#### Principe "API First"
1. **Validation API** : Tentative sur serveur en priorité
2. **Succès** → Sauvegarde locale + mise à jour interface
3. **Erreur** → Affichage message + maintien état local
4. **Cohérence** : Données locales toujours synchronisées
### 🔄 Workflow complet
```mermaid
sequenceDiagram
participant A as Admin
participant UI as Interface
participant R as Repository
participant API as Serveur
participant H as Hive
A->>UI: Action membre
UI->>R: Appel repository
R->>API: Requête HTTP
API-->>R: Réponse
alt Succès
R->>H: Sauvegarde locale
H-->>UI: Notification changement
UI-->>A: Interface mise à jour
else Erreur
R-->>UI: Exception
UI-->>A: Message d'erreur
end
```
### 🎯 Bonnes pratiques
#### Pour les administrateurs
1. **Vérification avant suppression** : Toujours examiner les passages
2. **Préférer la désactivation** : Éviter la perte de données
3. **Noms de tournée** : Utiliser des identifiants terrain clairs
4. **Rôles appropriés** : Limiter les administrateurs aux besoins
#### Gestion des erreurs courantes
| Erreur | Cause | Solution |
| ----------------------- | ------------- | ------------------------ |
| Email déjà utilisé | Duplication | Choisir un autre email |
| Membre avec passages | Données liées | Transférer ou désactiver |
| Aucune opération active | Configuration | Vérifier les opérations |
| Accès refusé | Permissions | Vérifier le rôle admin |
Cette architecture garantit une gestion des membres robuste, sécurisée et intuitive, optimisant l'efficacité administrative tout en préservant l'intégrité des données opérationnelles. 👥✨
## 🗺️ Cartes et géolocalisation
Flutter Map : Rendu cartographique haute performance