Files
unionflow-server-api/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

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 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