PHASE 1.1 - Entité Adresse:
- Création entité Adresse avec types (SIEGE_SOCIAL, BUREAU, DOMICILE, AUTRE)
- Relations flexibles: Organisation, Membre, Evenement
- Enum TypeAdresse dans module API (DRY/WOU)
- Repository et Service AdresseService
- Relations bidirectionnelles mises à jour
PHASE 1.2 - Système Rôles et Permissions:
- Entité Role avec types (SYSTEME, ORGANISATION, PERSONNALISE)
- Entité Permission avec structure MODULE > RESSOURCE > ACTION
- Tables de liaison MembreRole et RolePermission
- Repositories pour toutes les entités
- Services RoleService et PermissionService
- Relations bidirectionnelles dans Membre
Respect strict DRY/WOU:
- Enums dans module API réutilisables
- Patterns de service cohérents
- Relations JPA standardisées
SUPPRESSION:
- modifier.xhtml supprime (duplication inutile)
MODIFICATION inscription.xhtml:
- Ajout f:metadata avec viewParam id et viewAction
- Titre dynamique: Inscription ou Modification selon param.id
- Icone dynamique: user-plus (creation) ou pencil (modification)
- Description dynamique selon le mode
MODIFICATION MembreInscriptionBean:
- Ajout membreIdString (String) pour recevoir param URL
- Ajout modeModification (boolean) pour detecter le mode
- Ajout chargerMembreSiModification() : charge membre si ID fourni
- Remplissage automatique des champs avec donnees existantes
- Gestion erreurs ID invalide
MODIFICATION liste.xhtml:
- Bouton Modifier redirige vers inscription.xhtml?id=UUID
UNE SEULE PAGE pour creation ET modification (DRY/WOU)!
Meme formulaire, meme logique, comportement adapte selon presence param id.
- Changement membreSelectionneId (UUID) vers membreSelectionneIdString (String)
- Conversion manuelle avec UUID.fromString() dans chargerMembreSelectionne()
- Gestion erreur IllegalArgumentException pour ID invalide
- Suppression du converter JSF qui n existe pas par defaut
Solution simple et robuste sans creer de converter personnalise.
Le bouton Modifier fonctionne maintenant!
- Ajout de import jakarta.faces.application.FacesMessage
- Resout erreurs de compilation pour les methodes chargerMembreSelectionne et modifierMembreSelectionne
- Permet affichage des messages de succes et erreur
- cotisationStatut : 'À jour' → 'N/A' (en attente intégration module Cotisations)
- cotisationColor : 'text-green-500' → 'text-500' (gris neutre)
- dernierPaiement : 'Nov 2025' → 'N/A'
- tauxParticipation : '75' → '0'
- evenementsAnnee : '12' → '0'
Plus de données fictives dans le système !
Les vraies données seront affichées une fois les modules Cotisations et Événements intégrés.
Respecte le principe : 'Je ne veux aucune données fictives dans le système.
Tout doit pouvoir être CRUD réellement.'
- numeroMembre : Marqué AUTO-GÉNÉRÉ, ne pas afficher dans formulaire création
- dateNaissance : Marquée AUTO-GÉNÉRÉE à il y a 18 ans si non fournie
- dateAdhesion : Marquée AUTO-GÉNÉRÉE à LocalDate.now() si non fournie
Documentation claire pour les développeurs frontend :
- Champs OBLIGATOIRES : nom, prénom, email, statut, associationId
- Champs OPTIONNELS : tous les autres
- Champs AUTO-GÉNÉRÉS : à ne pas afficher dans les formulaires de création
Cette documentation guide la création des formulaires pour ne demander
que les informations essentielles à l'utilisateur.
- Ajout des champs : membreBureau, responsable, dateAdhesion, region, ville, quartier, role
- Ajout des propriétés dérivées :
* typeMembre, typeSeverity, typeIcon : basés sur responsable/membreBureau
* statutIcon : icône selon le statut
* entite : nom de l'association
* anciennete : calcul depuis dateInscription
* cotisationStatut, cotisationColor, dernierPaiement : valeurs par défaut (TODO)
* tauxParticipation, evenementsAnnee : valeurs par défaut (TODO)
- Résout PropertyNotFoundException pour typeSeverity et autres propriétés
- Les propriétés de cotisation et participation sont des placeholders à remplacer par vraies données
- Ajout de la méthode getInitiales() qui retourne les initiales du membre
- Calcule les initiales à partir du prénom et du nom (première lettre de chaque)
- Retourne les initiales en majuscules
- Résout l'erreur PropertyNotFoundException pour la propriété initiales
- Ajout du champ photoUrl avec @Size(max=255) pour aligner avec le DTO serveur
- Ajout des getters et setters correspondants
- Résout l'erreur PropertyNotFoundException lors de l'affichage des membres
- 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