- 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
233 lines
8.2 KiB
Markdown
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
|
|
|