Files
unionflow-mobile-apps/PHASE2_REFACTORING_PLAN.md
dahoud c877065500 feat(client): Réorganisation des composants réutilisables par type et correction des erreurs EL
- Réorganisation de la structure des composants dans des sous-dossiers :
  * buttons/ : tous les composants de boutons
  * cards/ : card-header, card-simple, filter-bar, stat-card
  * columns/ : composants de colonnes pour datatables
  * dialogs/ : confirm-dialog, form-dialog
  * forms/ : tous les composants de formulaires
  * layout/ : menu, topbar, footer, config, rightpanel, page-header, organisation-logo
  * tables/ : data-table

- Correction des erreurs EL dans les composants :
  * Suppression des expressions EL dans les commentaires XML
  * Protection des paramètres optionnels (styleClass) avec 'not empty'
  * Simplification de confirm-dialog avec valeurs fixes
  * Correction de organisation-logo (rendered sur balise HTML)

- Ajout de nouvelles pages pour les organisations :
  * detail.xhtml : consultation exhaustive d'une organisation
  * nouvelle.xhtml : création complète d'une organisation

- Mise à jour de toutes les références vers les nouveaux chemins (37+ fichiers)
- Maintien de l'approche DRY/WOU avec composants réutilisables
2025-11-29 19:10:01 +00:00

233 lines
8.2 KiB
Markdown

# Phase 2 - Plan de Refactorisation : Cotisations & Adhésions
**Date** : 17 novembre 2025
**Objectif** : Refactoriser les modules Cotisations et Adhésions selon DRY/WOU
---
## 📊 ÉTAT ACTUEL DÉTAILLÉ
### Beans Existants
#### 1. `CotisationsBean` (`@Named("cotisationsBean")`)
- **Usage** : Pages `/pages/secure/cotisation/*`
- **Problèmes** :
- ❌ Classe interne `Cotisation` duplique `CotisationDTO`
- ❌ Données mockées : `evolutionPaiements`, `repartitionMethodes`, `rappelsEnAttente`
- ❌ Actions non connectées : `marquerCommePaye()`, `enregistrerPaiementPartiel()`, etc.
- ❌ Statistiques calculées côté client au lieu d'utiliser `/api/cotisations/stats`
- ✅ Utilise déjà `CotisationService` pour charger les données
#### 2. `CotisationsGestionBean` (`@Named("cotisationsGestionBean")`)
- **Usage** : Page `/pages/admin/cotisations/gestion.xhtml`
- **Problèmes** :
- ❌ Classe interne `CotisationAdmin` duplique `CotisationDTO`
- ❌ Actions non connectées : toutes les actions sont juste des `LOGGER.info()`
- ❌ Statistiques calculées côté client
- ✅ Utilise déjà `CotisationService` pour charger les données
### Pages Existantes
#### Pages Cotisations (`/pages/secure/cotisation/`)
-`paiement.xhtml` - **PLACEHOLDER**
-`historique.xhtml` - **PLACEHOLDER**
-`relances.xhtml` - **PLACEHOLDER**
-`rapports.xhtml` - **PLACEHOLDER**
-`collect.xhtml` - **PLACEHOLDER**
-`reminders.xhtml` - **PLACEHOLDER**
-`report.xhtml` - **PLACEHOLDER**
#### Page Admin Cotisations
-`/pages/admin/cotisations/gestion.xhtml` - **EXISTE** (utilise `cotisationsGestionBean`)
### Composants Réutilisables Disponibles
**Déjà créés** :
- `page-header.xhtml`
- `form-section.xhtml`
- `form-field-text.xhtml`
- `form-field-calendar.xhtml`
- `form-field-select.xhtml`
- `form-field-textarea.xhtml`
- `form-field-number.xhtml`
- `form-field-checkbox-menu.xhtml`
- `form-field-autocomplete.xhtml`
- `form-field-boolean.xhtml`
- `form-field-group.xhtml`
- `button-primary.xhtml`
- `button-secondary.xhtml`
- `button-success.xhtml`
- `button-info.xhtml`
- `button-warning.xhtml`
- `button-icon.xhtml`
- `stat-card.xhtml`
---
## 🎯 PLAN DE REFACTORISATION
### **ÉTAPE 1 : Refactoriser CotisationsBean** (Priorité 1)
#### 1.1 Supprimer la classe interne `Cotisation`
- [ ] Utiliser directement `CotisationDTO` partout
- [ ] Supprimer `convertToCotisation()` et utiliser directement les DTOs
- [ ] Adapter les propriétés dérivées (statutSeverity, etc.) dans le DTO ou créer un helper
#### 1.2 Utiliser les statistiques du backend
- [ ] Remplacer `initializeStatistiques()` pour utiliser `cotisationService.obtenirStatistiques()`
- [ ] Supprimer le calcul côté client
#### 1.3 Supprimer les données mockées
- [ ] `initializeEvolutionPaiements()` - Calculer depuis les données réelles
- [ ] `initializeRepartitionMethodes()` - Calculer depuis les données réelles
- [ ] `initializeRappels()` - Utiliser `cotisationService.obtenirEnRetard()`
#### 1.4 Connecter les actions au backend
- [ ] `enregistrerCotisation()``cotisationService.creer()`
- [ ] `marquerCommePaye()``cotisationService.modifier()` avec statut PAYEE
- [ ] `enregistrerPaiementPartiel()``cotisationService.modifier()` avec montant partiel
- [ ] `envoyerRappel()` → À implémenter (service de notification)
- [ ] `envoyerRappelsGroupes()` → À implémenter
- [ ] `exporterCotisations()` → À implémenter
- [ ] `genererRapportFinancier()` → Utiliser les statistiques du backend
#### 1.5 Améliorer la recherche
- [ ] Utiliser `cotisationService.rechercher()` au lieu de filtrage côté client
- [ ] Supprimer `appliquerFiltres()` et utiliser la recherche backend
---
### **ÉTAPE 2 : Refactoriser CotisationsGestionBean** (Priorité 2)
#### 2.1 Supprimer la classe interne `CotisationAdmin`
- [ ] Utiliser directement `CotisationDTO`
- [ ] Supprimer `convertToCotisationAdmin()`
#### 2.2 Utiliser les statistiques du backend
- [ ] Remplacer `initializeKPIs()` pour utiliser `cotisationService.obtenirStatistiques()`
#### 2.3 Connecter toutes les actions au backend
- [ ] `enregistrerPaiement()``cotisationService.modifier()`
- [ ] `genererRecu()` → À implémenter (génération PDF)
- [ ] `envoyerRappel()` → À implémenter
- [ ] `marquerPayeesGroupees()` → Boucle sur sélection + `cotisationService.modifier()`
- [ ] `envoyerRelancesGroupees()` → À implémenter
- [ ] `genererRecusGroupes()` → À implémenter
- [ ] `annulerCotisationsGroupees()``cotisationService.supprimer()`
- [ ] `creerCampagne()` → Créer plusieurs cotisations via `cotisationService.creer()`
---
### **ÉTAPE 3 : Créer les Pages Cotisations** (Priorité 3)
#### 3.1 Page Paiement (`paiement.xhtml`)
- [ ] Utiliser `page-header.xhtml`
- [ ] Formulaire avec `form-field-*` components
- [ ] Sélection méthode paiement (Wave, Orange, etc.)
- [ ] Connexion à `cotisationService.modifier()` pour enregistrer le paiement
- [ ] Utiliser composants boutons réutilisables
#### 3.2 Page Historique (`historique.xhtml`)
- [ ] Utiliser `page-header.xhtml`
- [ ] Tableau avec `p:dataTable`
- [ ] Filtres avec composants réutilisables
- [ ] Connexion à `cotisationService.obtenirParMembre()` ou `cotisationService.rechercher()`
- [ ] Pagination
#### 3.3 Page Relances (`relances.xhtml`)
- [ ] Utiliser `page-header.xhtml`
- [ ] Liste des cotisations en retard via `cotisationService.obtenirEnRetard()`
- [ ] Actions groupées pour envoi de rappels
- [ ] Utiliser composants réutilisables
#### 3.4 Page Rapports (`rapports.xhtml`)
- [ ] Utiliser `page-header.xhtml`
- [ ] Statistiques via `cotisationService.obtenirStatistiques()`
- [ ] Graphiques d'évolution
- [ ] Export Excel/PDF
#### 3.5 Pages Collect, Reminders, Report
- [ ] Déterminer si nécessaire ou fusionner avec autres pages
- [ ] Si nécessaire, créer avec composants réutilisables
---
### **ÉTAPE 4 : Créer Module Adhésions Backend** (Priorité 4)
#### 4.1 Créer `AdhesionDTO` dans `unionflow-server-api`
- [ ] Structure complète avec validations
- [ ] Champs : membreId, typeAdhesion, dateDemande, dateValidation, statut, etc.
#### 4.2 Créer `Adhesion` Entity dans `unionflow-server-impl-quarkus`
- [ ] Entité JPA avec UUID
- [ ] Relations avec Membre et Association
#### 4.3 Créer `AdhesionRepository`
- [ ] Repository Panache
- [ ] Méthodes de recherche
#### 4.4 Créer `AdhesionService`
- [ ] Logique métier complète
- [ ] Méthodes CRUD
- [ ] Validation, Renouvellement, Rejet
#### 4.5 Créer `AdhesionResource`
- [ ] REST API complète
- [ ] Tous les endpoints nécessaires
---
### **ÉTAPE 5 : Créer Module Adhésions Frontend** (Priorité 5)
#### 5.1 Créer `AdhesionService` (RestClient)
- [ ] Interface complète correspondant au backend
#### 5.2 Créer `AdhesionsBean`
- [ ] Bean JSF
- [ ] Connexion complète au backend
- [ ] Utiliser directement `AdhesionDTO` (pas de classe interne)
#### 5.3 Créer les pages Adhésions
- [ ] `demande.xhtml` - Formulaire avec composants réutilisables
- [ ] `validation.xhtml` - Liste + actions avec composants réutilisables
- [ ] `renouvellement.xhtml` - Formulaire avec composants réutilisables
- [ ] `liste.xhtml` - Tableau avec composants réutilisables
- [ ] `pending.xhtml` - Liste en attente
- [ ] `history.xhtml` - Historique
---
## 🔄 ORDRE D'EXÉCUTION
1. **Étape 1** : Refactoriser `CotisationsBean` (1-2 semaines)
2. **Étape 2** : Refactoriser `CotisationsGestionBean` (1 semaine)
3. **Étape 3** : Créer pages Cotisations (2-3 semaines)
4. **Étape 4** : Créer module Adhésions Backend (1-2 semaines)
5. **Étape 5** : Créer module Adhésions Frontend (2-3 semaines)
**Durée totale** : 7-11 semaines
---
## ✅ PRINCIPES À RESPECTER
### DRY (Don't Repeat Yourself)
- ❌ Pas de duplication de DTOs (supprimer classes internes)
- ❌ Pas de calculs dupliqués (utiliser backend)
- ❌ Pas de code répétitif (utiliser composants)
### WOU (Write Once, Use Everywhere)
- ✅ Utiliser composants réutilisables créés
- ✅ Utiliser `CotisationDTO` directement
- ✅ Centraliser la logique dans les services
### Connexion Backend
- ✅ Toutes les actions doivent appeler le backend
- ✅ Utiliser les statistiques du backend
- ✅ Gérer les erreurs proprement
---
**Document créé le** : 17 novembre 2025