- 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
8.2 KiB
8.2 KiB
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
CotisationdupliqueCotisationDTO - ❌ 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à
CotisationServicepour charger les données
- ❌ Classe interne
2. CotisationsGestionBean (@Named("cotisationsGestionBean"))
- Usage : Page
/pages/admin/cotisations/gestion.xhtml - Problèmes :
- ❌ Classe interne
CotisationAdmindupliqueCotisationDTO - ❌ Actions non connectées : toutes les actions sont juste des
LOGGER.info() - ❌ Statistiques calculées côté client
- ✅ Utilise déjà
CotisationServicepour charger les données
- ❌ Classe interne
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 (utilisecotisationsGestionBean)
Composants Réutilisables Disponibles
✅ Déjà créés :
page-header.xhtmlform-section.xhtmlform-field-text.xhtmlform-field-calendar.xhtmlform-field-select.xhtmlform-field-textarea.xhtmlform-field-number.xhtmlform-field-checkbox-menu.xhtmlform-field-autocomplete.xhtmlform-field-boolean.xhtmlform-field-group.xhtmlbutton-primary.xhtmlbutton-secondary.xhtmlbutton-success.xhtmlbutton-info.xhtmlbutton-warning.xhtmlbutton-icon.xhtmlstat-card.xhtml
🎯 PLAN DE REFACTORISATION
ÉTAPE 1 : Refactoriser CotisationsBean (Priorité 1)
1.1 Supprimer la classe interne Cotisation
- Utiliser directement
CotisationDTOpartout - 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 utilisercotisationService.obtenirStatistiques() - Supprimer le calcul côté client
1.3 Supprimer les données mockées
initializeEvolutionPaiements()- Calculer depuis les données réellesinitializeRepartitionMethodes()- Calculer depuis les données réellesinitializeRappels()- UtilisercotisationService.obtenirEnRetard()
1.4 Connecter les actions au backend
enregistrerCotisation()→cotisationService.creer()marquerCommePaye()→cotisationService.modifier()avec statut PAYEEenregistrerPaiementPartiel()→cotisationService.modifier()avec montant partielenvoyerRappel()→ À implémenter (service de notification)envoyerRappelsGroupes()→ À implémenterexporterCotisations()→ À implémentergenererRapportFinancier()→ 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 utilisercotisationService.obtenirStatistiques()
2.3 Connecter toutes les actions au backend
enregistrerPaiement()→cotisationService.modifier()genererRecu()→ À implémenter (génération PDF)envoyerRappel()→ À implémentermarquerPayeesGroupees()→ Boucle sur sélection +cotisationService.modifier()envoyerRelancesGroupees()→ À implémentergenererRecusGroupes()→ À implémenterannulerCotisationsGroupees()→cotisationService.supprimer()creerCampagne()→ Créer plusieurs cotisations viacotisationService.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()oucotisationService.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éutilisablesvalidation.xhtml- Liste + actions avec composants réutilisablesrenouvellement.xhtml- Formulaire avec composants réutilisablesliste.xhtml- Tableau avec composants réutilisablespending.xhtml- Liste en attentehistory.xhtml- Historique
🔄 ORDRE D'EXÉCUTION
- Étape 1 : Refactoriser
CotisationsBean(1-2 semaines) - Étape 2 : Refactoriser
CotisationsGestionBean(1 semaine) - Étape 3 : Créer pages Cotisations (2-3 semaines)
- Étape 4 : Créer module Adhésions Backend (1-2 semaines)
- É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
CotisationDTOdirectement - ✅ 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