Mise en place suppression membre
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user