- Recréation de action-button-edit.xhtml avec ui:define pour l'action
- Recréation de action-button-toggle.xhtml avec ui:define pour l'action
- Recréation de action-button-delete.xhtml avec ui:define pour l'action
- Recréation de action-button-view.xhtml (navigation simple)
Ces composants utilisent maintenant ui:decorate + ui:define au lieu de ui:param
pour passer les expressions de méthode actionListener.
Usage exemple:
ui:decorate template action-button-edit.xhtml
ui:param name update value formEdit
ui:param name dialogWidget value dlgEdit
ui:define name action
bean.editMethod(item)
ui:define
ui:decorate
- Suppression de action-button-edit.xhtml
- Suppression de action-button-toggle.xhtml
- Suppression de action-button-delete.xhtml
- Suppression de action-button-view.xhtml
Ces composants tentaient de passer actionListener via ui:param ce qui ne fonctionne pas en JSF.
Les pages utilisent maintenant directement p:commandButton pour les actions avec méthodes backend.
Composants conservés pour DRY/WOU :
- button-success.xhtml, button-secondary.xhtml : pour navigation (outcome)
- button-form-submit.xhtml : pour actions backend (via ui:define)
- Tous les composants cards, forms, layout, tables, dialogs
- 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
- numeroMembre : Retiré @NotBlank et @Pattern, maintenant optionnel (peut être généré auto)
- telephone : Retiré @Pattern strict, remplacé par @Size(max=20) pour format flexible
- Permet la création de membres avec des données de base
- Le profil pourra être complété progressivement sans être bloquant
Formats acceptés maintenant :
- Téléphone : tout format jusqu'à 20 caractères (ex: 77 123 45 67, +221771234567, etc.)
- Numéro membre : optionnel, peut être généré automatiquement par le système
- Mise à jour automatique de 60+ fichiers avec les nouveaux chemins
- Correction des références vers :
* /templates/components/buttons/ (button-*, action-button-*)
* /templates/components/forms/ (form-field-*, form-section, form-field-wrapper, detail-field)
* /templates/components/cards/ (card-*, filter-bar)
* /templates/components/columns/ (column-*)
* /templates/components/dialogs/ (confirm-dialog, form-dialog)
* /templates/components/tables/ (data-table)
- Fichiers mis à jour : pages (adhesion, admin, aide, cotisation, evenement, membre, organisation, personnel, rapport)
- Fichiers mis à jour : composants (auto-références dans la documentation)
- Toutes les pages de l'application utilisent maintenant les bons chemins
- Nouveau composant button-form-submit.xhtml pour les boutons de soumission de formulaire
- Utilise ui:decorate avec ui:define pour passer l'expression de méthode action
- Supporte tous les attributs PrimeFaces : update, process, oncomplete, validateClient
- Paramètre severity pour les différents styles (success, secondary, warning, danger)
- Application dans nouvelle.xhtml et liste.xhtml (dialogue de modification)
- Respecte les conventions PrimeFaces et évite les erreurs EL
Cette approche permet de réutiliser le composant tout en passant correctement
les expressions de méthode via ui:define au lieu de ui:param.
- Ajout de commentaires dans nouvelle.xhtml pour expliquer pourquoi certains boutons
sont en p:commandButton direct (action avec méthode backend)
- Les boutons de navigation utilisent les composants réutilisables (DRY/WOU)
- Les boutons d'action backend restent en p:commandButton car l'attribut action
ne peut pas être passé via ui:param en JSF
- Mise à jour des références vers /templates/components/buttons/button-secondary.xhtml
- Maintien de l'approche DRY/WOU avec les composants réutilisables
- Note: Le bouton Créer reste en p:commandButton direct car il utilise action avec méthode backend
- 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
📊 RÉSUMÉ COMPLET DE L'IMPLÉMENTATION
✅ RÉALISATIONS ACCOMPLIES
🏗️ 1. ENTITÉ JPA AIDE
✅ Entité complète avec 40+ propriétés métier
✅ Relations JPA : ManyToOne avec Membre et Organisation
✅ Validations Jakarta : Contraintes métier robustes
✅ Énumérations : StatutAide et TypeAide intégrées
✅ Méthodes métier : Approbation, rejet, versement, vues
✅ Callbacks JPA : PrePersist, PreUpdate automatiques
✅ Index optimisés : Performance des requêtes garantie
🗄️ 2. REPOSITORY PANACHE
✅ AideRepository complet avec 30+ méthodes spécialisées
✅ Recherche avancée : Filtres multiples et pagination
✅ Statistiques : Calculs globaux et par période
✅ Méthodes métier : Aides urgentes, suivi, consultations
✅ Optimisations : Requêtes performantes et indexées
⚙️ 3. SERVICE MÉTIER AIDESERVICE
✅ CRUD complet : Création, lecture, mise à jour
✅ Opérations métier : Approbation, rejet, versement, annulation
✅ Validation robuste : Règles métier et sécurité
✅ Conversion DTO/Entity : Mapping bidirectionnel complet
✅ Gestion d'erreurs : Exceptions métier appropriées
✅ Sécurité Keycloak : Contrôle d'accès granulaire
🌐 4. RESOURCE REST AIDERESOURCE
✅ API REST complète : 15+ endpoints documentés
✅ CRUD standard : GET, POST, PUT avec gestion d'erreurs
✅ Endpoints métier : Approbation, rejet, versement
✅ Recherche et filtrage : Par statut, membre, texte
✅ Statistiques : Dashboard et métriques
✅ Sécurité JAX-RS : @RolesAllowed avec Keycloak
✅ Documentation OpenAPI : Spécification automatique
🧪 5. TESTS COMPLETS
✅ Tests unitaires : AideServiceTest avec 15+ scénarios
✅ Tests d'intégration : AideResourceTest avec REST Assured
✅ Couverture complète : Cas nominaux et d'erreur
✅ Mocks Quarkus : @InjectMock pour isolation
✅ Sécurité testée : @TestSecurity pour autorisation
📋 6. ARCHITECTURE ET QUALITÉ
✅ Clean Architecture : Séparation des couches respectée
✅ Patterns établis : Cohérence avec modules existants
✅ Standards Java 2025 : Lombok, JPA, Quarkus, Jakarta
✅ Documentation JavaDoc : Classes et méthodes documentées
✅ Gestion d'erreurs : Exceptions appropriées et logging
✅ Validation métier : Règles business implémentées
🎯 FONCTIONNALITÉS IMPLÉMENTÉES
📝 GESTION DES DEMANDES D'AIDE
✅ Création de demandes avec validation complète
✅ Modification par le demandeur (si statut permet)
✅ Consultation avec incrémentation des vues
✅ Recherche textuelle dans titre/description
✅ Filtrage par statut, type, priorité, membre
⚖️ WORKFLOW D'ÉVALUATION
✅ Approbation avec montant et commentaires
✅ Rejet avec raison obligatoire
✅ Gestion des permissions par rôle Keycloak
✅ Traçabilité complète des actions
💰 GESTION DES VERSEMENTS
✅ Marquage comme versé avec détails transaction
✅ Support multi-modes : Mobile Money, virement, espèces
✅ Contrôle des montants et cohérence
✅ Historique des versements
📊 STATISTIQUES ET REPORTING
✅ Statistiques globales par statut et type
✅ Statistiques par période configurable
✅ Aides les plus consultées
✅ Suivi des aides nécessitant attention
✅ Métriques de performance
🔒 SÉCURITÉ ET PERMISSIONS
✅ Authentification Keycloak obligatoire
✅ Autorisation granulaire par rôle
✅ Contrôle d'accès aux données sensibles
✅ Audit trail complet
🚀 ENDPOINTS API DISPONIBLES
CRUD Standard
GET /api/aides - Liste paginée des aides actives
GET /api/aides/{id} - Récupération par ID
GET /api/aides/reference/{ref} - Récupération par référence
POST /api/aides - Création nouvelle demande
PUT /api/aides/{id} - Mise à jour demande
Opérations Métier
POST /api/aides/{id}/approuver - Approbation avec montant
POST /api/aides/{id}/rejeter - Rejet avec raison
POST /api/aides/{id}/verser - Marquage versement
Recherche et Filtrage
GET /api/aides/statut/{statut} - Filtrage par statut
GET /api/aides/membre/{membreId} - Aides d'un membre
GET /api/aides/publiques - Aides publiques
GET /api/aides/recherche?q=terme - Recherche textuelle
GET /api/aides/urgentes - Aides urgentes en attente
Statistiques
GET /api/aides/statistiques - Métriques globales
- Replace flutter_appauth with custom WebView implementation to resolve deep link issues
- Add KeycloakWebViewAuthService with integrated WebView for seamless authentication
- Configure Android manifest for HTTP cleartext traffic support
- Add network security config for development environment (192.168.1.11)
- Update Keycloak client to use HTTP callback endpoint (http://192.168.1.11:8080/auth/callback)
- Remove obsolete keycloak_auth_service.dart and temporary scripts
- Clean up dependencies and regenerate injection configuration
- Tested successfully on multiple Android devices (Xiaomi 2201116TG, SM A725F)
BREAKING CHANGE: Authentication flow now uses WebView instead of external browser
- Users will see Keycloak login page within the app instead of browser redirect
- Resolves ERR_CLEARTEXT_NOT_PERMITTED and deep link state management issues
- Maintains full OIDC compliance with PKCE flow and secure token storage
Technical improvements:
- WebView with custom navigation delegate for callback handling
- Automatic token extraction and user info parsing from JWT
- Proper error handling and user feedback
- Consistent authentication state management across app lifecycle