From 0dc050f422dc835edd84d352d6a4cb7debd9766e Mon Sep 17 00:00:00 2001 From: dahoud Date: Sun, 15 Mar 2026 16:25:45 +0000 Subject: [PATCH] =?UTF-8?q?Sync:=20code=20local=20unifi=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Synchronisation du code source local (fait foi). Signed-off-by: lions dev Team --- .gitignore | 28 + assign-roles.sh | 64 -- clients.json | 1 - Dockerfile => docker/Dockerfile | 8 +- Dockerfile.prod => docker/Dockerfile.prod | 5 +- keycloak-config.sh | 208 ------- roles.json | 1 - scopes.json | 1 - .../api/dto/MembreDashboardResponse.java | 35 ++ .../lions/unionflow/client/bean/MenuBean.java | 14 +- .../client/bean/PageSecurityBean.java | 179 ++++++ .../client/converter/UuidConverter.java | 37 ++ .../ViewExpiredExceptionHandler.java | 42 +- .../client/service/AssociationService.java | 29 +- .../client/service/EvenementService.java | 17 +- .../service/MembreDashboardRestClient.java | 23 + .../client/service/MembreService.java | 7 +- .../unionflow/client/view/AdhesionsBean.java | 6 +- .../client/view/CotisationsGestionBean.java | 9 +- .../unionflow/client/view/DashboardBean.java | 31 +- .../client/view/DashboardMembreBean.java | 386 ++++++++++++ .../client/view/DemandesAideBean.java | 2 +- .../unionflow/client/view/DemandesBean.java | 2 +- .../client/view/EntitesGestionBean.java | 6 +- .../unionflow/client/view/EvenementsBean.java | 55 +- .../client/view/MembreCotisationBean.java | 46 +- .../client/view/MembreExportBean.java | 5 +- .../client/view/MembreImportBean.java | 5 +- .../client/view/MembreInscriptionBean.java | 4 +- .../client/view/MembreLazyDataModel.java | 8 +- .../client/view/MembreListeBean.java | 26 +- .../client/view/MembreRechercheBean.java | 7 +- .../view/MesCotisationsPaiementBean.java | 574 ++++++++++++++++++ .../client/view/OrganisationDetailBean.java | 14 +- .../view/OrganisationStatistiquesBean.java | 3 +- .../client/view/OrganisationsBean.java | 51 +- .../unionflow/client/view/PersonnelBean.java | 90 ++- .../unionflow/client/view/RapportsBean.java | 10 +- .../unionflow/client/view/RolesBean.java | 28 + .../unionflow/client/view/SuperAdminBean.java | 8 +- .../view/TypeOrganisationsAdminBean.java | 50 +- .../unionflow/client/view/UserSession.java | 19 +- .../client/view/UtilisateursBean.java | 3 +- src/main/resources/META-INF/faces-config.xml | 39 ++ .../pages/admin/documents/gestion.xhtml | 2 +- .../pages/secure/adhesion/demande.xhtml | 2 + .../pages/secure/adhesion/liste.xhtml | 2 + .../resources/pages/secure/adhesion/new.xhtml | 2 + .../pages/secure/comptabilite/gestion.xhtml | 2 + .../pages/secure/cotisation/paiement.xhtml | 13 +- .../pages/secure/credit/demandes.xhtml | 30 + .../pages/secure/credit/evaluation.xhtml | 30 + .../pages/secure/credit/remboursements.xhtml | 30 + .../pages/secure/credit/statistiques.xhtml | 30 + .../resources/pages/secure/credit/suivi.xhtml | 30 + .../pages/secure/dashboard-membre.xhtml | 272 +++++++++ .../resources/pages/secure/dashboard.xhtml | 337 +++++----- .../pages/secure/finance/tresorerie.xhtml | 5 + .../pages/secure/membre/cotisations.xhtml | 4 +- .../pages/secure/membre/export.xhtml | 2 +- .../pages/secure/membre/import.xhtml | 2 +- .../pages/secure/membre/inscription.xhtml | 7 +- .../resources/pages/secure/membre/liste.xhtml | 58 +- .../membre/paiement-mes-cotisations.xhtml | 349 +++++++++++ .../pages/secure/membre/validation.xhtml | 34 ++ .../pages/secure/organisation/liste.xhtml | 53 +- .../pages/super-admin/organisations.xhtml | 43 +- .../pages/super-admin/roles/gestion.xhtml | 18 +- .../super-admin/types/organisations.xhtml | 52 +- .../templates/components/cards/kpi-card.xhtml | 8 +- .../templates/components/layout/menu.xhtml | 4 +- .../security/page-access-control.xhtml | 35 ++ .../resources/ui/includes/membre-form.xhtml | 2 +- .../ui/includes/organisation-form.xhtml | 1 + src/main/resources/application-dev.properties | 7 +- target/classes/META-INF/faces-config.xml | 39 ++ .../pages/admin/documents/gestion.xhtml | 2 +- .../pages/secure/adhesion/demande.xhtml | 2 + .../pages/secure/adhesion/liste.xhtml | 2 + .../resources/pages/secure/adhesion/new.xhtml | 2 + .../pages/secure/cotisation/paiement.xhtml | 13 +- .../resources/pages/secure/dashboard.xhtml | 337 +++++----- .../pages/secure/membre/cotisations.xhtml | 4 +- .../pages/secure/membre/export.xhtml | 2 +- .../pages/secure/membre/import.xhtml | 2 +- .../pages/secure/membre/inscription.xhtml | 7 +- .../resources/pages/secure/membre/liste.xhtml | 58 +- .../pages/secure/organisation/liste.xhtml | 53 +- .../pages/super-admin/organisations.xhtml | 43 +- .../pages/super-admin/roles/gestion.xhtml | 18 +- .../super-admin/types/organisations.xhtml | 52 +- .../templates/components/cards/kpi-card.xhtml | 8 +- .../templates/components/layout/menu.xhtml | 4 +- .../resources/ui/includes/membre-form.xhtml | 2 +- .../ui/includes/organisation-form.xhtml | 1 + target/classes/application-dev.properties | 7 +- .../ViewExpiredExceptionHandler.class | Bin 4465 -> 5453 bytes ...ionService$PerformanceAssociationDTO.class | Bin 2572 -> 2572 bytes ...onService$StatistiquesAssociationDTO.class | Bin 3204 -> 3204 bytes .../client/service/AssociationService.class | Bin 4125 -> 3960 bytes .../client/service/EvenementService.class | Bin 3890 -> 4495 bytes .../MembreService$ResultatImportDTO.class | Bin 2244 -> 2244 bytes .../MembreService$StatistiquesMembreDTO.class | Bin 2458 -> 2458 bytes .../client/service/MembreService.class | Bin 6136 -> 6460 bytes .../view/AdhesionsBean$FiltresAdhesion.class | Bin 1552 -> 1552 bytes .../view/AdhesionsBean$NouvelleAdhesion.class | Bin 1668 -> 1668 bytes .../AdhesionsBean$StatistiquesAdhesion.class | Bin 3282 -> 3282 bytes .../unionflow/client/view/AdhesionsBean.class | Bin 25378 -> 25276 bytes ...ationsGestionBean$FiltresCotisations.class | Bin 2741 -> 2741 bytes ...otisationsGestionBean$MembreEnRetard.class | Bin 1795 -> 1795 bytes ...isationsGestionBean$NouvelleCampagne.class | Bin 2348 -> 2348 bytes .../CotisationsGestionBean$Organisation.class | Bin 1124 -> 1124 bytes ...sGestionBean$OrganisationPerformante.class | Bin 1832 -> 1832 bytes .../client/view/CotisationsGestionBean.class | Bin 62221 -> 62134 bytes .../client/view/DashboardBean$Activity.class | Bin 2828 -> 2828 bytes .../view/DashboardBean$MoisFinancier.class | Bin 3081 -> 3081 bytes .../unionflow/client/view/DashboardBean.class | Bin 27996 -> 29488 bytes .../client/view/DemandesAideBean.class | Bin 28195 -> 28195 bytes .../unionflow/client/view/DemandesBean.class | Bin 18197 -> 18197 bytes .../EntitesGestionBean$Administrateur.class | Bin 990 -> 990 bytes .../view/EntitesGestionBean$Entite.class | Bin 10077 -> 10077 bytes .../view/EntitesGestionBean$Filtres.class | Bin 2223 -> 2223 bytes .../EntitesGestionBean$Statistiques.class | Bin 2964 -> 2964 bytes .../client/view/EntitesGestionBean.class | Bin 27142 -> 27055 bytes .../EvenementsBean$FiltresEvenement.class | Bin 2134 -> 2134 bytes ...venementsBean$StatistiquesEvenements.class | Bin 2315 -> 2315 bytes .../client/view/EvenementsBean.class | Bin 28801 -> 28574 bytes .../MembreCotisationBean$Cotisation.class | Bin 5552 -> 5552 bytes .../view/MembreCotisationBean$Echeance.class | Bin 2289 -> 2289 bytes .../client/view/MembreCotisationBean.class | Bin 26498 -> 27440 bytes .../MembreExportBean$ExportHistorique.class | Bin 1510 -> 1510 bytes .../client/view/MembreExportBean.class | Bin 20138 -> 20036 bytes .../view/MembreImportBean$ErreurImport.class | Bin 1004 -> 1004 bytes .../MembreImportBean$ResultatImport.class | Bin 2084 -> 2084 bytes .../client/view/MembreImportBean.class | Bin 16139 -> 16037 bytes .../client/view/MembreInscriptionBean.class | Bin 23202 -> 23100 bytes .../client/view/MembreListeBean.class | Bin 31907 -> 32327 bytes .../view/MembreRechercheBean$Entite.class | Bin 1002 -> 1002 bytes .../view/MembreRechercheBean$Filtres.class | Bin 6021 -> 6021 bytes .../view/MembreRechercheBean$Membre.class | Bin 7956 -> 7956 bytes .../MembreRechercheBean$MessageGroupe.class | Bin 1489 -> 1489 bytes ...reRechercheBean$RechercheSauvegardee.class | Bin 2013 -> 2013 bytes .../MembreRechercheBean$Statistiques.class | Bin 1419 -> 1419 bytes .../client/view/MembreRechercheBean.class | Bin 19092 -> 19073 bytes .../client/view/OrganisationDetailBean.class | Bin 18624 -> 18728 bytes .../client/view/OrganisationsBean.class | Bin 25403 -> 25959 bytes .../view/PersonnelBean$ActiviteRecente.class | Bin 1587 -> 1587 bytes .../PersonnelBean$DocumentPersonnel.class | Bin 1722 -> 1722 bytes ...ersonnelBean$NotificationPersonnelle.class | Bin 1745 -> 1745 bytes .../PersonnelBean$StatistiquesProfil.class | Bin 1487 -> 1487 bytes .../unionflow/client/view/PersonnelBean.class | Bin 19264 -> 19221 bytes .../unionflow/client/view/RapportsBean.class | Bin 26495 -> 26690 bytes .../client/view/RolesBean$Permission.class | Bin 836 -> 836 bytes .../client/view/RolesBean$Role.class | Bin 10067 -> 10067 bytes .../client/view/RolesBean$StatutRole.class | Bin 1421 -> 1421 bytes .../client/view/RolesBean$TypeRole.class | Bin 1416 -> 1416 bytes .../client/view/RolesBean$Utilisateur.class | Bin 835 -> 835 bytes .../unionflow/client/view/RolesBean.class | Bin 10709 -> 11159 bytes .../client/view/SuperAdminBean$Activite.class | Bin 2016 -> 2016 bytes .../client/view/SuperAdminBean$Alerte.class | Bin 1778 -> 1778 bytes .../client/view/SuperAdminBean$Entite.class | Bin 1430 -> 1430 bytes .../view/SuperAdminBean$EvolutionMois.class | Bin 1184 -> 1184 bytes .../view/SuperAdminBean$MoisRevenu.class | Bin 1163 -> 1163 bytes .../view/SuperAdminBean$RevenusData.class | Bin 2770 -> 2770 bytes .../view/SuperAdminBean$TypeEntite.class | Bin 2010 -> 2010 bytes .../client/view/SuperAdminBean.class | Bin 31511 -> 31424 bytes .../view/TypeOrganisationsAdminBean.class | Bin 11279 -> 12369 bytes .../client/view/UserSession$CurrentUser.class | Bin 2649 -> 2649 bytes .../client/view/UserSession$EntiteInfo.class | Bin 1980 -> 1980 bytes .../unionflow/client/view/UserSession.class | Bin 14441 -> 14762 bytes .../view/UtilisateursBean$Filtres.class | Bin 1641 -> 1641 bytes .../UtilisateursBean$NouvelUtilisateur.class | Bin 2299 -> 2299 bytes .../view/UtilisateursBean$Organisation.class | Bin 1008 -> 1008 bytes ...sateursBean$StatistiquesUtilisateurs.class | Bin 1503 -> 1503 bytes .../view/UtilisateursBean$Utilisateur.class | Bin 6654 -> 6654 bytes .../client/view/UtilisateursBean.class | Bin 16229 -> 16142 bytes .../compile/default-compile/createdFiles.lst | 11 +- .../compile/default-compile/inputFiles.lst | 6 + unionflow-client-quarkus-primefaces-freya.iml | 20 - 179 files changed, 3355 insertions(+), 992 deletions(-) delete mode 100644 assign-roles.sh delete mode 100644 clients.json rename Dockerfile => docker/Dockerfile (93%) rename Dockerfile.prod => docker/Dockerfile.prod (95%) delete mode 100644 keycloak-config.sh delete mode 100644 roles.json delete mode 100644 scopes.json create mode 100644 src/main/java/dev/lions/unionflow/client/api/dto/MembreDashboardResponse.java create mode 100644 src/main/java/dev/lions/unionflow/client/bean/PageSecurityBean.java create mode 100644 src/main/java/dev/lions/unionflow/client/converter/UuidConverter.java create mode 100644 src/main/java/dev/lions/unionflow/client/service/MembreDashboardRestClient.java create mode 100644 src/main/java/dev/lions/unionflow/client/view/DashboardMembreBean.java create mode 100644 src/main/java/dev/lions/unionflow/client/view/MesCotisationsPaiementBean.java create mode 100644 src/main/resources/META-INF/resources/pages/secure/credit/demandes.xhtml create mode 100644 src/main/resources/META-INF/resources/pages/secure/credit/evaluation.xhtml create mode 100644 src/main/resources/META-INF/resources/pages/secure/credit/remboursements.xhtml create mode 100644 src/main/resources/META-INF/resources/pages/secure/credit/statistiques.xhtml create mode 100644 src/main/resources/META-INF/resources/pages/secure/credit/suivi.xhtml create mode 100644 src/main/resources/META-INF/resources/pages/secure/dashboard-membre.xhtml create mode 100644 src/main/resources/META-INF/resources/pages/secure/membre/paiement-mes-cotisations.xhtml create mode 100644 src/main/resources/META-INF/resources/pages/secure/membre/validation.xhtml create mode 100644 src/main/resources/META-INF/resources/templates/components/security/page-access-control.xhtml delete mode 100644 unionflow-client-quarkus-primefaces-freya.iml diff --git a/.gitignore b/.gitignore index bdac85e..086aad3 100644 --- a/.gitignore +++ b/.gitignore @@ -83,3 +83,31 @@ credentials.json # Quarkus specific .quarkus/ quarkus.log + +# JSF/Faces specific +**/META-INF/resources/.faces-config.xml.jsfdia +**/javax.faces.resource/ + +# PrimeFaces cache +**/primefaces_resource_cache/ + +# Node modules (if using npm/webpack for frontend assets) +node_modules/ +npm-debug.log +yarn-error.log +package-lock.json +yarn.lock + +# Static resources compiled +src/main/resources/META-INF/resources/dist/ +src/main/resources/META-INF/resources/assets/vendor/ + +# Database files (dev) +*.db +*.sqlite +*.h2.db + +# Application config overrides (local dev) +application-local.properties +application-dev-override.properties +*-secret.properties diff --git a/assign-roles.sh b/assign-roles.sh deleted file mode 100644 index ebade29..0000000 --- a/assign-roles.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash - -KEYCLOAK_URL="http://localhost:8180" -ADMIN_USER="admin" -ADMIN_PASS="admin" -REALM_NAME="unionflow" -USER_ID="4ebcdfef-960e-4dd2-b89c-028129af906d" - -echo "🔧 Attribution des rĂŽles Ă  l'utilisateur test..." - -# Obtenir le token -TOKEN=$(curl -s -X POST "$KEYCLOAK_URL/realms/master/protocol/openid-connect/token" \ - -H "Content-Type: application/x-www-form-urlencoded" \ - -d "username=$ADMIN_USER" \ - -d "password=$ADMIN_PASS" \ - -d "grant_type=password" \ - -d "client_id=admin-cli" | grep -o '"access_token":"[^"]*' | cut -d'"' -f4) - -if [ -z "$TOKEN" ]; then - echo "❌ Impossible d'obtenir le token" - exit 1 -fi - -# RĂ©cupĂ©rer les rĂŽles -ROLES_JSON=$(curl -s -X GET "$KEYCLOAK_URL/admin/realms/$REALM_NAME/roles" \ - -H "Authorization: Bearer $TOKEN") - -# Extraire les IDs des rĂŽles MEMBRE et ADMIN_ENTITE -ROLE_MEMBRE_ID=$(echo "$ROLES_JSON" | grep -o '"id":"[^"]*","name":"MEMBRE"' | grep -o '"id":"[^"]*' | cut -d'"' -f4) -ROLE_ADMIN_ID=$(echo "$ROLES_JSON" | grep -o '"id":"[^"]*","name":"ADMIN_ENTITE"' | grep -o '"id":"[^"]*' | cut -d'"' -f4) - -echo "MEMBRE ID: $ROLE_MEMBRE_ID" -echo "ADMIN_ENTITE ID: $ROLE_ADMIN_ID" - -if [ -n "$ROLE_MEMBRE_ID" ]; then - curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/users/$USER_ID/role-mappings/realm" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d "[{\"id\":\"$ROLE_MEMBRE_ID\",\"name\":\"MEMBRE\"}]" > /dev/null 2>&1 - echo "✅ RĂŽle MEMBRE assignĂ©" -fi - -if [ -n "$ROLE_ADMIN_ID" ]; then - curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/users/$USER_ID/role-mappings/realm" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d "[{\"id\":\"$ROLE_ADMIN_ID\",\"name\":\"ADMIN_ENTITE\"}]" > /dev/null 2>&1 - echo "✅ RĂŽle ADMIN_ENTITE assignĂ©" -fi - -echo "" -echo "======================================================== " -echo "✅ Configuration terminĂ©e!" -echo "========================================================" -echo "" -echo "📋 Identifiants de connexion:" -echo " - Username: test@unionflow.dev" -echo " - Password: test123" -echo "" -echo "🚀 Prochaines Ă©tapes:" -echo " 1. Lancez l'application: ./start-local.sh" -echo " 2. AccĂ©dez Ă : http://localhost:8086" -echo " 3. Connectez-vous avec les identifiants ci-dessus" -echo "" diff --git a/clients.json b/clients.json deleted file mode 100644 index edc479d..0000000 --- a/clients.json +++ /dev/null @@ -1 +0,0 @@ -{"error":"HTTP 401 Unauthorized"} \ No newline at end of file diff --git a/Dockerfile b/docker/Dockerfile similarity index 93% rename from Dockerfile rename to docker/Dockerfile index f21b6b1..5d12bc3 100644 --- a/Dockerfile +++ b/docker/Dockerfile @@ -9,7 +9,7 @@ ENV LANGUAGE='en_US:en' # Configuration Quarkus ENV QUARKUS_PROFILE=prod -ENV QUARKUS_HTTP_PORT=8080 +ENV QUARKUS_HTTP_PORT=8086 ENV QUARKUS_HTTP_HOST=0.0.0.0 # Configuration Backend UnionFlow @@ -39,8 +39,8 @@ COPY --chown=appuser:appuser target/quarkus-app/quarkus/ /app/quarkus/ USER appuser -# Exposer le port 8080 -EXPOSE 8080 +# Exposer le port 8086 +EXPOSE 8086 # Variables JVM optimisĂ©es ENV JAVA_OPTS="-Xmx1g -Xms512m \ @@ -60,4 +60,4 @@ ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/quarkus-run.jar"] # Health check sur le bon port HEALTHCHECK --interval=30s --timeout=10s --start-period=120s --retries=3 \ - CMD curl -f http://localhost:8080/q/health/ready || exit 1 + CMD curl -f http://localhost:8086/q/health/ready || exit 1 diff --git a/Dockerfile.prod b/docker/Dockerfile.prod similarity index 95% rename from Dockerfile.prod rename to docker/Dockerfile.prod index e029475..249d1b7 100644 --- a/Dockerfile.prod +++ b/docker/Dockerfile.prod @@ -31,12 +31,13 @@ ENV QUARKUS_PROFILE=prod ENV QUARKUS_HTTP_PORT=8086 ENV QUARKUS_HTTP_HOST=0.0.0.0 -# Configuration Keycloak/OIDC (production) +# Configuration Keycloak OIDC (production) ENV QUARKUS_OIDC_AUTH_SERVER_URL=https://security.lions.dev/realms/unionflow ENV QUARKUS_OIDC_CLIENT_ID=unionflow-client ENV QUARKUS_OIDC_ENABLED=true ENV QUARKUS_OIDC_TLS_VERIFICATION=required -ENV KEYCLOAK_CLIENT_SECRET=changeme +# KEYCLOAK_CLIENT_SECRET MUST be injected via Kubernetes Secret at runtime +ENV KEYCLOAK_CLIENT_SECRET= # Configuration API Backend ENV UNIONFLOW_BACKEND_URL=https://api.lions.dev/unionflow diff --git a/keycloak-config.sh b/keycloak-config.sh deleted file mode 100644 index 66c419a..0000000 --- a/keycloak-config.sh +++ /dev/null @@ -1,208 +0,0 @@ -#!/bin/bash - -# Script complet de configuration Keycloak - -KEYCLOAK_URL="http://localhost:8180" -ADMIN_USER="admin" -ADMIN_PASS="admin" -REALM_NAME="unionflow" -CLIENT_ID="unionflow-client" - -echo "🔧 Configuration automatique de Keycloak..." -echo "" - -# Obtenir le token -echo "1. Obtention du token admin..." -TOKEN_RESPONSE=$(curl -s -X POST "$KEYCLOAK_URL/realms/master/protocol/openid-connect/token" \ - -H "Content-Type: application/x-www-form-urlencoded" \ - -d "username=$ADMIN_USER" \ - -d "password=$ADMIN_PASS" \ - -d "grant_type=password" \ - -d "client_id=admin-cli") - -TOKEN=$(echo "$TOKEN_RESPONSE" | grep -o '"access_token":"[^"]*' | cut -d'"' -f4) - -if [ -z "$TOKEN" ]; then - echo "❌ Impossible d'obtenir le token admin" - exit 1 -fi -echo "✅ Token obtenu" - -# CrĂ©er le realm (ignore si existe dĂ©jĂ ) -echo "" -echo "2. CrĂ©ation du realm..." -curl -s -X POST "$KEYCLOAK_URL/admin/realms" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d "{\"realm\":\"$REALM_NAME\",\"enabled\":true,\"displayName\":\"UnionFlow\"}" > /dev/null 2>&1 -echo "✅ Realm vĂ©rifiĂ©" - -# CrĂ©er les rĂŽles -echo "" -echo "3. CrĂ©ation des rĂŽles..." -curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/roles" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"name":"SUPER_ADMIN","description":"Super admin"}' > /dev/null 2>&1 - -curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/roles" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"name":"ADMIN_ENTITE","description":"Admin entite"}' > /dev/null 2>&1 - -curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/roles" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"name":"MEMBRE","description":"Membre"}' > /dev/null 2>&1 - -curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/roles" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"name":"GESTIONNAIRE_MEMBRE","description":"Gestionnaire"}' > /dev/null 2>&1 -echo "✅ RĂŽles vĂ©rifiĂ©s" - -# CrĂ©er le client -echo "" -echo "4. CrĂ©ation du client..." -curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/clients" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d "{\"clientId\":\"$CLIENT_ID\",\"enabled\":true,\"protocol\":\"openid-connect\",\"publicClient\":false,\"directAccessGrantsEnabled\":true,\"standardFlowEnabled\":true,\"implicitFlowEnabled\":false,\"rootUrl\":\"http://localhost:8086\",\"redirectUris\":[\"http://localhost:8086/*\"],\"webOrigins\":[\"http://localhost:8086\"],\"attributes\":{\"post.logout.redirect.uris\":\"http://localhost:8086/*\"}}" > /dev/null 2>&1 -echo "✅ Client vĂ©rifiĂ©" - -# RĂ©cupĂ©rer l'UUID du client -echo "" -echo "5. RĂ©cupĂ©ration du client UUID..." -curl -s -X GET "$KEYCLOAK_URL/admin/realms/$REALM_NAME/clients" \ - -H "Authorization: Bearer $TOKEN" > clients_temp.json - -# Sauvegarder dans un fichier pour debug -cat clients_temp.json > clients_debug.json - -# Extraire seulement l'entrĂ©e du client unionflow-client -# On cherche la ligne complĂšte qui contient notre client -CLIENT_UUID=$(cat clients_temp.json | tr ',' '\n' | grep -A 10 "\"clientId\":\"$CLIENT_ID\"" | grep "\"id\":" | head -1 | grep -o '"[a-f0-9-]*"' | tr -d '"') - -if [ -z "$CLIENT_UUID" ]; then - echo "❌ Impossible de trouver le client UUID" - echo "Contenu du fichier (premiers 500 caractĂšres):" - head -c 500 clients_debug.json - exit 1 -fi -echo "✅ Client UUID: $CLIENT_UUID" - -# RĂ©cupĂ©rer le client secret -echo "" -echo "6. RĂ©cupĂ©ration du client secret..." -SECRET_JSON=$(curl -s -X GET "$KEYCLOAK_URL/admin/realms/$REALM_NAME/clients/$CLIENT_UUID/client-secret" \ - -H "Authorization: Bearer $TOKEN") - -CLIENT_SECRET=$(echo "$SECRET_JSON" | grep -o '"value":"[^"]*' | cut -d'"' -f4) - -if [ -z "$CLIENT_SECRET" ]; then - echo "❌ Impossible de rĂ©cupĂ©rer le client secret" - echo "Contenu reçu: $SECRET_JSON" - exit 1 -fi -echo "✅ Client Secret: $CLIENT_SECRET" - -# Configurer le mapper de rĂŽles -echo "" -echo "7. Configuration du mapper de rĂŽles..." -SCOPES_JSON=$(curl -s -X GET "$KEYCLOAK_URL/admin/realms/$REALM_NAME/clients/$CLIENT_UUID/default-client-scopes" \ - -H "Authorization: Bearer $TOKEN") - -SCOPE_ID=$(echo "$SCOPES_JSON" | grep -o '"id":"[^"]*"' | grep -A5 "dedicated" | head -1 | cut -d'"' -f4) - -if [ -n "$SCOPE_ID" ]; then - curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/client-scopes/$SCOPE_ID/protocol-mappers/models" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"name":"realm-roles","protocol":"openid-connect","protocolMapper":"oidc-usermodel-realm-role-mapper","config":{"multivalued":"true","userinfo.token.claim":"true","id.token.claim":"true","access.token.claim":"true","claim.name":"roles","jsonType.label":"String"}}' > /dev/null 2>&1 - echo "✅ Mapper configurĂ©" -else - echo "⚠ Scope non trouvĂ©, mapper Ă  configurer manuellement" -fi - -# CrĂ©er l'utilisateur test -echo "" -echo "8. CrĂ©ation de l'utilisateur test..." -curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/users" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"username":"test@unionflow.dev","email":"test@unionflow.dev","firstName":"Test","lastName":"User","enabled":true,"emailVerified":true}' > /dev/null 2>&1 - -# RĂ©cupĂ©rer l'ID de l'utilisateur -USER_JSON=$(curl -s -X GET "$KEYCLOAK_URL/admin/realms/$REALM_NAME/users?username=test@unionflow.dev" \ - -H "Authorization: Bearer $TOKEN") - -USER_ID=$(echo "$USER_JSON" | grep -o '"id":"[^"]*' | head -1 | cut -d'"' -f4) - -if [ -n "$USER_ID" ]; then - # DĂ©finir le mot de passe - curl -s -X PUT "$KEYCLOAK_URL/admin/realms/$REALM_NAME/users/$USER_ID/reset-password" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"type":"password","value":"test123","temporary":false}' > /dev/null 2>&1 - echo "✅ Utilisateur créé (test@unionflow.dev / test123)" - - # RĂ©cupĂ©rer et assigner les rĂŽles - ROLES_JSON=$(curl -s -X GET "$KEYCLOAK_URL/admin/realms/$REALM_NAME/roles" \ - -H "Authorization: Bearer $TOKEN") - - ROLE_MEMBRE=$(echo "$ROLES_JSON" | grep -B2 '"name":"MEMBRE"' | grep '"id"' | grep -o '"id":"[^"]*' | cut -d'"' -f4) - ROLE_ADMIN=$(echo "$ROLES_JSON" | grep -B2 '"name":"ADMIN_ENTITE"' | grep '"id"' | grep -o '"id":"[^"]*' | cut -d'"' -f4) - - if [ -n "$ROLE_MEMBRE" ]; then - curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/users/$USER_ID/role-mappings/realm" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d "[{\"id\":\"$ROLE_MEMBRE\",\"name\":\"MEMBRE\"}]" > /dev/null 2>&1 - echo " ✅ RĂŽle MEMBRE assignĂ©" - fi - - if [ -n "$ROLE_ADMIN" ]; then - curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/users/$USER_ID/role-mappings/realm" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d "[{\"id\":\"$ROLE_ADMIN\",\"name\":\"ADMIN_ENTITE\"}]" > /dev/null 2>&1 - echo " ✅ RĂŽle ADMIN_ENTITE assignĂ©" - fi -else - echo "⚠ Utilisateur non trouvĂ©" -fi - -# Sauvegarder dans .env -echo "" -echo "9. Sauvegarde de la configuration..." -cat > .env << EOF -# Configuration Keycloak gĂ©nĂ©rĂ©e automatiquement -# Date: $(date) - -KEYCLOAK_CLIENT_SECRET=$CLIENT_SECRET -UNIONFLOW_BACKEND_URL=http://localhost:8085 - -# Informations de connexion pour tests -# Username: test@unionflow.dev -# Password: test123 -EOF - -echo "✅ Fichier .env créé" - -# RĂ©sumĂ© -echo "" -echo "========================================================" -echo "✅ Configuration terminĂ©e avec succĂšs!" -echo "========================================================" -echo "" -echo "📋 RĂ©sumĂ©:" -echo " - Realm: $REALM_NAME" -echo " - Client ID: $CLIENT_ID" -echo " - Client Secret: $CLIENT_SECRET" -echo " - Utilisateur: test@unionflow.dev / test123" -echo "" -echo "🚀 Prochaines Ă©tapes:" -echo " 1. Lancez: ./start-local.sh (ou start-local.bat)" -echo " 2. AccĂ©dez Ă : http://localhost:8086" -echo " 3. Connectez-vous avec test@unionflow.dev / test123" -echo "" diff --git a/roles.json b/roles.json deleted file mode 100644 index edc479d..0000000 --- a/roles.json +++ /dev/null @@ -1 +0,0 @@ -{"error":"HTTP 401 Unauthorized"} \ No newline at end of file diff --git a/scopes.json b/scopes.json deleted file mode 100644 index 2eeb330..0000000 --- a/scopes.json +++ /dev/null @@ -1 +0,0 @@ -[{"id":"ca43f64e-d864-48c9-b969-834468690fbb","name":"web-origins"},{"id":"79b0a5da-b22c-4f42-82e1-17ca3e845e98","name":"acr"},{"id":"630b7e04-b7a8-487e-ab4e-8ef569f2ee30","name":"profile"},{"id":"9706160c-2b0c-4308-af92-b363d9f0d461","name":"roles"},{"id":"eb2f9842-0bba-45b1-9ffa-60b621937d6a","name":"basic"},{"id":"459abd14-dc0c-49d9-8248-445731115816","name":"email"}] \ No newline at end of file diff --git a/src/main/java/dev/lions/unionflow/client/api/dto/MembreDashboardResponse.java b/src/main/java/dev/lions/unionflow/client/api/dto/MembreDashboardResponse.java new file mode 100644 index 0000000..eefab52 --- /dev/null +++ b/src/main/java/dev/lions/unionflow/client/api/dto/MembreDashboardResponse.java @@ -0,0 +1,35 @@ +package dev.lions.unionflow.client.api.dto; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * DTO received from the backend for the member dashboard synthesis. + */ +public record MembreDashboardResponse( + String prenom, + String nom, + LocalDate dateInscription, + + // Cotisations + BigDecimal mesCotisationsPaiement, + String statutCotisations, + Integer tauxCotisationsPerso, + + // Epargne + BigDecimal monSoldeEpargne, + BigDecimal evolutionEpargneNombre, + String evolutionEpargne, + Integer objectifEpargne, + + // Evenements + Integer mesEvenementsInscrits, + Integer evenementsAVenir, + Integer tauxParticipationPerso, + + // Aides + Integer mesDemandesAide, + Integer aidesEnCours, + Integer tauxAidesApprouvees) implements Serializable { +} diff --git a/src/main/java/dev/lions/unionflow/client/bean/MenuBean.java b/src/main/java/dev/lions/unionflow/client/bean/MenuBean.java index a2dce22..513a7ef 100644 --- a/src/main/java/dev/lions/unionflow/client/bean/MenuBean.java +++ b/src/main/java/dev/lions/unionflow/client/bean/MenuBean.java @@ -130,12 +130,22 @@ public class MenuBean implements Serializable { /** * Annuaire des Membres - Consultation de la liste (pas de modification) - * Visible Ă  partir de MEMBRE_ACTIF (pour crĂ©er du lien social) + * Visible pour les responsables et bureau SEULEMENT (PAS pour MEMBRE_ACTIF) + * + * Raison mĂ©tier: Un membre simple n'a gĂ©nĂ©ralement pas besoin de voir la liste complĂšte + * des autres membres. Cela peut poser des problĂšmes de: + * - RGPD: Exposition non justifiĂ©e de donnĂ©es personnelles + * - SĂ©curitĂ©: Risque de spam/phishing entre membres + * - UX: Surcharge du menu pour un usage limitĂ© + * + * Si l'organisation souhaite activer l'annuaire pour MEMBRE_ACTIF, cela doit ĂȘtre + * fait via configuration explicite (future Phase 3). */ public boolean isAnnuaireMembresVisible() { return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE", "TRESORIER", "RESPONSABLE_SOCIAL", "RESPONSABLE_EVENEMENTS", "RESPONSABLE_CREDIT", - "MEMBRE_BUREAU", "MEMBRE_ACTIF"); + "MEMBRE_BUREAU"); + // MEMBRE_ACTIF retirĂ© intentionnellement pour raisons UX et RGPD } /** diff --git a/src/main/java/dev/lions/unionflow/client/bean/PageSecurityBean.java b/src/main/java/dev/lions/unionflow/client/bean/PageSecurityBean.java new file mode 100644 index 0000000..514efdc --- /dev/null +++ b/src/main/java/dev/lions/unionflow/client/bean/PageSecurityBean.java @@ -0,0 +1,179 @@ +package dev.lions.unionflow.client.bean; + +import io.quarkus.security.identity.SecurityIdentity; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.faces.context.FacesContext; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import org.jboss.logging.Logger; + +import java.io.IOException; + +/** + * Bean centralisĂ© pour la sĂ©curisation des pages basĂ©e sur les rĂŽles. + * Fournit des mĂ©thodes rĂ©utilisables pour vĂ©rifier l'accĂšs et rediriger si nĂ©cessaire. + * + *

Principe DRY/WOU : Une seule implĂ©mentation de la logique de sĂ©curitĂ©, + * rĂ©utilisĂ©e par toutes les pages via un composant Facelet. + * + * @author UnionFlow Team + * @version 1.0 + * @since 2026-03-02 + */ +@Named("pageSecurityBean") +@ApplicationScoped +public class PageSecurityBean { + + private static final Logger LOG = Logger.getLogger(PageSecurityBean.class); + private static final String ACCESS_DENIED_PAGE = "/pages/secure/access-denied.xhtml"; + + @Inject + SecurityIdentity securityIdentity; + + @Inject + MenuBean menuBean; + + /** + * VĂ©rifie si l'utilisateur a le droit d'accĂ©der Ă  une page donnĂ©e. + * Si non autorisĂ©, redirige vers la page access-denied. + * + * @param allowedRoles RĂŽles autorisĂ©s sĂ©parĂ©s par des virgules (ex: "ADMIN,TRESORIER") + * @return true si autorisĂ©, false sinon (aprĂšs redirection) + */ + public boolean checkAccessOrRedirect(String allowedRoles) { + if (allowedRoles == null || allowedRoles.trim().isEmpty()) { + // Aucune restriction = accĂšs autorisĂ© pour tous les utilisateurs authentifiĂ©s + return !securityIdentity.isAnonymous(); + } + + String[] roles = allowedRoles.split(","); + boolean hasAccess = false; + + for (String role : roles) { + String trimmedRole = role.trim(); + if (hasRole(trimmedRole)) { + hasAccess = true; + break; + } + } + + if (!hasAccess) { + LOG.warnf("AccĂšs refusĂ© pour l'utilisateur %s Ă  une page nĂ©cessitant les rĂŽles: %s", + securityIdentity.getPrincipal().getName(), allowedRoles); + redirectToAccessDenied(); + return false; + } + + return true; + } + + /** + * VĂ©rifie si l'utilisateur possĂšde un rĂŽle spĂ©cifique. + * + * @param role Le rĂŽle Ă  vĂ©rifier + * @return true si l'utilisateur a ce rĂŽle + */ + private boolean hasRole(String role) { + return switch (role) { + case "SUPER_ADMIN" -> menuBean.isSuperAdmin(); + case "ADMIN_ORGANISATION", "ADMIN" -> menuBean.isAdminOrganisation() || menuBean.isSuperAdmin(); + case "TRESORIER" -> menuBean.isTresorier() || menuBean.isAdminOrganisation() || menuBean.isSuperAdmin(); + case "SECRETAIRE" -> menuBean.isSecretaire() || menuBean.isAdminOrganisation() || menuBean.isSuperAdmin(); + case "RESPONSABLE_SOCIAL" -> menuBean.isResponsableSocial() || menuBean.isAdminOrganisation() || menuBean.isSuperAdmin(); + case "RESPONSABLE_EVENEMENTS" -> menuBean.isResponsableEvenements() || menuBean.isAdminOrganisation() || menuBean.isSuperAdmin(); + case "RESPONSABLE_CREDIT" -> menuBean.isResponsableCredit() || menuBean.isAdminOrganisation() || menuBean.isSuperAdmin(); + case "MEMBRE_BUREAU" -> menuBean.isMembreBureau() || menuBean.isAdminOrganisation() || menuBean.isSuperAdmin(); + case "MEMBRE_ACTIF" -> menuBean.isMembreActif() || menuBean.isMembreBureau() || menuBean.isAdminOrganisation() || menuBean.isSuperAdmin(); + case "MEMBRE_SIMPLE" -> menuBean.isMembreSimple() || menuBean.isMembreActif() || menuBean.isMembreBureau() || menuBean.isAdminOrganisation() || menuBean.isSuperAdmin(); + case "ALL" -> !securityIdentity.isAnonymous(); // Tous les utilisateurs authentifiĂ©s + default -> { + LOG.warnf("RĂŽle inconnu: %s", role); + yield false; + } + }; + } + + /** + * Redirige vers la page d'accĂšs refusĂ©. + */ + private void redirectToAccessDenied() { + try { + FacesContext ctx = FacesContext.getCurrentInstance(); + if (ctx != null && !ctx.getResponseComplete()) { + String contextPath = ctx.getExternalContext().getRequestContextPath(); + ctx.getExternalContext().redirect(contextPath + ACCESS_DENIED_PAGE); + ctx.responseComplete(); + } + } catch (IOException e) { + LOG.error("Erreur lors de la redirection vers access-denied", e); + } + } + + // ═══════════════════════════════════════════════════════════════════════ + // MĂ©thodes helper pour vĂ©rifications rapides (utilisĂ©es dans les pages) + // ═══════════════════════════════════════════════════════════════════════ + + /** + * VĂ©rifie si l'utilisateur peut gĂ©rer les membres. + * @return true si SECRETAIRE, ADMIN, ou SUPER_ADMIN + */ + public boolean canManageMembers() { + return hasRole("SECRETAIRE"); + } + + /** + * VĂ©rifie si l'utilisateur peut gĂ©rer les finances. + * @return true si TRESORIER, ADMIN, ou SUPER_ADMIN + */ + public boolean canManageFinances() { + return hasRole("TRESORIER"); + } + + /** + * VĂ©rifie si l'utilisateur peut gĂ©rer les Ă©vĂ©nements. + * @return true si RESPONSABLE_EVENEMENTS, SECRETAIRE, ADMIN, ou SUPER_ADMIN + */ + public boolean canManageEvents() { + return hasRole("RESPONSABLE_EVENEMENTS"); + } + + /** + * VĂ©rifie si l'utilisateur peut gĂ©rer les aides sociales. + * @return true si RESPONSABLE_SOCIAL, ADMIN, ou SUPER_ADMIN + */ + public boolean canManageSocialAid() { + return hasRole("RESPONSABLE_SOCIAL"); + } + + /** + * VĂ©rifie si l'utilisateur peut voir les rapports financiers. + * @return true si TRESORIER, SECRETAIRE, ADMIN, ou SUPER_ADMIN + */ + public boolean canViewFinancialReports() { + return hasRole("TRESORIER") || hasRole("SECRETAIRE"); + } + + /** + * VĂ©rifie si l'utilisateur peut exporter des donnĂ©es. + * @return true si TRESORIER, SECRETAIRE, ADMIN, ou SUPER_ADMIN + */ + public boolean canExportData() { + return hasRole("TRESORIER") || hasRole("SECRETAIRE"); + } + + /** + * VĂ©rifie si l'utilisateur est un simple membre (MEMBRE_ACTIF uniquement). + * @return true si MEMBRE_ACTIF mais pas d'autre rĂŽle administratif + */ + public boolean isSimpleMember() { + return menuBean.isMembreActif() && + !menuBean.isSecretaire() && + !menuBean.isTresorier() && + !menuBean.isResponsableSocial() && + !menuBean.isResponsableEvenements() && + !menuBean.isResponsableCredit() && + !menuBean.isMembreBureau() && + !menuBean.isAdminOrganisation() && + !menuBean.isSuperAdmin(); + } +} diff --git a/src/main/java/dev/lions/unionflow/client/converter/UuidConverter.java b/src/main/java/dev/lions/unionflow/client/converter/UuidConverter.java new file mode 100644 index 0000000..f890da8 --- /dev/null +++ b/src/main/java/dev/lions/unionflow/client/converter/UuidConverter.java @@ -0,0 +1,37 @@ +package dev.lions.unionflow.client.converter; + +import jakarta.faces.component.UIComponent; +import jakarta.faces.context.FacesContext; +import jakarta.faces.convert.Converter; +import jakarta.faces.convert.ConverterException; +import jakarta.faces.convert.FacesConverter; + +import java.util.UUID; + +/** + * Convertisseur JSF pour les paramĂštres de vue et champs liĂ©s Ă  {@link UUID}. + * Permet la conversion String ↔ UUID dans les f:viewParam et composants d'entrĂ©e. + */ +@FacesConverter(value = "uuidConverter", managed = true) +public class UuidConverter implements Converter { + + @Override + public UUID getAsObject(FacesContext context, UIComponent component, String value) { + if (value == null || value.isBlank()) { + return null; + } + try { + return UUID.fromString(value.trim()); + } catch (IllegalArgumentException e) { + throw new ConverterException("Identifiant invalide : " + value, e); + } + } + + @Override + public String getAsString(FacesContext context, UIComponent component, UUID value) { + if (value == null) { + return ""; + } + return value.toString(); + } +} diff --git a/src/main/java/dev/lions/unionflow/client/exception/ViewExpiredExceptionHandler.java b/src/main/java/dev/lions/unionflow/client/exception/ViewExpiredExceptionHandler.java index ec6b383..c183704 100644 --- a/src/main/java/dev/lions/unionflow/client/exception/ViewExpiredExceptionHandler.java +++ b/src/main/java/dev/lions/unionflow/client/exception/ViewExpiredExceptionHandler.java @@ -1,5 +1,6 @@ package dev.lions.unionflow.client.exception; +import jakarta.el.PropertyNotFoundException; import jakarta.faces.FacesException; import jakarta.faces.application.ViewExpiredException; import jakarta.faces.context.ExceptionHandler; @@ -12,28 +13,57 @@ import java.util.logging.Level; import java.util.logging.Logger; public class ViewExpiredExceptionHandler extends ExceptionHandlerWrapper { - + private static final Logger LOG = Logger.getLogger(ViewExpiredExceptionHandler.class.getName()); private ExceptionHandler wrapped; - + public ViewExpiredExceptionHandler(ExceptionHandler wrapped) { this.wrapped = wrapped; } - + @Override public ExceptionHandler getWrapped() { return wrapped; } - + + private static boolean isPropertyNotFound(Throwable t) { + for (Throwable x = t; x != null; x = x.getCause()) { + if (x instanceof PropertyNotFoundException) return true; + } + return false; + } + @Override public void handle() throws FacesException { Iterator iterator = getUnhandledExceptionQueuedEvents().iterator(); - + while (iterator.hasNext()) { ExceptionQueuedEvent event = iterator.next(); ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event.getSource(); Throwable throwable = context.getException(); - + + if (isPropertyNotFound(throwable)) { + LOG.log(Level.WARNING, "PropertyNotFoundException EL (Ă©vite page d''erreur TreeMap): {0}", + throwable.getMessage()); + try { + FacesContext fc = FacesContext.getCurrentInstance(); + if (fc != null && fc.getExternalContext() != null && !fc.getResponseComplete()) { + fc.getExternalContext().redirect( + fc.getExternalContext().getRequestContextPath() + "/pages/secure/organisation/liste.xhtml"); + fc.responseComplete(); + } + } catch (Exception e) { + String msg = e != null ? e.getMessage() : ""; + if (msg != null && (msg.contains("already commited") || msg.contains("already committed"))) { + LOG.log(Level.WARNING, "Redirection impossible (rĂ©ponse dĂ©jĂ  envoyĂ©e): {0}", msg); + } else { + LOG.log(Level.SEVERE, "Redirection aprĂšs PropertyNotFoundException: {0}", msg); + } + } + iterator.remove(); + continue; + } + if (throwable instanceof ViewExpiredException) { ViewExpiredException vee = (ViewExpiredException) throwable; FacesContext facesContext = FacesContext.getCurrentInstance(); diff --git a/src/main/java/dev/lions/unionflow/client/service/AssociationService.java b/src/main/java/dev/lions/unionflow/client/service/AssociationService.java index 3dbbc9e..163bdf0 100644 --- a/src/main/java/dev/lions/unionflow/client/service/AssociationService.java +++ b/src/main/java/dev/lions/unionflow/client/service/AssociationService.java @@ -1,5 +1,6 @@ package dev.lions.unionflow.client.service; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse; import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders; import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; @@ -16,41 +17,17 @@ import java.util.UUID; public interface AssociationService { @GET - PagedResponseDTO listerToutes( + PagedResponse listerToutes( @QueryParam("page") @DefaultValue("0") int page, @QueryParam("size") @DefaultValue("1000") int size); - class PagedResponseDTO { - public List data; - public Long total; - public Integer page; - public Integer size; - public Integer totalPages; - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public Long getTotal() { - return total; - } - - public void setTotal(Long total) { - this.total = total; - } - } - @GET @Path("/{id}") OrganisationResponse obtenirParId(@PathParam("id") UUID id); @GET @Path("/recherche") - PagedResponseDTO rechercher( + PagedResponse rechercher( @QueryParam("nom") String nom, @QueryParam("type") String type, @QueryParam("statut") String statut, diff --git a/src/main/java/dev/lions/unionflow/client/service/EvenementService.java b/src/main/java/dev/lions/unionflow/client/service/EvenementService.java index 5fdfade..2ab73b3 100644 --- a/src/main/java/dev/lions/unionflow/client/service/EvenementService.java +++ b/src/main/java/dev/lions/unionflow/client/service/EvenementService.java @@ -1,5 +1,6 @@ package dev.lions.unionflow.client.service; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.evenement.response.EvenementResponse; import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders; import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; @@ -27,7 +28,7 @@ public interface EvenementService { * Liste tous les Ă©vĂ©nements actifs avec pagination */ @GET - Map listerTous( + PagedResponse listerTous( @QueryParam("page") @DefaultValue("0") int page, @QueryParam("size") @DefaultValue("20") int size, @QueryParam("sort") @DefaultValue("dateDebut") String sortField, @@ -66,17 +67,17 @@ public interface EvenementService { */ @GET @Path("/a-venir") - Map listerAVenir( + PagedResponse listerAVenir( @QueryParam("page") @DefaultValue("0") int page, @QueryParam("size") @DefaultValue("10") int size ); - + /** * Recherche d'Ă©vĂ©nements avec filtres */ @GET @Path("/search") - Map rechercher( + PagedResponse rechercher( @QueryParam("titre") String titre, @QueryParam("type") String type, @QueryParam("statut") String statut, @@ -85,24 +86,24 @@ public interface EvenementService { @QueryParam("page") @DefaultValue("0") int page, @QueryParam("size") @DefaultValue("20") int size ); - + /** * Liste les Ă©vĂ©nements par statut */ @GET @Path("/statut/{statut}") - Map listerParStatut( + PagedResponse listerParStatut( @PathParam("statut") String statut, @QueryParam("page") @DefaultValue("0") int page, @QueryParam("size") @DefaultValue("20") int size ); - + /** * Liste les Ă©vĂ©nements par association */ @GET @Path("/association/{associationId}") - Map listerParAssociation( + PagedResponse listerParAssociation( @PathParam("associationId") UUID associationId, @QueryParam("page") @DefaultValue("0") int page, @QueryParam("size") @DefaultValue("20") int size diff --git a/src/main/java/dev/lions/unionflow/client/service/MembreDashboardRestClient.java b/src/main/java/dev/lions/unionflow/client/service/MembreDashboardRestClient.java new file mode 100644 index 0000000..779ab0f --- /dev/null +++ b/src/main/java/dev/lions/unionflow/client/service/MembreDashboardRestClient.java @@ -0,0 +1,23 @@ +package dev.lions.unionflow.client.service; + +import dev.lions.unionflow.client.api.dto.MembreDashboardResponse; +import dev.lions.unionflow.client.security.AuthHeaderFactory; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; + +@RegisterRestClient(configKey = "unionflow-api") +@RegisterClientHeaders(AuthHeaderFactory.class) +@Path("/api/dashboard/membre") +@Consumes(MediaType.APPLICATION_JSON) +@Produces(MediaType.APPLICATION_JSON) +public interface MembreDashboardRestClient { + + @GET + @Path("/me") + MembreDashboardResponse getMonDashboard(); +} diff --git a/src/main/java/dev/lions/unionflow/client/service/MembreService.java b/src/main/java/dev/lions/unionflow/client/service/MembreService.java index db97681..d63a986 100644 --- a/src/main/java/dev/lions/unionflow/client/service/MembreService.java +++ b/src/main/java/dev/lions/unionflow/client/service/MembreService.java @@ -1,5 +1,6 @@ package dev.lions.unionflow.client.service; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.membre.response.MembreResponse; import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders; import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; @@ -16,7 +17,7 @@ import java.util.UUID; public interface MembreService { @GET - List listerTous(); + PagedResponse listerTous(); @GET @Path("/{id}") @@ -26,6 +27,10 @@ public interface MembreService { @Path("/numero/{numeroMembre}") MembreResponse obtenirParNumero(@PathParam("numeroMembre") String numeroMembre); + @GET + @Path("/me") + MembreResponse obtenirMembreConnecte(); + @GET @Path("/search") List rechercher( diff --git a/src/main/java/dev/lions/unionflow/client/view/AdhesionsBean.java b/src/main/java/dev/lions/unionflow/client/view/AdhesionsBean.java index 45ae445..e3e6656 100644 --- a/src/main/java/dev/lions/unionflow/client/view/AdhesionsBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/AdhesionsBean.java @@ -13,9 +13,13 @@ import org.eclipse.microprofile.rest.client.inject.RestClient; import org.jboss.logging.Logger; import dev.lions.unionflow.server.api.dto.membre.response.MembreResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.finance.request.*; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.finance.response.*; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.client.service.AdhesionService; import dev.lions.unionflow.client.service.AssociationService; import dev.lions.unionflow.client.service.ErrorHandlerService; @@ -109,7 +113,7 @@ public class AdhesionsBean implements Serializable { } try { - AssociationService.PagedResponseDTO response = retryService.executeWithRetrySupplier( + PagedResponse response = retryService.executeWithRetrySupplier( () -> associationService.listerToutes(0, 1000), "chargement des associations"); listeAssociations = (response != null && response.getData() != null) ? response.getData() diff --git a/src/main/java/dev/lions/unionflow/client/view/CotisationsGestionBean.java b/src/main/java/dev/lions/unionflow/client/view/CotisationsGestionBean.java index 3fcb39b..6118581 100644 --- a/src/main/java/dev/lions/unionflow/client/view/CotisationsGestionBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/CotisationsGestionBean.java @@ -1,10 +1,15 @@ package dev.lions.unionflow.client.view; import dev.lions.unionflow.server.api.dto.cotisation.request.CreateCotisationRequest; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.cotisation.response.CotisationResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.membre.response.MembreResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.paiement.WaveCheckoutSessionDTO; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.client.service.CotisationService; import dev.lions.unionflow.client.service.AssociationService; import dev.lions.unionflow.client.service.MembreService; @@ -304,7 +309,7 @@ public class CotisationsGestionBean implements Serializable { this.filtres = new FiltresCotisations(); this.listeOrganisations = new ArrayList<>(); try { - AssociationService.PagedResponseDTO response = associationService.listerToutes(0, 1000); + PagedResponse response = associationService.listerToutes(0, 1000); if (response != null && response.getData() != null) { for (OrganisationResponse assoc : response.getData()) { Organisation org = new Organisation(); @@ -340,7 +345,7 @@ public class CotisationsGestionBean implements Serializable { private void chargerTopOrganisations() { this.topOrganisations = new ArrayList<>(); try { - AssociationService.PagedResponseDTO response = associationService.listerToutes(0, 1000); + PagedResponse response = associationService.listerToutes(0, 1000); List associations = response != null && response.getData() != null ? response.getData() : new ArrayList<>(); List cotisationsDTO = cotisationService.listerToutes(0, 1000); diff --git a/src/main/java/dev/lions/unionflow/client/view/DashboardBean.java b/src/main/java/dev/lions/unionflow/client/view/DashboardBean.java index 85a39d9..5aaea6d 100644 --- a/src/main/java/dev/lions/unionflow/client/view/DashboardBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/DashboardBean.java @@ -8,10 +8,12 @@ import dev.lions.unionflow.server.api.dto.dashboard.DashboardStatsResponse; import dev.lions.unionflow.server.api.dto.dashboard.RecentActivityResponse; import dev.lions.unionflow.server.api.dto.dashboard.UpcomingEventResponse; import jakarta.annotation.PostConstruct; +import jakarta.faces.context.FacesContext; import jakarta.faces.view.ViewScoped; import jakarta.inject.Inject; import jakarta.inject.Named; import org.eclipse.microprofile.rest.client.inject.RestClient; +import java.io.IOException; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; @@ -51,10 +53,13 @@ public class DashboardBean implements Serializable { @Inject private UserSession userSession; - + + @Inject + private dev.lions.unionflow.client.bean.MenuBean menuBean; + @Inject ErrorHandlerService errorHandler; - + @Inject RetryService retryService; @@ -134,8 +139,30 @@ public class DashboardBean implements Serializable { @PostConstruct public void init() { + // Charger les donnĂ©es pour les rĂŽles administratifs chargerDonneesBackend(); } + + /** + * MĂ©thode appelĂ©e par f:viewAction pour rediriger les MEMBRE_ACTIF. + * S'exĂ©cute AVANT le rendu de la page (phase INVOKE_APPLICATION). + */ + public void checkAccessAndRedirect() { + if (menuBean != null && menuBean.isMembreActif() && + !menuBean.isSecretaire() && !menuBean.isTresorier() && + !menuBean.isResponsableSocial() && !menuBean.isResponsableEvenements() && + !menuBean.isAdminOrganisation() && !menuBean.isSuperAdmin()) { + try { + FacesContext ctx = FacesContext.getCurrentInstance(); + String redirectUrl = ctx.getExternalContext().getRequestContextPath() + + "/pages/secure/dashboard-membre.xhtml?faces-redirect=true"; + ctx.getExternalContext().redirect(redirectUrl); + ctx.responseComplete(); + } catch (IOException e) { + LOG.error("Erreur lors de la redirection vers dashboard-membre", e); + } + } + } /** * Charge toutes les donnĂ©es depuis le service Dashboard (DRY/WOU - un seul appel) diff --git a/src/main/java/dev/lions/unionflow/client/view/DashboardMembreBean.java b/src/main/java/dev/lions/unionflow/client/view/DashboardMembreBean.java new file mode 100644 index 0000000..b10a8ab --- /dev/null +++ b/src/main/java/dev/lions/unionflow/client/view/DashboardMembreBean.java @@ -0,0 +1,386 @@ +package dev.lions.unionflow.client.view; + +import dev.lions.unionflow.server.api.dto.dashboard.UpcomingEventResponse; +import dev.lions.unionflow.server.api.dto.evenement.response.EvenementResponse; +import dev.lions.unionflow.client.api.dto.MembreDashboardResponse; +import dev.lions.unionflow.client.service.MembreDashboardRestClient; +import dev.lions.unionflow.client.service.ErrorHandlerService; +import dev.lions.unionflow.client.service.RetryService; +import org.eclipse.microprofile.rest.client.inject.RestClient; +import io.quarkus.security.identity.SecurityIdentity; +import jakarta.annotation.PostConstruct; +import jakarta.faces.view.ViewScoped; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import org.jboss.logging.Logger; + +import java.io.IOException; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +/** + * Bean de gestion du dashboard personnel pour les membres actifs + * (MEMBRE_ACTIF). + * Affiche uniquement les donnĂ©es personnelles du membre connectĂ©, pas les + * statistiques globales. + * + * @author UnionFlow Team + * @version 1.0 + * @since 2026-03-02 + */ +@Named("dashboardMembreBean") +@ViewScoped +public class DashboardMembreBean implements Serializable { + + private static final long serialVersionUID = 1L; + private static final Logger LOG = Logger.getLogger(DashboardMembreBean.class); + + @Inject + SecurityIdentity securityIdentity; + + @Inject + ErrorHandlerService errorHandler; + + @Inject + RetryService retryService; + + @Inject + @RestClient + MembreDashboardRestClient dashboardClient; + + // Informations personnelles du membre + private String prenomMembre; + private String nomMembre; + private LocalDate dateInscription; + + // KPI personnels - TOUTES LES VALEURS DOIVENT ÊTRE CALCULÉES DEPUIS LES DONNÉES + // RÉELLES + // IMPORTANT: Ces valeurs par dĂ©faut (0, "", null) sont TEMPORAIRES en attendant + // l'implĂ©mentation des endpoints REST + // Une fois les endpoints implĂ©mentĂ©s, ces valeurs seront REMPLACÉES par les + // donnĂ©es calculĂ©es depuis PostgreSQL + + // Cotisations + private String mesCotisationsPaiement = "0"; // TEMPORAIRE - Sera remplacĂ© par le montant rĂ©el depuis API + private String statutCotisations = "Non disponible"; // TEMPORAIRE - Sera remplacĂ© par "À jour"/"En retard" depuis + // API + private Integer tauxCotisationsPerso = null; // null = pas de jauge affichĂ©e en attendant les donnĂ©es rĂ©elles + + // Épargne + private String monSoldeEpargne = "0"; // TEMPORAIRE - Sera remplacĂ© par le solde rĂ©el depuis API + private String evolutionEpargne = "+0%"; // TEMPORAIRE - Sera remplacĂ© par l'Ă©volution rĂ©elle depuis API + private String evolutionEpargneNombre = "0"; // TEMPORAIRE - Sera remplacĂ© par l'Ă©volution en FCFA depuis API + private Integer objectifEpargne = null; // null = pas de jauge affichĂ©e en attendant les donnĂ©es rĂ©elles + + // ÉvĂ©nements + private Integer mesEvenementsInscrits = 0; // TEMPORAIRE - Sera remplacĂ© par le nombre rĂ©el depuis API + private Integer evenementsAVenir = 0; // TEMPORAIRE - Sera remplacĂ© par le nombre rĂ©el depuis API + private Integer tauxParticipationPerso = null; // null = pas de jauge affichĂ©e en attendant les donnĂ©es rĂ©elles + + // Aides + private Integer mesDemandesAide = 0; // TEMPORAIRE - Sera remplacĂ© par le nombre rĂ©el depuis API + private Integer aidesEnCours = 0; // TEMPORAIRE - Sera remplacĂ© par le nombre rĂ©el depuis API + private Integer tauxAidesApprouvees = null; // null = pas de jauge affichĂ©e en attendant les donnĂ©es rĂ©elles + + // Collections + private List historiqueCotisations = new ArrayList<>(); + private List mesNotifications = new ArrayList<>(); + private List evenementsPublics = new ArrayList<>(); + + @PostConstruct + public void init() { + LOG.info("Initialisation du dashboard personnel membre"); + chargerDonneesPersonnelles(); + } + + /** + * Charge les donnĂ©es personnelles du membre connectĂ© depuis les endpoints REST. + * Les donnĂ©es de synthĂšse sont rĂ©cupĂ©rĂ©es via l'API membre/me. + */ + private void chargerDonneesPersonnelles() { + try { + LOG.info("Chargement des donnĂ©es du dashboard depuis l'API..."); + MembreDashboardResponse data = dashboardClient.getMonDashboard(); + + if (data != null) { + this.prenomMembre = data.prenom(); + this.nomMembre = data.nom(); + this.dateInscription = data.dateInscription(); + + this.mesCotisationsPaiement = formatMontant(data.mesCotisationsPaiement()); + this.statutCotisations = data.statutCotisations() != null ? data.statutCotisations() : "Non disponible"; + this.tauxCotisationsPerso = data.tauxCotisationsPerso(); + + this.monSoldeEpargne = formatMontant(data.monSoldeEpargne()); + this.evolutionEpargneNombre = formatMontant(data.evolutionEpargneNombre()); + this.evolutionEpargne = data.evolutionEpargne() != null ? data.evolutionEpargne() : "+0%"; + this.objectifEpargne = data.objectifEpargne(); + + this.mesEvenementsInscrits = data.mesEvenementsInscrits() != null ? data.mesEvenementsInscrits() : 0; + this.evenementsAVenir = data.evenementsAVenir() != null ? data.evenementsAVenir() : 0; + this.tauxParticipationPerso = data.tauxParticipationPerso(); + + this.mesDemandesAide = data.mesDemandesAide() != null ? data.mesDemandesAide() : 0; + this.aidesEnCours = data.aidesEnCours() != null ? data.aidesEnCours() : 0; + this.tauxAidesApprouvees = data.tauxAidesApprouvees(); + } + + // Pour l'historique et Ă©vĂ©nements, on mock en attendant les endpoints dĂ©taillĂ©s + // si nĂ©cessaires + // ou on laissera vide vu que le dashboard principal est fonctionnel avec les + // KPI + historiqueCotisations = new ArrayList<>(); + mesNotifications = new ArrayList<>(); + evenementsPublics = new ArrayList<>(); + + } catch (Exception e) { + LOG.error("Erreur lors du chargement des donnĂ©es de synthĂšse du dashboard", e); + errorHandler.handleException(e, "lors du chargement de votre dashboard", null); + } + } + + private String formatMontant(BigDecimal montant) { + if (montant == null) + return "0"; + // Format simple, on pourrait rajouter des espaces pour les milliers + return String.format("%,d", montant.longValue()).replace(',', ' '); + } + + // ═══════════════════════════════════════════════════════════════════════ + // Actions + // ═══════════════════════════════════════════════════════════════════════ + + public void payerCotisation() { + try { + // TODO: Rediriger vers la page de paiement des cotisations + LOG.info("Redirection vers paiement cotisation"); + } catch (Exception e) { + errorHandler.handleException(e, "lors de la redirection", null); + } + } + + public void inscrireEvenement() { + try { + // TODO: Rediriger vers /pages/secure/evenement/calendrier.xhtml + // Liste des Ă©vĂ©nements publics oĂč le membre peut s'inscrire + LOG.info("Redirection vers calendrier des Ă©vĂ©nements disponibles"); + } catch (Exception e) { + errorHandler.handleException(e, "lors de la redirection", null); + } + } + + public void demanderAide() { + try { + // TODO: Rediriger vers le formulaire de demande d'aide + LOG.info("Redirection vers demande d'aide"); + } catch (Exception e) { + errorHandler.handleException(e, "lors de la redirection", null); + } + } + + public void allerAMonProfil() { + try { + // TODO: Rediriger vers le profil personnel + LOG.info("Redirection vers mon profil"); + } catch (Exception e) { + errorHandler.handleException(e, "lors de la redirection", null); + } + } + + public void allerAuxEvenements() { + try { + // TODO: Rediriger vers la liste complĂšte des Ă©vĂ©nements + LOG.info("Redirection vers liste Ă©vĂ©nements"); + } catch (Exception e) { + errorHandler.handleException(e, "lors de la redirection", null); + } + } + + public void inscrireAEvenement(String evenementId) { + try { + // TODO: Appeler API pour inscrire le membre Ă  l'Ă©vĂ©nement + LOG.infof("Inscription Ă  l'Ă©vĂ©nement %s", evenementId); + errorHandler.showSuccess("Inscription confirmĂ©e", "Vous ĂȘtes inscrit Ă  cet Ă©vĂ©nement"); + } catch (Exception e) { + errorHandler.handleException(e, "lors de l'inscription Ă  l'Ă©vĂ©nement", null); + } + } + + // ═══════════════════════════════════════════════════════════════════════ + // Helpers + // ═══════════════════════════════════════════════════════════════════════ + + private String extractPrenomFromUsername(String username) { + // Extraction basique depuis le username en attendant l'API + if (username != null && username.contains("@")) { + return username.split("@")[0]; + } + return username != null ? username : "Membre"; + } + + private String extractNomFromUsername(String username) { + // TODO: Appeler GET /api/membres/mon-profil pour rĂ©cupĂ©rer le nom complet + return ""; + } + + // ═══════════════════════════════════════════════════════════════════════ + // DTOs internes + // ═══════════════════════════════════════════════════════════════════════ + + public static class CotisationPerso implements Serializable { + private static final long serialVersionUID = 1L; + + private LocalDate datePaiement; + private LocalDate periode; + private String montant; + private String modePaiement; + private String statut; + + public CotisationPerso(LocalDate datePaiement, LocalDate periode, String montant, + String modePaiement, String statut) { + this.datePaiement = datePaiement; + this.periode = periode; + this.montant = montant; + this.modePaiement = modePaiement; + this.statut = statut; + } + + // Getters + public LocalDate getDatePaiement() { + return datePaiement; + } + + public LocalDate getPeriode() { + return periode; + } + + public String getMontant() { + return montant; + } + + public String getModePaiement() { + return modePaiement; + } + + public String getStatut() { + return statut; + } + } + + public static class NotificationPerso implements Serializable { + private static final long serialVersionUID = 1L; + + private String icon; + private String titre; + private String message; + private LocalDateTime date; + + public NotificationPerso(String icon, String titre, String message, LocalDateTime date) { + this.icon = icon; + this.titre = titre; + this.message = message; + this.date = date; + } + + // Getters + public String getIcon() { + return icon; + } + + public String getTitre() { + return titre; + } + + public String getMessage() { + return message; + } + + public LocalDateTime getDate() { + return date; + } + } + + // ═══════════════════════════════════════════════════════════════════════ + // Getters pour JSF + // ═══════════════════════════════════════════════════════════════════════ + + public String getPrenomMembre() { + return prenomMembre; + } + + public String getNomMembre() { + return nomMembre; + } + + public LocalDate getDateInscription() { + return dateInscription; + } + + public String getMesCotisationsPaiement() { + return mesCotisationsPaiement; + } + + public String getStatutCotisations() { + return statutCotisations; + } + + public Integer getTauxCotisationsPerso() { + return tauxCotisationsPerso; + } + + public String getMonSoldeEpargne() { + return monSoldeEpargne; + } + + public String getEvolutionEpargne() { + return evolutionEpargne; + } + + public String getEvolutionEpargneNombre() { + return evolutionEpargneNombre; + } + + public Integer getObjectifEpargne() { + return objectifEpargne; + } + + public Integer getMesEvenementsInscrits() { + return mesEvenementsInscrits; + } + + public Integer getEvenementsAVenir() { + return evenementsAVenir; + } + + public Integer getTauxParticipationPerso() { + return tauxParticipationPerso; + } + + public Integer getMesDemandesAide() { + return mesDemandesAide; + } + + public Integer getAidesEnCours() { + return aidesEnCours; + } + + public Integer getTauxAidesApprouvees() { + return tauxAidesApprouvees; + } + + public List getHistoriqueCotisations() { + return historiqueCotisations; + } + + public List getMesNotifications() { + return mesNotifications; + } + + public List getEvenementsPublics() { + return evenementsPublics; + } +} diff --git a/src/main/java/dev/lions/unionflow/client/view/DemandesAideBean.java b/src/main/java/dev/lions/unionflow/client/view/DemandesAideBean.java index 469d2ff..5ff754d 100644 --- a/src/main/java/dev/lions/unionflow/client/view/DemandesAideBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/DemandesAideBean.java @@ -109,7 +109,7 @@ public class DemandesAideBean implements Serializable { try { // Charger toutes les demandes depuis le backend pour calculer les Ă©tapes - List demandesDTO = demandeAideService.listerToutes(0, 10000); + List demandesDTO = demandeAideService.listerToutes(0, 1000); // Calculer le nombre de demandes par statut depuis les donnĂ©es rĂ©elles long enAttenteCount = demandesDTO.stream().filter(d -> StatutAide.EN_ATTENTE.equals(d.getStatut())).count(); diff --git a/src/main/java/dev/lions/unionflow/client/view/DemandesBean.java b/src/main/java/dev/lions/unionflow/client/view/DemandesBean.java index e9a9b51..babe657 100644 --- a/src/main/java/dev/lions/unionflow/client/view/DemandesBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/DemandesBean.java @@ -65,7 +65,7 @@ public class DemandesBean implements Serializable { private void initializeDemandes() { demandes = new ArrayList<>(); try { - List dtos = demandeAideService.listerToutes(0, 10000); + List dtos = demandeAideService.listerToutes(0, 1000); if (dtos != null) { for (DemandeAideResponse dto : dtos) { demandes.add(mapToDemande(dto)); diff --git a/src/main/java/dev/lions/unionflow/client/view/EntitesGestionBean.java b/src/main/java/dev/lions/unionflow/client/view/EntitesGestionBean.java index 6bd3440..571e8a3 100644 --- a/src/main/java/dev/lions/unionflow/client/view/EntitesGestionBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/EntitesGestionBean.java @@ -1,7 +1,9 @@ package dev.lions.unionflow.client.view; import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.abonnement.response.AbonnementResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.enums.abonnement.StatutAbonnement; import dev.lions.unionflow.client.service.AssociationService; import dev.lions.unionflow.client.service.CotisationService; @@ -105,7 +107,7 @@ public class EntitesGestionBean implements Serializable { private void initializeStatistiques() { statistiques = new Statistiques(); try { - AssociationService.PagedResponseDTO response = associationService.listerToutes(0, 1000); + PagedResponse response = associationService.listerToutes(0, 1000); List associations = new ArrayList<>(); if (response != null && response.getData() != null) { associations = response.getData(); @@ -138,7 +140,7 @@ public class EntitesGestionBean implements Serializable { private void initializeEntites() { toutesLesEntites = new ArrayList<>(); try { - AssociationService.PagedResponseDTO response = associationService.listerToutes(0, 1000); + PagedResponse response = associationService.listerToutes(0, 1000); if (response != null && response.getData() != null) { for (OrganisationResponse dto : response.getData()) { Entite entite = convertToEntite(dto); diff --git a/src/main/java/dev/lions/unionflow/client/view/EvenementsBean.java b/src/main/java/dev/lions/unionflow/client/view/EvenementsBean.java index 0535b5a..b093712 100644 --- a/src/main/java/dev/lions/unionflow/client/view/EvenementsBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/EvenementsBean.java @@ -114,44 +114,16 @@ public class EvenementsBean implements Serializable { public void chargerEvenements() { try { LOG.info("Chargement des Ă©vĂ©nements depuis le backend"); - Map response = retryService.executeWithRetrySupplier( + var response = retryService.executeWithRetrySupplier( () -> evenementService.listerTous(0, 1000, "dateDebut", "asc"), "chargement de tous les Ă©vĂ©nements" ); - + tousLesEvenements = new ArrayList<>(); - - // Le backend peut retourner soit une liste de DTOs, soit une Map avec "data" - if (response.containsKey("data")) { - @SuppressWarnings("unchecked") - List data = (List) response.get("data"); - - if (data != null) { - for (Object item : data) { - if (item instanceof EvenementResponse) { - tousLesEvenements.add((EvenementResponse) item); - } else if (item instanceof Map) { - @SuppressWarnings("unchecked") - EvenementResponse dto = convertMapToDTO((Map) item); - tousLesEvenements.add(dto); - } - } - } - } else { - // Si la rĂ©ponse est directement une liste - @SuppressWarnings("unchecked") - List data = (List) response.get("evenements"); - if (data != null) { - for (Object item : data) { - if (item instanceof EvenementResponse) { - tousLesEvenements.add((EvenementResponse) item); - } else if (item instanceof Map) { - @SuppressWarnings("unchecked") - EvenementResponse dto = convertMapToDTO((Map) item); - tousLesEvenements.add(dto); - } - } - } + + // RĂ©cupĂ©rer les donnĂ©es depuis PagedResponse + if (response != null && response.getData() != null) { + tousLesEvenements.addAll(response.getData()); } appliquerFiltres(); @@ -170,22 +142,17 @@ public class EvenementsBean implements Serializable { public void chargerEvenementsProchains() { try { LOG.info("Chargement des Ă©vĂ©nements Ă  venir"); - Map response = retryService.executeWithRetrySupplier( + var response = retryService.executeWithRetrySupplier( () -> evenementService.listerAVenir(0, 6), "chargement des Ă©vĂ©nements Ă  venir" ); - - @SuppressWarnings("unchecked") - List> data = (List>) response.get("data"); - - if (data != null) { - evenementsProchains = data.stream() - .map(this::convertMapToDTO) - .collect(Collectors.toList()); + + if (response != null && response.getData() != null) { + evenementsProchains = new ArrayList<>(response.getData()); } else { evenementsProchains = new ArrayList<>(); } - + } catch (Exception e) { LOG.errorf(e, "Erreur lors du chargement des Ă©vĂ©nements Ă  venir"); evenementsProchains = new ArrayList<>(); diff --git a/src/main/java/dev/lions/unionflow/client/view/MembreCotisationBean.java b/src/main/java/dev/lions/unionflow/client/view/MembreCotisationBean.java index 52123fb..a97c897 100644 --- a/src/main/java/dev/lions/unionflow/client/view/MembreCotisationBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/MembreCotisationBean.java @@ -45,20 +45,23 @@ public class MembreCotisationBean implements Serializable { @Inject @RestClient private MembreService membreService; - + @Inject @RestClient private CotisationService cotisationService; - + @Inject @RestClient private ExportClientService exportService; - + @Inject ErrorHandlerService errorHandler; - + @Inject RetryService retryService; + + @Inject + io.quarkus.security.identity.SecurityIdentity securityIdentity; // ID du membre (depuis viewParam) private UUID membreId; @@ -135,14 +138,43 @@ public class MembreCotisationBean implements Serializable { } } } - + + // Si toujours null, auto-dĂ©tecter le membre connectĂ© (Pattern DRY depuis DashboardMembreBean) + if (membreId == null) { + try { + String username = securityIdentity.getPrincipal().getName(); + LOG.infof("Auto-dĂ©tection du membre connectĂ©: %s", username); + + // RĂ©cupĂ©rer directement le membre connectĂ© via l'endpoint /me + MembreResponse membreConnecte = retryService.executeWithRetrySupplier( + () -> membreService.obtenirMembreConnecte(), + "rĂ©cupĂ©ration du membre connectĂ©" + ); + + if (membreConnecte != null) { + membreId = membreConnecte.getId(); + numeroMembre = membreConnecte.getNumeroMembre(); + LOG.infof("Membre connectĂ© dĂ©tectĂ©: %s (%s)", numeroMembre, membreId); + } else { + LOG.warnf("Aucun membre trouvĂ© pour l'utilisateur: %s", username); + errorHandler.showWarning("Attention", + "Impossible de charger vos cotisations. Veuillez contacter l'administrateur."); + initialiserDonneesVides(); + return; + } + } catch (Exception e) { + LOG.errorf(e, "Erreur lors de l'auto-dĂ©tection du membre connectĂ©"); + errorHandler.handleException(e, "lors du chargement de vos cotisations", null); + initialiserDonneesVides(); + return; + } + } + if (membreId != null) { chargerMembre(); chargerCotisations(); calculerStatistiques(); } else { - LOG.warn("Aucun membreId fourni, impossible de charger les cotisations"); - errorHandler.showWarning("Attention", "Aucun membre sĂ©lectionnĂ©"); initialiserDonneesVides(); } } diff --git a/src/main/java/dev/lions/unionflow/client/view/MembreExportBean.java b/src/main/java/dev/lions/unionflow/client/view/MembreExportBean.java index 56df7ed..aaf9584 100644 --- a/src/main/java/dev/lions/unionflow/client/view/MembreExportBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/MembreExportBean.java @@ -5,8 +5,11 @@ import dev.lions.unionflow.client.service.AssociationService; import dev.lions.unionflow.client.service.ErrorHandlerService; import dev.lions.unionflow.client.service.RetryService; import dev.lions.unionflow.server.api.dto.organisation.request.*; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.organisation.response.*; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import lombok.Getter; import lombok.Setter; import jakarta.faces.view.ViewScoped; @@ -88,7 +91,7 @@ public class MembreExportBean implements Serializable { private void chargerOrganisations() { organisationsDisponibles = new ArrayList<>(); try { - AssociationService.PagedResponseDTO response = retryService.executeWithRetrySupplier( + PagedResponse response = retryService.executeWithRetrySupplier( () -> associationService.listerToutes(0, 1000), "chargement des organisations pour export"); List associations = (response != null && response.getData() != null) ? response.getData() diff --git a/src/main/java/dev/lions/unionflow/client/view/MembreImportBean.java b/src/main/java/dev/lions/unionflow/client/view/MembreImportBean.java index 242ce09..261d4f8 100644 --- a/src/main/java/dev/lions/unionflow/client/view/MembreImportBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/MembreImportBean.java @@ -6,8 +6,11 @@ import dev.lions.unionflow.client.service.AssociationService; import dev.lions.unionflow.client.service.ErrorHandlerService; import dev.lions.unionflow.client.service.RetryService; import dev.lions.unionflow.server.api.dto.organisation.request.*; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.organisation.response.*; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import lombok.Getter; import lombok.Setter; import jakarta.faces.view.ViewScoped; @@ -71,7 +74,7 @@ public class MembreImportBean implements Serializable { private void chargerOrganisations() { organisationsDisponibles = new ArrayList<>(); try { - AssociationService.PagedResponseDTO response = retryService.executeWithRetrySupplier( + PagedResponse response = retryService.executeWithRetrySupplier( () -> associationService.listerToutes(0, 1000), "chargement des organisations pour import"); List associations = (response != null && response.getData() != null) ? response.getData() diff --git a/src/main/java/dev/lions/unionflow/client/view/MembreInscriptionBean.java b/src/main/java/dev/lions/unionflow/client/view/MembreInscriptionBean.java index 11209ae..1f0d7ba 100644 --- a/src/main/java/dev/lions/unionflow/client/view/MembreInscriptionBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/MembreInscriptionBean.java @@ -1,7 +1,9 @@ package dev.lions.unionflow.client.view; import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.membre.response.MembreResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.client.service.MembreService; import dev.lions.unionflow.client.service.AssociationService; import dev.lions.unionflow.client.service.ErrorHandlerService; @@ -120,7 +122,7 @@ public class MembreInscriptionBean implements Serializable { // Charger les organisations actives (DRY/WOU - utilise AssociationService) try { - AssociationService.PagedResponseDTO response = retryService.executeWithRetrySupplier( + PagedResponse response = retryService.executeWithRetrySupplier( () -> associationService.listerToutes(0, 1000), "chargement des associations"); organisationsDisponibles = (response != null && response.getData() != null) ? response.getData() diff --git a/src/main/java/dev/lions/unionflow/client/view/MembreLazyDataModel.java b/src/main/java/dev/lions/unionflow/client/view/MembreLazyDataModel.java index 6a8a958..34d92c6 100644 --- a/src/main/java/dev/lions/unionflow/client/view/MembreLazyDataModel.java +++ b/src/main/java/dev/lions/unionflow/client/view/MembreLazyDataModel.java @@ -53,7 +53,7 @@ public class MembreLazyDataModel extends LazyDataModelBase all = membreService.listerTous(); + List all = membreService.listerTous().getData(); if (all == null || all.isEmpty()) return List.of(); int toIndex = Math.min(first + pageSize, all.size()); // Conversion MembreResponse → MembreSummaryResponse @@ -71,7 +71,9 @@ public class MembreLazyDataModel extends LazyDataModelBase all = membreService.listerTous(); + List all = membreService.listerTous().getData(); return all != null ? all.size() : 0; } diff --git a/src/main/java/dev/lions/unionflow/client/view/MembreListeBean.java b/src/main/java/dev/lions/unionflow/client/view/MembreListeBean.java index 3b756a7..2b3d281 100644 --- a/src/main/java/dev/lions/unionflow/client/view/MembreListeBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/MembreListeBean.java @@ -1,6 +1,7 @@ package dev.lions.unionflow.client.view; import dev.lions.unionflow.server.api.dto.membre.response.MembreResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.client.service.MembreService; import dev.lions.unionflow.client.service.AssociationService; import dev.lions.unionflow.client.service.NotificationService; @@ -8,7 +9,9 @@ import dev.lions.unionflow.client.service.CotisationService; import dev.lions.unionflow.client.service.ErrorHandlerService; import dev.lions.unionflow.client.service.RetryService; import dev.lions.unionflow.server.api.dto.membre.MembreSearchCriteria; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; @@ -108,6 +111,8 @@ public class MembreListeBean implements Serializable { // === Contact membre === private MembreResponse membreAContacter; + /** Membre en attente de confirmation de suspension (flux explicite). */ + private MembreResponse membrePourSuspension; private String messageContact; private String sujetContact; private boolean dialogContactVisible = false; @@ -198,7 +203,7 @@ public class MembreListeBean implements Serializable { private void chargerOrganisations() { organisationsDisponibles = new ArrayList<>(); try { - AssociationService.PagedResponseDTO response = retryService.executeWithRetrySupplier( + PagedResponse response = retryService.executeWithRetrySupplier( () -> associationService.listerToutes(0, 1000), "chargement des organisations"); if (response != null && response.getData() != null) { @@ -396,6 +401,25 @@ public class MembreListeBean implements Serializable { // ACTIONS SUR UN MEMBRE // ======================================================================== + /** + * PrĂ©pare la suspension (ouvre le dialogue de confirmation). + */ + public void preparerSuspendre(MembreResponse membre) { + this.membrePourSuspension = membre; + } + + /** + * Confirme et exĂ©cute la suspension aprĂšs clic sur « Oui » dans le dialogue. + */ + public void confirmerSuspendre() { + if (membrePourSuspension == null) { + return; + } + MembreResponse m = membrePourSuspension; + membrePourSuspension = null; + suspendreMembre(m); + } + public void suspendreMembre(MembreResponse membre) { try { retryService.executeWithRetrySupplier( diff --git a/src/main/java/dev/lions/unionflow/client/view/MembreRechercheBean.java b/src/main/java/dev/lions/unionflow/client/view/MembreRechercheBean.java index 0a761bb..097bf9b 100644 --- a/src/main/java/dev/lions/unionflow/client/view/MembreRechercheBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/MembreRechercheBean.java @@ -1,6 +1,7 @@ package dev.lions.unionflow.client.view; import dev.lions.unionflow.server.api.dto.membre.response.MembreResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.client.service.MembreService; import dev.lions.unionflow.client.service.AssociationService; import jakarta.enterprise.context.SessionScoped; @@ -67,7 +68,7 @@ public class MembreRechercheBean implements Serializable { private void initializeStatistiques() { statistiques = new Statistiques(); try { - List membres = membreService.listerTous(); + List membres = membreService.listerTous().getData(); statistiques.setTotalMembres(membres.size()); } catch (Exception e) { LOG.errorf(e, "Erreur lors du calcul des statistiques"); @@ -83,7 +84,7 @@ public class MembreRechercheBean implements Serializable { selectedMembres = new ArrayList<>(); try { - List membresDTO = membreService.listerTous(); + List membresDTO = membreService.listerTous().getData(); for (MembreResponse dto : membresDTO) { Membre membre = convertToMembre(dto); tousLesMembres.add(membre); @@ -118,7 +119,7 @@ public class MembreRechercheBean implements Serializable { private void initializeEntites() { entitesDisponibles = new ArrayList<>(); try { - AssociationService.PagedResponseDTO response = associationService + PagedResponse response = associationService .listerToutes(0, 1000); if (response != null && response.getData() != null) { for (dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse assoc : response.getData()) { diff --git a/src/main/java/dev/lions/unionflow/client/view/MesCotisationsPaiementBean.java b/src/main/java/dev/lions/unionflow/client/view/MesCotisationsPaiementBean.java new file mode 100644 index 0000000..89684bf --- /dev/null +++ b/src/main/java/dev/lions/unionflow/client/view/MesCotisationsPaiementBean.java @@ -0,0 +1,574 @@ +package dev.lions.unionflow.client.view; + +import dev.lions.unionflow.server.api.dto.cotisation.response.CotisationResponse; +import dev.lions.unionflow.server.api.dto.membre.response.MembreResponse; +import dev.lions.unionflow.server.api.dto.paiement.response.PaiementResponse; +import dev.lions.unionflow.client.service.CotisationService; +import dev.lions.unionflow.client.service.ErrorHandlerService; +import dev.lions.unionflow.client.service.ExportClientService; +import dev.lions.unionflow.client.service.MembreService; +import dev.lions.unionflow.client.service.RetryService; +import io.quarkus.security.identity.SecurityIdentity; +import jakarta.annotation.PostConstruct; +import jakarta.faces.context.ExternalContext; +import jakarta.faces.view.ViewScoped; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.jboss.logging.Logger; + +import java.io.OutputStream; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +/** + * Bean pour le paiement des cotisations du membre connectĂ© (MEMBRE_ACTIF). + * Affiche uniquement les cotisations personnelles, pas les donnĂ©es admin. + * + * Pattern DRY: RĂ©utilise la logique de MembreCotisationBean et DashboardMembreBean + * + * @author UnionFlow Team + * @version 1.0 + * @since 2026-03-02 + */ +@Named("mesCotisationsPaiementBean") +@ViewScoped +public class MesCotisationsPaiementBean implements Serializable { + + private static final long serialVersionUID = 1L; + private static final Logger LOG = Logger.getLogger(MesCotisationsPaiementBean.class); + private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd/MM/yyyy"); + + @Inject + SecurityIdentity securityIdentity; + + @Inject + @RestClient + private MembreService membreService; + + @Inject + @RestClient + private CotisationService cotisationService; + + @Inject + @RestClient + private ExportClientService exportService; + + @Inject + ErrorHandlerService errorHandler; + + @Inject + RetryService retryService; + + // Informations du membre connectĂ© + private UUID membreId; + private String numeroMembre; + private MembreResponse membre; + + // KPI personnels - Cotisations Ă  payer + private Integer cotisationsEnAttente = 0; + private String montantDu = "0 FCFA"; + private String prochaineEcheance = "-"; + private String totalPaye = "0 FCFA"; + private Integer anneeEnCours = LocalDate.now().getYear(); + + // Listes + private List mesCotisationsEnAttente = new ArrayList<>(); + private List derniersPaiements = new ArrayList<>(); + + // Formulaires dialogs + // Dialog Paiement en Ligne + private UUID cotisationSelectionneeId; + private String methodePaiementChoisie = "WAVE"; + private String numeroTelephone; + + // Dialog Paiement Manuel + private String methodePaiementManuel = "ESPECES"; + private String referencePaiementManuel; + private String commentairePaiement; + + // Configuration organisation (TODO: charger depuis API) + private boolean paiementManuelActive = true; + + @PostConstruct + public void init() { + LOG.info("Initialisation du bean de paiement des cotisations personnelles"); + detecterMembreConnecte(); + if (membreId != null) { + chargerDonnees(); + } + } + + /** + * Auto-dĂ©tection du membre connectĂ© (Pattern DRY depuis DashboardMembreBean) + */ + private void detecterMembreConnecte() { + try { + String username = securityIdentity.getPrincipal().getName(); + LOG.infof("Auto-dĂ©tection du membre connectĂ©: %s", username); + + // RĂ©cupĂ©rer directement le membre connectĂ© via l'endpoint /me + membre = retryService.executeWithRetrySupplier( + () -> membreService.obtenirMembreConnecte(), + "rĂ©cupĂ©ration du membre connectĂ©" + ); + + if (membre != null) { + membreId = membre.getId(); + numeroMembre = membre.getNumeroMembre(); + LOG.infof("Membre connectĂ© dĂ©tectĂ©: %s (%s)", numeroMembre, membreId); + } else { + LOG.warnf("Aucun membre trouvĂ© pour l'utilisateur: %s", username); + errorHandler.showWarning("Attention", + "Impossible de charger vos cotisations. Veuillez contacter l'administrateur."); + } + } catch (Exception e) { + LOG.errorf(e, "Erreur lors de l'auto-dĂ©tection du membre connectĂ©"); + errorHandler.handleException(e, "lors du chargement de vos cotisations", null); + } + } + + /** + * Charge toutes les donnĂ©es personnelles de cotisations et paiements + */ + private void chargerDonnees() { + chargerCotisationsEnAttente(); + chargerDerniersPaiements(); + calculerKPI(); + } + + /** + * Charge les cotisations en attente du membre connectĂ© + * Pattern DRY: RĂ©utilise la logique de MembreCotisationBean.chargerCotisations() + */ + private void chargerCotisationsEnAttente() { + try { + // TODO: CrĂ©er endpoint GET /api/cotisations/mes-cotisations/en-attente + // Pour l'instant, utiliser l'endpoint existant avec filtre statut + List cotisationsDTO = retryService.executeWithRetrySupplier( + () -> cotisationService.rechercher( + membreId, + "EN_ATTENTE", // Statut + null, // Type + anneeEnCours, + null, // Mois + 0, + 100 + ), + "chargement des cotisations en attente" + ); + + mesCotisationsEnAttente = new ArrayList<>(); + for (CotisationResponse dto : cotisationsDTO) { + CotisationPerso cotisation = new CotisationPerso(); + cotisation.setId(dto.getId()); + cotisation.setReference(dto.getNumeroReference() != null ? dto.getNumeroReference() : ""); + cotisation.setType(dto.getTypeCotisation() != null ? dto.getTypeCotisation() : "MENSUELLE"); + cotisation.setPeriode(formaterPeriode(dto.getDateEcheance())); + cotisation.setMontantDu(dto.getMontantDu() != null ? dto.getMontantDu() : BigDecimal.ZERO); + cotisation.setDateEcheance(dto.getDateEcheance()); + mesCotisationsEnAttente.add(cotisation); + } + + LOG.infof("Cotisations en attente chargĂ©es: %d", mesCotisationsEnAttente.size()); + } catch (Exception e) { + LOG.errorf(e, "Erreur lors du chargement des cotisations en attente"); + errorHandler.handleException(e, "lors du chargement de vos cotisations en attente", null); + mesCotisationsEnAttente = new ArrayList<>(); + } + } + + /** + * Charge les 5 derniers paiements du membre connectĂ© + */ + private void chargerDerniersPaiements() { + try { + // TODO: CrĂ©er endpoint GET /api/paiements/mes-paiements/historique?limit=5 + // Pour l'instant, charger toutes les cotisations payĂ©es et prendre les 5 derniĂšres + List cotisationsPayees = retryService.executeWithRetrySupplier( + () -> cotisationService.rechercher( + membreId, + "PAYEE", // Statut + null, // Type + null, // AnnĂ©e + null, // Mois + 0, + 5 + ), + "chargement de l'historique des paiements" + ); + + derniersPaiements = new ArrayList<>(); + for (CotisationResponse dto : cotisationsPayees) { + PaiementPerso paiement = new PaiementPerso(); + paiement.setId(dto.getId()); + paiement.setReference(dto.getNumeroReference() != null ? dto.getNumeroReference() : ""); + paiement.setPeriode(formaterPeriode(dto.getDateEcheance())); + paiement.setMontant(dto.getMontantDu() != null ? dto.getMontantDu() : BigDecimal.ZERO); + if (dto.getDatePaiement() != null) { + paiement.setDatePaiement(dto.getDatePaiement().toLocalDate()); + } + // Note: methodePaiement non disponible dans CotisationResponse + paiement.setMethodePaiement("Non renseignĂ©e"); + derniersPaiements.add(paiement); + } + + LOG.infof("Derniers paiements chargĂ©s: %d", derniersPaiements.size()); + } catch (Exception e) { + LOG.errorf(e, "Erreur lors du chargement des derniers paiements"); + errorHandler.handleException(e, "lors du chargement de votre historique", null); + derniersPaiements = new ArrayList<>(); + } + } + + /** + * Calcule les KPI personnels depuis les donnĂ©es chargĂ©es + */ + private void calculerKPI() { + // Cotisations en attente + cotisationsEnAttente = mesCotisationsEnAttente.size(); + + // Montant dĂ» total + BigDecimal montantTotal = mesCotisationsEnAttente.stream() + .map(CotisationPerso::getMontantDu) + .reduce(BigDecimal.ZERO, BigDecimal::add); + montantDu = formaterMontant(montantTotal); + + // Prochaine Ă©chĂ©ance + if (!mesCotisationsEnAttente.isEmpty()) { + LocalDate prochaine = mesCotisationsEnAttente.stream() + .map(CotisationPerso::getDateEcheance) + .filter(d -> d != null) + .min(LocalDate::compareTo) + .orElse(null); + prochaineEcheance = prochaine != null ? prochaine.format(DATE_FORMATTER) : "-"; + } else { + prochaineEcheance = "Aucune"; + } + + // Total payĂ© cette annĂ©e + BigDecimal totalPayeAnnee = derniersPaiements.stream() + .filter(p -> p.getDatePaiement() != null && p.getDatePaiement().getYear() == anneeEnCours) + .map(PaiementPerso::getMontant) + .reduce(BigDecimal.ZERO, BigDecimal::add); + totalPaye = formaterMontant(totalPayeAnnee); + + LOG.infof("KPI calculĂ©s: %d cotisations en attente, %s Ă  payer", cotisationsEnAttente, montantDu); + } + + // ═══════════════════════════════════════════════════════════════════════ + // Actions + // ═══════════════════════════════════════════════════════════════════════ + + /** + * Initie un paiement en ligne (Wave, Orange, Free Money, Carte) + */ + public void initierPaiementEnLigne() { + if (cotisationSelectionneeId == null) { + errorHandler.showWarning("Attention", "Veuillez sĂ©lectionner une cotisation Ă  payer"); + return; + } + + if (numeroTelephone == null || numeroTelephone.trim().isEmpty()) { + errorHandler.showWarning("Attention", "Veuillez saisir votre numĂ©ro de tĂ©lĂ©phone"); + return; + } + + try { + // TODO: CrĂ©er endpoint POST /api/paiements/initier-paiement-en-ligne + // Body: { cotisationId, methodePaiement, numeroTelephone } + // Retour: { redirectUrl, transactionId } + LOG.infof("Paiement en ligne initiĂ©: cotisation=%s, mĂ©thode=%s, tĂ©lĂ©phone=%s", + cotisationSelectionneeId, methodePaiementChoisie, numeroTelephone); + + errorHandler.showInfo("Paiement en ligne", + "Redirection vers le gateway de paiement " + methodePaiementChoisie + "..."); + + // TODO: Rediriger vers l'URL du gateway de paiement + // ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); + // ec.redirect(paymentGatewayUrl); + + } catch (Exception e) { + LOG.errorf(e, "Erreur lors de l'initiation du paiement en ligne"); + errorHandler.handleException(e, "lors de l'initiation du paiement", null); + } + } + + /** + * DĂ©clare un paiement manuel (espĂšces, virement, chĂšque) + * Statut: EN_ATTENTE_VALIDATION (le trĂ©sorier doit valider) + */ + public void declarerPaiementManuel() { + if (cotisationSelectionneeId == null) { + errorHandler.showWarning("Attention", "Veuillez sĂ©lectionner une cotisation"); + return; + } + + if (methodePaiementManuel == null || methodePaiementManuel.trim().isEmpty()) { + errorHandler.showWarning("Attention", "Veuillez sĂ©lectionner une mĂ©thode de paiement"); + return; + } + + try { + // TODO: CrĂ©er endpoint POST /api/paiements/declarer-paiement-manuel + // Body: { cotisationId, methodePaiement, reference, commentaire } + // Retour: 201 Created + LOG.infof("Paiement manuel dĂ©clarĂ©: cotisation=%s, mĂ©thode=%s, ref=%s", + cotisationSelectionneeId, methodePaiementManuel, referencePaiementManuel); + + errorHandler.showSuccess("Paiement dĂ©clarĂ©", + "Votre paiement a Ă©tĂ© enregistrĂ©. Il sera validĂ© par le trĂ©sorier."); + + // Recharger les donnĂ©es + chargerDonnees(); + + // RĂ©initialiser le formulaire + cotisationSelectionneeId = null; + methodePaiementManuel = "ESPECES"; + referencePaiementManuel = null; + commentairePaiement = null; + + } catch (Exception e) { + LOG.errorf(e, "Erreur lors de la dĂ©claration du paiement manuel"); + errorHandler.handleException(e, "lors de la dĂ©claration du paiement", null); + } + } + + /** + * TĂ©lĂ©charge le reçu PDF d'un paiement + */ + public void telechargerRecu(UUID paiementId) { + if (paiementId == null) { + errorHandler.showWarning("Attention", "Impossible de tĂ©lĂ©charger le reçu"); + return; + } + + try { + // TODO: CrĂ©er endpoint GET /api/paiements/telecharger-recu/{id} + byte[] recu = retryService.executeWithRetrySupplier( + () -> exportService.genererRecu(paiementId), + "gĂ©nĂ©ration d'un reçu" + ); + + String nomFichier = "recu-" + paiementId + ".pdf"; + telechargerFichier(recu, nomFichier, "application/pdf"); + + errorHandler.showSuccess("Reçu tĂ©lĂ©chargĂ©", "Le reçu a Ă©tĂ© tĂ©lĂ©chargĂ© avec succĂšs"); + } catch (Exception e) { + LOG.errorf(e, "Erreur lors du tĂ©lĂ©chargement du reçu"); + errorHandler.handleException(e, "lors du tĂ©lĂ©chargement du reçu", null); + } + } + + /** + * Ouvre le dialog de paiement en ligne pour une cotisation + */ + public void ouvrirDialogPaiementEnLigne(UUID cotisationId) { + this.cotisationSelectionneeId = cotisationId; + this.numeroTelephone = null; + this.methodePaiementChoisie = "WAVE"; + LOG.infof("Dialog paiement en ligne ouvert pour cotisation: %s", cotisationId); + } + + /** + * Ouvre le dialog de paiement manuel pour une cotisation + */ + public void ouvrirDialogPaiementManuel(UUID cotisationId) { + this.cotisationSelectionneeId = cotisationId; + this.methodePaiementManuel = "ESPECES"; + this.referencePaiementManuel = null; + this.commentairePaiement = null; + LOG.infof("Dialog paiement manuel ouvert pour cotisation: %s", cotisationId); + } + + /** + * Actualise les donnĂ©es + */ + public void actualiser() { + LOG.info("Actualisation des donnĂ©es de paiement"); + chargerDonnees(); + errorHandler.showSuccess("Actualisation", "Les donnĂ©es ont Ă©tĂ© actualisĂ©es"); + } + + // ═══════════════════════════════════════════════════════════════════════ + // Helpers + // ═══════════════════════════════════════════════════════════════════════ + + private String formaterPeriode(LocalDate dateEcheance) { + if (dateEcheance == null) { + return ""; + } + String[] moisNoms = {"Janvier", "FĂ©vrier", "Mars", "Avril", "Mai", "Juin", + "Juillet", "AoĂ»t", "Septembre", "Octobre", "Novembre", "DĂ©cembre"}; + int mois = dateEcheance.getMonthValue(); + int annee = dateEcheance.getYear(); + return moisNoms[mois - 1] + " " + annee; + } + + private String formaterMontant(BigDecimal montant) { + if (montant == null) { + return "0 FCFA"; + } + return String.format("%,.0f FCFA", montant); + } + + private void telechargerFichier(byte[] data, String nomFichier, String contentType) { + try { + jakarta.faces.context.FacesContext fc = jakarta.faces.context.FacesContext.getCurrentInstance(); + ExternalContext ec = fc.getExternalContext(); + ec.responseReset(); + ec.setResponseContentType(contentType + "; charset=UTF-8"); + ec.setResponseContentLength(data.length); + ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + nomFichier + "\""); + OutputStream output = ec.getResponseOutputStream(); + output.write(data); + output.flush(); + fc.responseComplete(); + } catch (Exception e) { + LOG.errorf(e, "Erreur tĂ©lĂ©chargement fichier"); + throw new RuntimeException("Erreur lors du tĂ©lĂ©chargement", e); + } + } + + // ═══════════════════════════════════════════════════════════════════════ + // Getters / Setters + // ═══════════════════════════════════════════════════════════════════════ + + public UUID getMembreId() { return membreId; } + public String getNumeroMembre() { return numeroMembre; } + public MembreResponse getMembre() { return membre; } + + public Integer getCotisationsEnAttente() { return cotisationsEnAttente; } + public String getMontantDu() { return montantDu; } + public String getProchaineEcheance() { return prochaineEcheance; } + public String getTotalPaye() { return totalPaye; } + public Integer getAnneeEnCours() { return anneeEnCours; } + + public List getMesCotisationsEnAttente() { return mesCotisationsEnAttente; } + public List getDerniersPaiements() { return derniersPaiements; } + + public UUID getCotisationSelectionneeId() { return cotisationSelectionneeId; } + public void setCotisationSelectionneeId(UUID cotisationSelectionneeId) { this.cotisationSelectionneeId = cotisationSelectionneeId; } + + public String getMethodePaiementChoisie() { return methodePaiementChoisie; } + public void setMethodePaiementChoisie(String methodePaiementChoisie) { this.methodePaiementChoisie = methodePaiementChoisie; } + + public String getNumeroTelephone() { return numeroTelephone; } + public void setNumeroTelephone(String numeroTelephone) { this.numeroTelephone = numeroTelephone; } + + public String getMethodePaiementManuel() { return methodePaiementManuel; } + public void setMethodePaiementManuel(String methodePaiementManuel) { this.methodePaiementManuel = methodePaiementManuel; } + + public String getReferencePaiementManuel() { return referencePaiementManuel; } + public void setReferencePaiementManuel(String referencePaiementManuel) { this.referencePaiementManuel = referencePaiementManuel; } + + public String getCommentairePaiement() { return commentairePaiement; } + public void setCommentairePaiement(String commentairePaiement) { this.commentairePaiement = commentairePaiement; } + + public boolean isPaiementManuelActive() { return paiementManuelActive; } + + // ═══════════════════════════════════════════════════════════════════════ + // DTOs internes + // ═══════════════════════════════════════════════════════════════════════ + + public static class CotisationPerso implements Serializable { + private static final long serialVersionUID = 1L; + + private UUID id; + private String reference; + private String type; + private String periode; + private BigDecimal montantDu; + private LocalDate dateEcheance; + + // Getters / Setters + public UUID getId() { return id; } + public void setId(UUID id) { this.id = id; } + + public String getReference() { return reference; } + public void setReference(String reference) { this.reference = reference; } + + public String getType() { return type; } + public void setType(String type) { this.type = type; } + + public String getPeriode() { return periode; } + public void setPeriode(String periode) { this.periode = periode; } + + public BigDecimal getMontantDu() { return montantDu; } + public void setMontantDu(BigDecimal montantDu) { this.montantDu = montantDu; } + + public LocalDate getDateEcheance() { return dateEcheance; } + public void setDateEcheance(LocalDate dateEcheance) { this.dateEcheance = dateEcheance; } + + // MĂ©thodes dĂ©rivĂ©es pour l'affichage + public String getTypeSeverity() { + return switch (type) { + case "MENSUELLE" -> "info"; + case "SPECIALE" -> "warning"; + case "ADHESION" -> "success"; + default -> "secondary"; + }; + } + + public String getTypeIcon() { + return switch (type) { + case "MENSUELLE" -> "pi-calendar"; + case "SPECIALE" -> "pi-star"; + case "ADHESION" -> "pi-user-plus"; + default -> "pi-circle"; + }; + } + + public String getMontantDuFormatte() { + return montantDu != null ? String.format("%,.0f FCFA", montantDu) : "0 FCFA"; + } + + public String getDateEcheanceFormattee() { + return dateEcheance != null ? dateEcheance.format(DATE_FORMATTER) : "-"; + } + } + + public static class PaiementPerso implements Serializable { + private static final long serialVersionUID = 1L; + + private UUID id; + private String reference; + private String periode; + private BigDecimal montant; + private LocalDate datePaiement; + private String methodePaiement; + + // Getters / Setters + public UUID getId() { return id; } + public void setId(UUID id) { this.id = id; } + + public String getReference() { return reference; } + public void setReference(String reference) { this.reference = reference; } + + public String getPeriode() { return periode; } + public void setPeriode(String periode) { this.periode = periode; } + + public BigDecimal getMontant() { return montant; } + public void setMontant(BigDecimal montant) { this.montant = montant; } + + public LocalDate getDatePaiement() { return datePaiement; } + public void setDatePaiement(LocalDate datePaiement) { this.datePaiement = datePaiement; } + + public String getMethodePaiement() { return methodePaiement; } + public void setMethodePaiement(String methodePaiement) { this.methodePaiement = methodePaiement; } + + // MĂ©thodes dĂ©rivĂ©es pour l'affichage + public String getMontantFormatte() { + return montant != null ? String.format("%,.0f FCFA", montant) : "0 FCFA"; + } + + public String getDatePaiementFormattee() { + return datePaiement != null ? datePaiement.format(DATE_FORMATTER) : "-"; + } + } +} diff --git a/src/main/java/dev/lions/unionflow/client/view/OrganisationDetailBean.java b/src/main/java/dev/lions/unionflow/client/view/OrganisationDetailBean.java index ee2a4fb..c0d8f8f 100644 --- a/src/main/java/dev/lions/unionflow/client/view/OrganisationDetailBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/OrganisationDetailBean.java @@ -1,6 +1,7 @@ package dev.lions.unionflow.client.view; import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.client.service.AssociationService; import dev.lions.unionflow.client.service.ErrorHandlerService; import dev.lions.unionflow.client.service.RestClientExceptionMapper; @@ -296,7 +297,7 @@ public class OrganisationDetailBean implements Serializable { public List rechercherOrganisations(String query) { if (query == null || query.trim().isEmpty()) return List.of(); try { - AssociationService.PagedResponseDTO response = + PagedResponse response = associationService.rechercher(query, null, null, null, null, 0, 100); return (response != null && response.getData() != null) ? response.getData() : List.of(); } catch (Exception e) { @@ -322,6 +323,17 @@ public class OrganisationDetailBean implements Serializable { return organisation.getTypeOrganisationLibelle(); } + /** + * Alias pour la vue (detail.xhtml) : libellĂ© du type d'organisation. + * DĂ©lĂšgue Ă  typeLibelle du DTO si prĂ©sent, sinon typeOrganisationLibelle. + */ + public String getTypeLibelle() { + if (organisation == null) return ""; + String libelle = organisation.getTypeLibelle(); + if (libelle != null && !libelle.isBlank()) return libelle; + return organisation.getTypeOrganisationLibelle() != null ? organisation.getTypeOrganisationLibelle() : ""; + } + public String getStatutLibelle() { if (organisation == null || organisation.getStatut() == null) return "Non renseignĂ©"; return switch (organisation.getStatut()) { diff --git a/src/main/java/dev/lions/unionflow/client/view/OrganisationStatistiquesBean.java b/src/main/java/dev/lions/unionflow/client/view/OrganisationStatistiquesBean.java index 0cabf78..467d447 100644 --- a/src/main/java/dev/lions/unionflow/client/view/OrganisationStatistiquesBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/OrganisationStatistiquesBean.java @@ -2,6 +2,7 @@ package dev.lions.unionflow.client.view; import dev.lions.unionflow.client.constants.StatutOrganisationConstants; import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.client.service.AssociationService; import jakarta.faces.view.ViewScoped; import jakarta.inject.Named; @@ -74,7 +75,7 @@ public class OrganisationStatistiquesBean implements Serializable { private void calculerStatistiquesDepuisListe() { try { // Charger toutes les organisations - AssociationService.PagedResponseDTO response = associationService.listerToutes(0, 1000); + PagedResponse response = associationService.listerToutes(0, 1000); List organisations = (response != null && response.getData() != null) ? response.getData() : new ArrayList<>(); diff --git a/src/main/java/dev/lions/unionflow/client/view/OrganisationsBean.java b/src/main/java/dev/lions/unionflow/client/view/OrganisationsBean.java index 434a786..7f75615 100644 --- a/src/main/java/dev/lions/unionflow/client/view/OrganisationsBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/OrganisationsBean.java @@ -2,7 +2,9 @@ package dev.lions.unionflow.client.view; import dev.lions.unionflow.client.constants.StatutOrganisationConstants; import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.reference.response.TypeReferenceResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.client.service.AssociationService; import dev.lions.unionflow.client.service.CacheService; import dev.lions.unionflow.client.service.ErrorHandlerService; @@ -71,6 +73,10 @@ public class OrganisationsBean implements Serializable { private OrganisationResponse organisationSelectionnee; private OrganisationResponse nouvelleOrganisation; private OrganisationResponse backupOrganisation; // Pour rollback + /** Organisation en attente de confirmation de suppression (flux explicite). */ + private OrganisationResponse organisationPourSuppression; + /** Organisation en attente de confirmation de bascule de statut (flux explicite). */ + private OrganisationResponse organisationPourStatut; private long totalOrganisations; private long organisationsActives; @@ -110,7 +116,7 @@ public class OrganisationsBean implements Serializable { public void chargerOrganisations() { try { LOG.debug("Chargement des organisations"); - AssociationService.PagedResponseDTO response = retryService.executeWithRetrySupplier( + PagedResponse response = retryService.executeWithRetrySupplier( () -> associationService.listerToutes(0, 1000), "chargement de toutes les organisations"); organisations = (response != null && response.getData() != null) ? response.getData() : new ArrayList<>(); @@ -136,7 +142,7 @@ public class OrganisationsBean implements Serializable { () -> { LOG.debug("Chargement de toutes les organisations pour les statistiques"); try { - AssociationService.PagedResponseDTO response = retryService + PagedResponse response = retryService .executeWithRetrySupplier( () -> associationService.listerToutes(0, 10000), "chargement des statistiques"); @@ -342,6 +348,45 @@ public class OrganisationsBean implements Serializable { } } + /** + * PrĂ©pare la suppression (ouvre le dialogue de confirmation). + */ + public void preparerSuppression(OrganisationResponse organisation) { + organisationPourSuppression = organisation; + } + + /** + * Confirme et exĂ©cute la suppression aprĂšs clic sur « Oui » dans le dialogue. + */ + public void confirmerSuppression() { + if (organisationPourSuppression == null) { + errorHandler.showWarning("Erreur", "Aucune organisation Ă  supprimer"); + return; + } + OrganisationResponse org = organisationPourSuppression; + organisationPourSuppression = null; + supprimerOrganisation(org); + } + + /** + * PrĂ©pare la bascule de statut (ouvre le dialogue de confirmation). + */ + public void preparerBasculerStatut(OrganisationResponse organisation) { + organisationPourStatut = organisation; + } + + /** + * Confirme et exĂ©cute la bascule de statut aprĂšs clic sur « Oui » dans le dialogue. + */ + public void confirmerBasculerStatut() { + if (organisationPourStatut == null) { + return; + } + OrganisationResponse org = organisationPourStatut; + organisationPourStatut = null; + basculerStatutOrganisation(org); + } + /** * Supprime une organisation. */ @@ -449,7 +494,7 @@ public class OrganisationsBean implements Serializable { return List.of(); } try { - AssociationService.PagedResponseDTO response = associationService.rechercher( + PagedResponse response = associationService.rechercher( query, null, null, null, null, 0, 100); List resultats = (response != null && response.getData() != null) ? response.getData() : new ArrayList<>(); diff --git a/src/main/java/dev/lions/unionflow/client/view/PersonnelBean.java b/src/main/java/dev/lions/unionflow/client/view/PersonnelBean.java index 00a9b16..609d8ee 100644 --- a/src/main/java/dev/lions/unionflow/client/view/PersonnelBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/PersonnelBean.java @@ -79,7 +79,7 @@ public class PersonnelBean implements Serializable { String email = userSession.getCurrentUser().getEmail(); if (email != null) { // Rechercher le membre par email - List membres = membreService.listerTous(); + List membres = membreService.listerTous().getData(); membre = membres.stream() .filter(m -> email.equals(m.getEmail())) .findFirst() @@ -132,14 +132,10 @@ public class PersonnelBean implements Serializable { try { if (membre != null) { List cotisations = cotisationService.obtenirParMembre(membre.getId(), 0, 100); - Map evenementsMap = evenementService.listerTous(0, 100, "dateDebut", "desc"); + var evenementsResponse = evenementService.listerTous(0, 100, "dateDebut", "desc"); int nbCotisations = cotisations != null ? cotisations.size() : 0; - int nbEvenements = 0; - if (evenementsMap != null && evenementsMap.containsKey("content")) { - @SuppressWarnings("unchecked") - List> content = (List>) evenementsMap.get("content"); - nbEvenements = content != null ? content.size() : 0; - } + int nbEvenements = evenementsResponse != null && evenementsResponse.getData() != null + ? evenementsResponse.getData().size() : 0; return nbCotisations + nbEvenements; } } catch (Exception e) { @@ -152,14 +148,10 @@ public class PersonnelBean implements Serializable { try { if (membre != null) { // RĂ©cupĂ©rer tous les Ă©vĂ©nements et filtrer ceux oĂč le membre a participĂ© - Map evenementsMap = evenementService.listerTous(0, 100, "dateDebut", "desc"); - if (evenementsMap != null && evenementsMap.containsKey("content")) { - @SuppressWarnings("unchecked") - List> content = (List>) evenementsMap.get("content"); - if (content != null) { - // Pour l'instant, on estime que le membre a participĂ© Ă  30% des Ă©vĂ©nements - return (int) (content.size() * 0.3); - } + var evenementsResponse = evenementService.listerTous(0, 100, "dateDebut", "desc"); + if (evenementsResponse != null && evenementsResponse.getData() != null) { + // Pour l'instant, on estime que le membre a participĂ© Ă  30% des Ă©vĂ©nements + return (int) (evenementsResponse.getData().size() * 0.3); } } } catch (Exception e) { @@ -243,24 +235,20 @@ public class PersonnelBean implements Serializable { } // Charger les Ă©vĂ©nements rĂ©cents - Map evenementsMap = evenementService.listerAVenir(0, 5); - if (evenementsMap != null && evenementsMap.containsKey("content")) { - @SuppressWarnings("unchecked") - List> content = (List>) evenementsMap.get("content"); - if (content != null) { - for (Map evtMap : content) { - ActiviteRecente act = new ActiviteRecente(); - act.setTitre("ÉvĂ©nement: " + (evtMap.get("titre") != null ? evtMap.get("titre").toString() : "")); - act.setDescription("ÉvĂ©nement Ă  venir"); - if (evtMap.get("dateDebut") != null) { - act.setDateHeure(formatDateRelative(evtMap.get("dateDebut").toString())); - } else { - act.setDateHeure("BientĂŽt"); - } - act.setIcon("pi-calendar"); - act.setCouleur("blue-500"); - activitesRecentes.add(act); + var evenementsResponse = evenementService.listerAVenir(0, 5); + if (evenementsResponse != null && evenementsResponse.getData() != null) { + for (EvenementResponse evt : evenementsResponse.getData()) { + ActiviteRecente act = new ActiviteRecente(); + act.setTitre("ÉvĂ©nement: " + (evt.getTitre() != null ? evt.getTitre() : "")); + act.setDescription("ÉvĂ©nement Ă  venir"); + if (evt.getDateDebut() != null) { + act.setDateHeure(formatDateRelative(evt.getDateDebut().toString())); + } else { + act.setDateHeure("BientĂŽt"); } + act.setIcon("pi-calendar"); + act.setCouleur("blue-500"); + activitesRecentes.add(act); } } @@ -384,29 +372,25 @@ public class PersonnelBean implements Serializable { try { if (membre != null) { // CrĂ©er des notifications basĂ©es sur les Ă©vĂ©nements Ă  venir - Map evenementsMap = evenementService.listerAVenir(0, 5); - if (evenementsMap != null && evenementsMap.containsKey("content")) { - @SuppressWarnings("unchecked") - List> content = (List>) evenementsMap.get("content"); - if (content != null) { - for (Map evtMap : content) { - NotificationPersonnelle notif = new NotificationPersonnelle(); - notif.setId(UUID.randomUUID()); - notif.setTitre("Nouvel Ă©vĂ©nement"); - notif.setMessage("Un nouvel Ă©vĂ©nement a Ă©tĂ© programmĂ©: " + - (evtMap.get("titre") != null ? evtMap.get("titre").toString() : "")); - if (evtMap.get("dateCreation") != null) { - try { - notif.setDateCreation(LocalDate.parse(evtMap.get("dateCreation").toString().substring(0, 10))); - } catch (Exception e) { - notif.setDateCreation(LocalDate.now().minusDays(1)); - } - } else { + var evenementsResponse = evenementService.listerAVenir(0, 5); + if (evenementsResponse != null && evenementsResponse.getData() != null) { + for (EvenementResponse evt : evenementsResponse.getData()) { + NotificationPersonnelle notif = new NotificationPersonnelle(); + notif.setId(UUID.randomUUID()); + notif.setTitre("Nouvel Ă©vĂ©nement"); + notif.setMessage("Un nouvel Ă©vĂ©nement a Ă©tĂ© programmĂ©: " + + (evt.getTitre() != null ? evt.getTitre() : "")); + if (evt.getDateCreation() != null) { + try { + notif.setDateCreation(evt.getDateCreation().toLocalDate()); + } catch (Exception e) { notif.setDateCreation(LocalDate.now().minusDays(1)); } - notif.setLue(false); - notifications.add(notif); + } else { + notif.setDateCreation(LocalDate.now().minusDays(1)); } + notif.setLue(false); + notifications.add(notif); } } diff --git a/src/main/java/dev/lions/unionflow/client/view/RapportsBean.java b/src/main/java/dev/lions/unionflow/client/view/RapportsBean.java index cfbc975..eaff517 100644 --- a/src/main/java/dev/lions/unionflow/client/view/RapportsBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/RapportsBean.java @@ -153,8 +153,8 @@ public class RapportsBean implements Serializable { private void calculerIndicateurs() { indicateurs = new IndicateursGlobaux(); try { - int totalMembres = membreService.listerTous().size(); - int totalEvenements = evenementService.listerTous(0, 1000, "dateCreation", "desc").size(); + int totalMembres = membreService.listerTous().getData().size(); + int totalEvenements = evenementService.listerTous(0, 1000, "dateCreation", "desc").getData().size(); BigDecimal totalRevenus = cotisationService.listerToutes(0, 1000).stream() .filter(c -> "PAYEE".equals(c.getStatut()) || "PARTIELLEMENT_PAYEE".equals(c.getStatut())) @@ -197,7 +197,7 @@ public class RapportsBean implements Serializable { repartitionMembres = new ArrayList<>(); try { // CorrigĂ©: MembreResponse est dans server.api, pas client.dto; et getStatut() → getStatutCompte() - List membres = membreService.listerTous(); + List membres = membreService.listerTous().getData(); long actifs = membres.stream().filter(m -> "ACTIF".equals(m.getStatutCompte())).count(); long inactifs = membres.stream().filter(m -> "INACTIF".equals(m.getStatutCompte())).count(); long total = membres.size(); @@ -248,8 +248,8 @@ public class RapportsBean implements Serializable { private void calculerObjectifs() { objectifs = new ArrayList<>(); try { - int totalMembres = membreService.listerTous().size(); - int totalEvenements = evenementService.listerTous(0, 1000, "dateCreation", "desc").size(); + int totalMembres = membreService.listerTous().getData().size(); + int totalEvenements = evenementService.listerTous(0, 1000, "dateCreation", "desc").getData().size(); BigDecimal totalRevenus = cotisationService.listerToutes(0, 1000).stream() .filter(c -> "PAYEE".equals(c.getStatut()) || "PARTIELLEMENT_PAYEE".equals(c.getStatut())) diff --git a/src/main/java/dev/lions/unionflow/client/view/RolesBean.java b/src/main/java/dev/lions/unionflow/client/view/RolesBean.java index a8ef74f..9734e83 100644 --- a/src/main/java/dev/lions/unionflow/client/view/RolesBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/RolesBean.java @@ -31,6 +31,8 @@ public class RolesBean implements Serializable { private List roles; private Role roleSelectionne; private Role nouveauRole = new Role(); + /** RĂŽle en attente de confirmation de suppression (flux explicite). */ + private Role rolePourSuppression; @jakarta.annotation.PostConstruct public void init() { @@ -120,6 +122,32 @@ public class RolesBean implements Serializable { public void gererUtilisateurs(Role role) { this.roleSelectionne = role; } + + /** + * PrĂ©pare la suppression (ouvre le dialogue de confirmation). + */ + public void preparerSuppression(Role role) { + this.rolePourSuppression = role; + } + + /** + * Confirme et exĂ©cute la suppression aprĂšs clic sur « Oui » dans le dialogue. + */ + public void confirmerSuppression() { + if (rolePourSuppression == null) return; + Role r = rolePourSuppression; + rolePourSuppression = null; + supprimerRole(r); + } + + /** + * Supprime un rĂŽle de la liste (cĂŽtĂ© client ; pas d'API delete dans AdminUserService). + */ + public void supprimerRole(Role role) { + if (role != null && roles != null) { + roles.remove(role); + } + } public void creerRole() { // Validation diff --git a/src/main/java/dev/lions/unionflow/client/view/SuperAdminBean.java b/src/main/java/dev/lions/unionflow/client/view/SuperAdminBean.java index e487518..9a571a8 100644 --- a/src/main/java/dev/lions/unionflow/client/view/SuperAdminBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/SuperAdminBean.java @@ -1,7 +1,9 @@ package dev.lions.unionflow.client.view; import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.abonnement.response.AbonnementResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.client.service.AdminUserService; import dev.lions.unionflow.client.service.AssociationService; import dev.lions.unionflow.client.service.AuditService; @@ -151,7 +153,7 @@ public class SuperAdminBean implements Serializable { private void initializeAssociationKPIs() { try { - AssociationService.PagedResponseDTO response = associationService.listerToutes(0, 1000); + PagedResponse response = associationService.listerToutes(0, 1000); List associations = (response != null && response.getData() != null) ? response.getData() : new ArrayList<>(); totalEntites = associations.size(); @@ -291,7 +293,7 @@ public class SuperAdminBean implements Serializable { private void initializeEntites() { topEntites = new ArrayList<>(); try { - AssociationService.PagedResponseDTO response = associationService.listerToutes(0, 1000); + PagedResponse response = associationService.listerToutes(0, 1000); List associations = (response != null && response.getData() != null) ? response.getData() : new ArrayList<>(); topEntites = associations.stream() @@ -318,7 +320,7 @@ public class SuperAdminBean implements Serializable { private void initializeRepartitionTypes() { repartitionTypes = new ArrayList<>(); try { - AssociationService.PagedResponseDTO response = associationService.listerToutes(0, 1000); + PagedResponse response = associationService.listerToutes(0, 1000); List associations = (response != null && response.getData() != null) ? response.getData() : new ArrayList<>(); if (associations == null || associations.isEmpty()) diff --git a/src/main/java/dev/lions/unionflow/client/view/TypeOrganisationsAdminBean.java b/src/main/java/dev/lions/unionflow/client/view/TypeOrganisationsAdminBean.java index f2117a5..6874e21 100644 --- a/src/main/java/dev/lions/unionflow/client/view/TypeOrganisationsAdminBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/TypeOrganisationsAdminBean.java @@ -56,6 +56,8 @@ public class TypeOrganisationsAdminBean implements Serializable { /** Type actuellement Ă©ditĂ© dans le dialogue (nouveau ou existant). */ private TypeReferenceResponse typeCourant; private TypeReferenceResponse typeSelectionne; + /** ID du type Ă  supprimer (pour dialogue de confirmation explicite). */ + private UUID typeASupprimerId; @PostConstruct public void init() { @@ -95,6 +97,11 @@ public class TypeOrganisationsAdminBean implements Serializable { .domaine("TYPE_ORGANISATION") .code(typeCourant.getCode()) .libelle(typeCourant.getLibelle()) + .description(typeCourant.getDescription()) + .ordreAffichage(typeCourant.getOrdreAffichage() != null ? typeCourant.getOrdreAffichage() : 0) + .estDefaut(false) + .estSysteme(false) + .organisationId(null) .build(); TypeReferenceResponse cree = retryService.executeWithRetrySupplier( @@ -152,11 +159,11 @@ public class TypeOrganisationsAdminBean implements Serializable { UpdateTypeReferenceRequest request = new UpdateTypeReferenceRequest( typeCourant.getCode(), typeCourant.getLibelle(), - null, // description + typeCourant.getDescription(), null, // icone null, // couleur null, // severity - null, // ordreAffichage + typeCourant.getOrdreAffichage(), null, // estDefaut typeCourant.getActif() ); @@ -179,30 +186,49 @@ public class TypeOrganisationsAdminBean implements Serializable { } } - public void desactiverType(UUID id) { + /** + * Ouvre le dialogue de confirmation de suppression (stocke l'id). + */ + public void preparerSuppression(UUID id) { + typeASupprimerId = id; + } + + /** + * Confirme et exĂ©cute la suppression du type dont l'id a Ă©tĂ© stockĂ© par preparerSuppression. + */ + public void confirmerSuppression() { + if (typeASupprimerId == null) { + errorHandler.showWarning("Erreur", "Aucun type Ă  supprimer"); + return; + } + UUID id = typeASupprimerId; + typeASupprimerId = null; + supprimerType(id); + } + + /** + * Supprime dĂ©finitivement un type d'organisation (appel DELETE cĂŽtĂ© API). + */ + public void supprimerType(UUID id) { if (id == null) { errorHandler.showWarning("Erreur", "Aucun type sĂ©lectionnĂ©"); return; } - try { retryService.executeWithRetrySupplier( () -> { typeOrganisationClientService.disable(id); return null; }, - "dĂ©sactivation d'un type d'organisation" + "suppression d'un type d'organisation" ); - - LOG.infof("Type d'organisation dĂ©sactivĂ© avec succĂšs: id=%s", id); + LOG.infof("Type d'organisation supprimĂ© avec succĂšs: id=%s", id); typeCatalogueService.recharger(); chargerTypes(); - - errorHandler.showSuccess("SuccĂšs", "Type d'organisation dĂ©sactivĂ©"); - + errorHandler.showSuccess("SuccĂšs", "Type d'organisation supprimĂ©"); } catch (Exception e) { - LOG.errorf(e, "Erreur lors de la dĂ©sactivation du type d'organisation"); - errorHandler.handleException(e, "lors de la dĂ©sactivation d'un type d'organisation", null); + LOG.errorf(e, "Erreur lors de la suppression du type d'organisation"); + errorHandler.handleException(e, "lors de la suppression d'un type d'organisation", null); } } diff --git a/src/main/java/dev/lions/unionflow/client/view/UserSession.java b/src/main/java/dev/lions/unionflow/client/view/UserSession.java index 19e0080..2d24bd7 100644 --- a/src/main/java/dev/lions/unionflow/client/view/UserSession.java +++ b/src/main/java/dev/lions/unionflow/client/view/UserSession.java @@ -2,6 +2,7 @@ package dev.lions.unionflow.client.view; import io.quarkus.oidc.IdToken; import io.quarkus.security.identity.SecurityIdentity; +import jakarta.annotation.PostConstruct; import jakarta.enterprise.context.SessionScoped; import jakarta.inject.Inject; import jakarta.inject.Named; @@ -14,12 +15,12 @@ import java.util.logging.Logger; /** * Gestion de la session utilisateur avec Keycloak OIDC - * + * *

* Utilise {@code @IdToken JsonWebToken} pour accéder aux claims du token * et {@link SecurityIdentity} pour les vérifications d'authentification, * car l'application est en mode OIDC {@code web-app} (authorization code flow). - * + * * @author UnionFlow Team * @version 2.1 */ @@ -50,6 +51,20 @@ public class UserSession implements Serializable { clearSession(); } + /** + * Initialise automatiquement la session aprÚs injection des dépendances + * Appelé automatiquement par CDI si l'utilisateur est authentifié + */ + @PostConstruct + public void init() { + if (securityIdentity != null && !securityIdentity.isAnonymous()) { + LOGGER.info("Initialisation automatique de la session utilisateur (authentifié via OIDC)"); + initializeFromOidcToken(); + } else { + LOGGER.info("Utilisateur non authentifié, session reste vide"); + } + } + /** * Initialise la session depuis le token OIDC Keycloak * Appelé automatiquement aprÚs l'authentification diff --git a/src/main/java/dev/lions/unionflow/client/view/UtilisateursBean.java b/src/main/java/dev/lions/unionflow/client/view/UtilisateursBean.java index 745a9e5..0af8dde 100644 --- a/src/main/java/dev/lions/unionflow/client/view/UtilisateursBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/UtilisateursBean.java @@ -4,6 +4,7 @@ import dev.lions.unionflow.server.api.dto.user.request.CreateUserRequest; import dev.lions.unionflow.server.api.dto.user.request.UpdateUserRequest; import dev.lions.unionflow.server.api.dto.user.response.UserResponse; import dev.lions.unionflow.server.api.dto.base.PageResponse; +import dev.lions.unionflow.server.api.dto.common.PagedResponse; import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationResponse; import dev.lions.unionflow.client.service.AdminUserService; import dev.lions.unionflow.client.service.AssociationService; @@ -84,7 +85,7 @@ public class UtilisateursBean implements Serializable { private void initializeOrganisations() { organisationsDisponibles = new ArrayList<>(); try { - AssociationService.PagedResponseDTO response = associationService.listerToutes(0, 1000); + PagedResponse response = associationService.listerToutes(0, 1000); List associations = (response != null && response.getData() != null) ? response.getData() : new ArrayList<>(); for (OrganisationResponse assoc : associations) { diff --git a/src/main/resources/META-INF/faces-config.xml b/src/main/resources/META-INF/faces-config.xml index b74a939..b33ce1f 100644 --- a/src/main/resources/META-INF/faces-config.xml +++ b/src/main/resources/META-INF/faces-config.xml @@ -90,6 +90,45 @@ + + Page de validation des inscriptions membres + /pages/secure/membre/validation + /pages/secure/membre/validation.xhtml + + + + + + Page des demandes de crédit + /pages/secure/credit/demandes + /pages/secure/credit/demandes.xhtml + + + + Page d'évaluation solvabilité crédit + /pages/secure/credit/evaluation + /pages/secure/credit/evaluation.xhtml + + + + Page de suivi des crédits + /pages/secure/credit/suivi + /pages/secure/credit/suivi.xhtml + + + + Page des remboursements crédit + /pages/secure/credit/remboursements + /pages/secure/credit/remboursements.xhtml + + + + Page des statistiques crédit + /pages/secure/credit/statistiques + /pages/secure/credit/statistiques.xhtml + + + Page de liste des organisations diff --git a/src/main/resources/META-INF/resources/pages/admin/documents/gestion.xhtml b/src/main/resources/META-INF/resources/pages/admin/documents/gestion.xhtml index a3b3f12..8cdf288 100644 --- a/src/main/resources/META-INF/resources/pages/admin/documents/gestion.xhtml +++ b/src/main/resources/META-INF/resources/pages/admin/documents/gestion.xhtml @@ -520,7 +520,7 @@

- +
@@ -268,6 +269,7 @@ - -
+ +
@@ -63,8 +63,8 @@
- -
+ +
Répartition par Méthode de Paiement @@ -118,6 +118,7 @@ value="#{cotisationsBean.cotisationsFiltrees}" var="cotisation" filteredValue="#{cotisationsBean.cotisationsFiltrees}" + rowKey="#{cotisation.id}" paginator="true" rows="20" emptyMessage="Aucune cotisation en attente" @@ -137,7 +138,9 @@
- + +
#{cotisation.nomMembre}
#{cotisation.numeroMembre}
diff --git a/src/main/resources/META-INF/resources/pages/secure/credit/demandes.xhtml b/src/main/resources/META-INF/resources/pages/secure/credit/demandes.xhtml new file mode 100644 index 0000000..1e8da72 --- /dev/null +++ b/src/main/resources/META-INF/resources/pages/secure/credit/demandes.xhtml @@ -0,0 +1,30 @@ + + + + Demandes de Crédit - UnionFlow + + + + + + + +
+ + +
+ +
+
Demandes de crédit
+

La liste des demandes de crédit à traiter sera affichée ici lorsque le module sera connecté au backend.

+
+
+
+
+
+
diff --git a/src/main/resources/META-INF/resources/pages/secure/credit/evaluation.xhtml b/src/main/resources/META-INF/resources/pages/secure/credit/evaluation.xhtml new file mode 100644 index 0000000..ddeae24 --- /dev/null +++ b/src/main/resources/META-INF/resources/pages/secure/credit/evaluation.xhtml @@ -0,0 +1,30 @@ + + + + Évaluation SolvabilitĂ© - UnionFlow + + + + + + + +
+ + +
+ +
+
Évaluation solvabilitĂ©
+

Les outils d'évaluation de solvabilité seront disponibles ici lorsque le module crédit sera opérationnel.

+
+
+
+
+
+
diff --git a/src/main/resources/META-INF/resources/pages/secure/credit/remboursements.xhtml b/src/main/resources/META-INF/resources/pages/secure/credit/remboursements.xhtml new file mode 100644 index 0000000..7daf587 --- /dev/null +++ b/src/main/resources/META-INF/resources/pages/secure/credit/remboursements.xhtml @@ -0,0 +1,30 @@ + + + + Remboursements - UnionFlow + + + + + + + +
+ + +
+ +
+
Remboursements
+

La gestion des remboursements sera disponible ici lorsque le module crédit sera branché.

+
+
+
+
+
+
diff --git a/src/main/resources/META-INF/resources/pages/secure/credit/statistiques.xhtml b/src/main/resources/META-INF/resources/pages/secure/credit/statistiques.xhtml new file mode 100644 index 0000000..56d9f53 --- /dev/null +++ b/src/main/resources/META-INF/resources/pages/secure/credit/statistiques.xhtml @@ -0,0 +1,30 @@ + + + + Statistiques Crédit - UnionFlow + + + + + + + +
+ + +
+ +
+
Statistiques crédit
+

Les indicateurs et statistiques du portefeuille crédit seront affichés ici lorsque le module sera opérationnel.

+
+
+
+
+
+
diff --git a/src/main/resources/META-INF/resources/pages/secure/credit/suivi.xhtml b/src/main/resources/META-INF/resources/pages/secure/credit/suivi.xhtml new file mode 100644 index 0000000..63f93ef --- /dev/null +++ b/src/main/resources/META-INF/resources/pages/secure/credit/suivi.xhtml @@ -0,0 +1,30 @@ + + + + Suivi des Crédits - UnionFlow + + + + + + + +
+ + +
+ +
+
Suivi des crédits
+

Le suivi des crédits accordés sera affiché ici une fois le module connecté.

+
+
+
+
+
+
diff --git a/src/main/resources/META-INF/resources/pages/secure/dashboard-membre.xhtml b/src/main/resources/META-INF/resources/pages/secure/dashboard-membre.xhtml new file mode 100644 index 0000000..f13b9f7 --- /dev/null +++ b/src/main/resources/META-INF/resources/pages/secure/dashboard-membre.xhtml @@ -0,0 +1,272 @@ + + + + Mon Espace Personnel + + +
+ +
+
+
+
+
+ +
+
+

Bienvenue, #{dashboardMembreBean.prenomMembre}

+

Voici votre tableau de bord personnel

+
+
+
+
Membre depuis
+
+ + + + - +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
Historique de mes cotisations
+ + + + + + + + + + + + + #{cotis.montant} FCFA + + + + + + + + +
+
+ + +
+ +
+
+
Actions rapides
+ Ce que je peux faire +
+
+ +
+ + + + + + + + Cotisation mensuelle +
+ +
+ + + + + + + + Calendrier +
+ +
+ + + + + + + + Nouvelle demande +
+ +
+ + + + + + + + Mes informations +
+
+
+
+ + +
+
Mes notifications
+
+ +
+ +
+
#{notif.titre}
+ #{notif.message} +
+ + + + + +
+
+ +
+ +

Aucune notification pour le moment

+
+
+
+
+
+ + +
+
+
+
ÉvĂ©nements Ă  venir
+ + + + + + + + + +
+ +
+ +
+
+
+ + #{evt.daysUntilEvent} +
+
#{evt.title}
+

#{evt.description}

+
+ + + + +
+
+ + #{evt.location} +
+
+ #{evt.participationSummary} + + + + + + + + + +
+
+
+
+
+ + +
+ +

Aucun événement prévu pour le moment

+
+
+
+
+
+
+ +
diff --git a/src/main/resources/META-INF/resources/pages/secure/dashboard.xhtml b/src/main/resources/META-INF/resources/pages/secure/dashboard.xhtml index 28b03b8..d595cb9 100644 --- a/src/main/resources/META-INF/resources/pages/secure/dashboard.xhtml +++ b/src/main/resources/META-INF/resources/pages/secure/dashboard.xhtml @@ -7,7 +7,14 @@ template="/templates/main-template.xhtml"> UnionFlow - Tableau de bord - + + + + + + + +
@@ -16,7 +23,7 @@

Tableau de bord UnionFlow

-

Bienvenue #{userSession.currentUser.nom}, voici un aperçu de votre union

+

Bienvenue #{userSession.currentUser != null ? userSession.currentUser.nomComplet : userSession.username}, voici un aperçu de votre union

#{dashboardBean.currentDate} @@ -130,54 +137,68 @@
- - - - - - - - - + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + -
-
+ + +
+
Évolution financiùre (3 derniers mois)
@@ -239,7 +260,11 @@
- + + + + +
État des cotisations
@@ -303,7 +328,8 @@
- + +
@@ -376,110 +402,142 @@
-
-
Actions rapides
-
-
- - - - - - - -
-
- - - - - - - -
-
- - - - - - - -
-
- - - - - - - + + +
+
Actions rapides
+
+ + +
+ + + + + + + +
+
+ + +
+ + + + + + + +
+
+ + +
+ + + + + + + +
+
+ + +
+ + + + + + + +
+
-
+ -
-
TĂąches prioritaires
-
-
- -
-
Valider #{dashboardBean.adhesionsPendantes} adhésions
- Demandes en attente de validation -
- - - - - -
- -
- -
-
Relancer #{dashboardBean.cotisationsRetard} cotisations
- Paiements en retard -
- - - - - -
- -
- -
-
Traiter #{dashboardBean.aidesEnAttente} aides
- Demandes d'aide Ă  examiner -
- - - - - -
- -
- -
-
Organiser prochains événements
- #{dashboardBean.evenementsAPlanifier} événements à planifier -
- - - - - + + +
+
TĂąches prioritaires
+
+ + +
+ +
+
Valider #{dashboardBean.adhesionsPendantes} adhésions
+ Demandes en attente de validation +
+ + + + + +
+
+ + + +
+ +
+
Relancer #{dashboardBean.cotisationsRetard} cotisations
+ Paiements en retard +
+ + + + + +
+
+ + + +
+ +
+
Traiter #{dashboardBean.aidesEnAttente} aides
+ Demandes d'aide Ă  examiner +
+ + + + + +
+
+ + + +
+ +
+
Organiser prochains événements
+ #{dashboardBean.evenementsAPlanifier} événements à planifier +
+ + + + + +
+
-
+
-
-
+ + +
+
Résumé financier mensuel
@@ -527,6 +585,7 @@
+
diff --git a/src/main/resources/META-INF/resources/pages/secure/finance/tresorerie.xhtml b/src/main/resources/META-INF/resources/pages/secure/finance/tresorerie.xhtml index 89f271a..340a4eb 100644 --- a/src/main/resources/META-INF/resources/pages/secure/finance/tresorerie.xhtml +++ b/src/main/resources/META-INF/resources/pages/secure/finance/tresorerie.xhtml @@ -6,6 +6,11 @@ xmlns:p="http://primefaces.org/ui" template="/templates/main-template.xhtml"> + + + + + Trésorerie - UnionFlow diff --git a/src/main/resources/META-INF/resources/pages/secure/membre/cotisations.xhtml b/src/main/resources/META-INF/resources/pages/secure/membre/cotisations.xhtml index 092270b..b224cd5 100644 --- a/src/main/resources/META-INF/resources/pages/secure/membre/cotisations.xhtml +++ b/src/main/resources/META-INF/resources/pages/secure/membre/cotisations.xhtml @@ -7,7 +7,7 @@ template="/templates/main-template.xhtml"> - + @@ -86,7 +86,7 @@
-
Historique des Cotisations
+
Mes Cotisations
diff --git a/src/main/resources/META-INF/resources/pages/secure/membre/export.xhtml b/src/main/resources/META-INF/resources/pages/secure/membre/export.xhtml index 1d29dc9..92eba64 100644 --- a/src/main/resources/META-INF/resources/pages/secure/membre/export.xhtml +++ b/src/main/resources/META-INF/resources/pages/secure/membre/export.xhtml @@ -143,7 +143,7 @@
- +
- + + + + + + Inscription Membre - UnionFlow @@ -268,7 +273,7 @@
- + + styleClass="ui-button-success mr-2" + rendered="#{menuBean.gestionMembresMenuVisible}" /> + onclick="PF('dlgImportExport').show();" type="button" styleClass="ui-button-info" + rendered="#{menuBean.gestionMembresMenuVisible}" /> - +
@@ -125,10 +129,11 @@ + rendered="#{not empty membreListeBean.selectedMembres and menuBean.gestionMembresMenuVisible}"> @@ -157,8 +162,9 @@ - - + + @@ -225,9 +231,10 @@ - + + styleClass="ui-button-warning ui-button-sm ui-button-rounded mr-1" + rendered="#{menuBean.gestionMembresMenuVisible}"> @@ -237,31 +244,34 @@ oncomplete="PF('dlgContact').show();" update=":dlgContact" styleClass="ui-button-help ui-button-sm ui-button-rounded mr-1" /> - + - - + actionListener="#{membreListeBean.preparerSuspendre(membre)}" + update=":formMembres:dlgConfirmSuspendre" + oncomplete="PF('dlgConfirmSuspendre').show();" + rendered="#{menuBean.gestionMembresMenuVisible and membre.statut == 'ACTIF'}" + styleClass="ui-button-danger ui-button-sm ui-button-rounded mr-1" /> - + - - - - - + +

Suspendre ce membre ?

+ + + + +
+ + + + + +
+ + + + + + + +
+
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + Mes Cotisations en Attente +
+ + + + + + + + + + + + +
+
#{cotis.libelle}
+ #{cotis.periodeFormatee} +
+
+ + +
+
#{cotis.montantDuFormatte}
+ FCFA +
+
+ + +
+
+ + + +
+ #{cotis.statutEcheance} +
+
+ + +
+ + + + + +
+
+
+ + + +
+ +

Félicitations !

+

Vous ĂȘtes Ă  jour dans vos cotisations.

+
+
+
+ + +
+
+ + Mes Derniers Paiements +
+ + + + + + + + + + + + + + + + + + +
+
#{paiement.montantFormatte}
+ FCFA +
+
+ + + + + + + + +
+
+ + + + + +
+ +
+
+
+ Cotisation + #{mesCotisationsPaiementBean.cotisationSelectionnee.reference} +
+
+ Type + +
+
+ Montant Ă  payer + + #{mesCotisationsPaiementBean.cotisationSelectionnee.montantDuFormatte} FCFA + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Vous allez ĂȘtre redirigĂ© vers la plateforme de paiement sĂ©curisĂ©e.

+

Aucun frais supplémentaire n'est appliqué sur votre paiement.

+
+
+
+
+ +
+ + + + + + + + + + + +
+
+
+ + + + +
+
+
+ +
+

Si vous avez effectué un paiement par un autre moyen (espÚces, virement direct, etc.), vous pouvez le déclarer ici.

+

Votre paiement devra ĂȘtre validĂ© par le trĂ©sorier.

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+
+
+ + + diff --git a/src/main/resources/META-INF/resources/pages/secure/membre/validation.xhtml b/src/main/resources/META-INF/resources/pages/secure/membre/validation.xhtml new file mode 100644 index 0000000..033b257 --- /dev/null +++ b/src/main/resources/META-INF/resources/pages/secure/membre/validation.xhtml @@ -0,0 +1,34 @@ + + + + Validation des Inscriptions - UnionFlow + + + + + + + + + +
+ + +
+ +
+
Inscriptions en attente
+

+ Les demandes d'inscription à valider apparaßtront ici. Utilisez la liste des membres ou le formulaire d'inscription pour gérer les nouveaux membres. +

+
+
+
+
+
+
diff --git a/src/main/resources/META-INF/resources/pages/secure/organisation/liste.xhtml b/src/main/resources/META-INF/resources/pages/secure/organisation/liste.xhtml index 25877ce..8988a53 100644 --- a/src/main/resources/META-INF/resources/pages/secure/organisation/liste.xhtml +++ b/src/main/resources/META-INF/resources/pages/secure/organisation/liste.xhtml @@ -188,8 +188,8 @@
- - + @@ -247,37 +247,40 @@ - - + actionListener="#{organisationsBean.preparerBasculerStatut(org)}" + update=":formOrganisations:dlgConfirmStatut" + oncomplete="PF('dlgConfirmStatut').show();" /> - - + actionListener="#{organisationsBean.preparerSuppression(org)}" + update=":formOrganisations:dlgConfirmSuppr" + oncomplete="PF('dlgConfirmSuppr').show();" />
- - - - + +

Changer le statut de cette organisation ?

+ + + + +
+ +

Supprimer définitivement cette organisation ? Cette action est irréversible.

+ + + + +
diff --git a/src/main/resources/META-INF/resources/pages/super-admin/organisations.xhtml b/src/main/resources/META-INF/resources/pages/super-admin/organisations.xhtml index da4ea0b..9d9e958 100644 --- a/src/main/resources/META-INF/resources/pages/super-admin/organisations.xhtml +++ b/src/main/resources/META-INF/resources/pages/super-admin/organisations.xhtml @@ -124,31 +124,40 @@ - - + actionListener="#{organisationsBean.preparerBasculerStatut(org)}" + update=":formOrgs:dlgConfirmStatut" + oncomplete="PF('dlgConfirmStatut').show();" /> - - + actionListener="#{organisationsBean.preparerSuppression(org)}" + update=":formOrgs:dlgConfirmSuppr" + oncomplete="PF('dlgConfirmSuppr').show();" />
- - - - + +

Confirmez l'action sur le statut de l'organisation ?

+ + + + +
+ +

Supprimer cette organisation ? Cette action est irréversible.

+ + + + +
- - + rendered="#{role.supprimable}" + actionListener="#{rolesBean.preparerSuppression(role)}" + update=":tableauForm:dlgConfirmSupprRole" + oncomplete="PF('dlgConfirmSupprRole').show();" />
+ +

Êtes-vous sĂ»r de vouloir supprimer ce rĂŽle ?

+ + + + +
diff --git a/src/main/resources/META-INF/resources/pages/super-admin/types/organisations.xhtml b/src/main/resources/META-INF/resources/pages/super-admin/types/organisations.xhtml index 748668d..528cb0a 100644 --- a/src/main/resources/META-INF/resources/pages/super-admin/types/organisations.xhtml +++ b/src/main/resources/META-INF/resources/pages/super-admin/types/organisations.xhtml @@ -10,7 +10,7 @@ - +
@@ -67,7 +67,7 @@ severity="#{type.actif ? 'success' : 'danger'}" /> - + - - - +
- - - - + + +

Supprimer définitivement ce type d'organisation ? Cette action est irréversible.

+ + + + +
diff --git a/src/main/resources/META-INF/resources/templates/components/cards/kpi-card.xhtml b/src/main/resources/META-INF/resources/templates/components/cards/kpi-card.xhtml index 0a97208..2da3975 100644 --- a/src/main/resources/META-INF/resources/templates/components/cards/kpi-card.xhtml +++ b/src/main/resources/META-INF/resources/templates/components/cards/kpi-card.xhtml @@ -112,23 +112,23 @@ -
+
+#{growthValue} #{growthLabel}
-
+
#{noDataLabel}
-
+
+#{growthValue}% #{growthLabel}
-
+
#{noDataLabel}
diff --git a/src/main/resources/META-INF/resources/templates/components/layout/menu.xhtml b/src/main/resources/META-INF/resources/templates/components/layout/menu.xhtml index a276291..225cd01 100644 --- a/src/main/resources/META-INF/resources/templates/components/layout/menu.xhtml +++ b/src/main/resources/META-INF/resources/templates/components/layout/menu.xhtml @@ -31,7 +31,7 @@ - + @@ -184,7 +184,7 @@ - + diff --git a/src/main/resources/META-INF/resources/templates/components/security/page-access-control.xhtml b/src/main/resources/META-INF/resources/templates/components/security/page-access-control.xhtml new file mode 100644 index 0000000..e01fa52 --- /dev/null +++ b/src/main/resources/META-INF/resources/templates/components/security/page-access-control.xhtml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + diff --git a/src/main/resources/META-INF/resources/ui/includes/membre-form.xhtml b/src/main/resources/META-INF/resources/ui/includes/membre-form.xhtml index 77a14bc..c9c08fe 100644 --- a/src/main/resources/META-INF/resources/ui/includes/membre-form.xhtml +++ b/src/main/resources/META-INF/resources/ui/includes/membre-form.xhtml @@ -133,7 +133,7 @@
- + diff --git a/src/main/resources/META-INF/resources/ui/includes/organisation-form.xhtml b/src/main/resources/META-INF/resources/ui/includes/organisation-form.xhtml index 82ce4ec..5e3914f 100644 --- a/src/main/resources/META-INF/resources/ui/includes/organisation-form.xhtml +++ b/src/main/resources/META-INF/resources/ui/includes/organisation-form.xhtml @@ -487,6 +487,7 @@ + + Page de validation des inscriptions membres + /pages/secure/membre/validation + /pages/secure/membre/validation.xhtml + + + + + + Page des demandes de crédit + /pages/secure/credit/demandes + /pages/secure/credit/demandes.xhtml + + + + Page d'évaluation solvabilité crédit + /pages/secure/credit/evaluation + /pages/secure/credit/evaluation.xhtml + + + + Page de suivi des crédits + /pages/secure/credit/suivi + /pages/secure/credit/suivi.xhtml + + + + Page des remboursements crédit + /pages/secure/credit/remboursements + /pages/secure/credit/remboursements.xhtml + + + + Page des statistiques crédit + /pages/secure/credit/statistiques + /pages/secure/credit/statistiques.xhtml + + + Page de liste des organisations diff --git a/target/classes/META-INF/resources/pages/admin/documents/gestion.xhtml b/target/classes/META-INF/resources/pages/admin/documents/gestion.xhtml index a3b3f12..8cdf288 100644 --- a/target/classes/META-INF/resources/pages/admin/documents/gestion.xhtml +++ b/target/classes/META-INF/resources/pages/admin/documents/gestion.xhtml @@ -520,7 +520,7 @@
- + - -
+ +
@@ -63,8 +63,8 @@
- -
+ +
Répartition par Méthode de Paiement @@ -118,6 +118,7 @@ value="#{cotisationsBean.cotisationsFiltrees}" var="cotisation" filteredValue="#{cotisationsBean.cotisationsFiltrees}" + rowKey="#{cotisation.id}" paginator="true" rows="20" emptyMessage="Aucune cotisation en attente" @@ -137,7 +138,9 @@
- + +
#{cotisation.nomMembre}
#{cotisation.numeroMembre}
diff --git a/target/classes/META-INF/resources/pages/secure/dashboard.xhtml b/target/classes/META-INF/resources/pages/secure/dashboard.xhtml index 28b03b8..d595cb9 100644 --- a/target/classes/META-INF/resources/pages/secure/dashboard.xhtml +++ b/target/classes/META-INF/resources/pages/secure/dashboard.xhtml @@ -7,7 +7,14 @@ template="/templates/main-template.xhtml"> UnionFlow - Tableau de bord - + + + + + + + +
@@ -16,7 +23,7 @@

Tableau de bord UnionFlow

-

Bienvenue #{userSession.currentUser.nom}, voici un aperçu de votre union

+

Bienvenue #{userSession.currentUser != null ? userSession.currentUser.nomComplet : userSession.username}, voici un aperçu de votre union

#{dashboardBean.currentDate} @@ -130,54 +137,68 @@
- - - - - - - - - + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + -
-
+ + +
+
Évolution financiùre (3 derniers mois)
@@ -239,7 +260,11 @@
- + + + + +
État des cotisations
@@ -303,7 +328,8 @@
- + +
@@ -376,110 +402,142 @@
-
-
Actions rapides
-
-
- - - - - - - -
-
- - - - - - - -
-
- - - - - - - -
-
- - - - - - - + + +
+
Actions rapides
+
+ + +
+ + + + + + + +
+
+ + +
+ + + + + + + +
+
+ + +
+ + + + + + + +
+
+ + +
+ + + + + + + +
+
-
+ -
-
TĂąches prioritaires
-
-
- -
-
Valider #{dashboardBean.adhesionsPendantes} adhésions
- Demandes en attente de validation -
- - - - - -
- -
- -
-
Relancer #{dashboardBean.cotisationsRetard} cotisations
- Paiements en retard -
- - - - - -
- -
- -
-
Traiter #{dashboardBean.aidesEnAttente} aides
- Demandes d'aide Ă  examiner -
- - - - - -
- -
- -
-
Organiser prochains événements
- #{dashboardBean.evenementsAPlanifier} événements à planifier -
- - - - - + + +
+
TĂąches prioritaires
+
+ + +
+ +
+
Valider #{dashboardBean.adhesionsPendantes} adhésions
+ Demandes en attente de validation +
+ + + + + +
+
+ + + +
+ +
+
Relancer #{dashboardBean.cotisationsRetard} cotisations
+ Paiements en retard +
+ + + + + +
+
+ + + +
+ +
+
Traiter #{dashboardBean.aidesEnAttente} aides
+ Demandes d'aide Ă  examiner +
+ + + + + +
+
+ + + +
+ +
+
Organiser prochains événements
+ #{dashboardBean.evenementsAPlanifier} événements à planifier +
+ + + + + +
+
-
+
-
-
+ + +
+
Résumé financier mensuel
@@ -527,6 +585,7 @@
+
diff --git a/target/classes/META-INF/resources/pages/secure/membre/cotisations.xhtml b/target/classes/META-INF/resources/pages/secure/membre/cotisations.xhtml index 092270b..b224cd5 100644 --- a/target/classes/META-INF/resources/pages/secure/membre/cotisations.xhtml +++ b/target/classes/META-INF/resources/pages/secure/membre/cotisations.xhtml @@ -7,7 +7,7 @@ template="/templates/main-template.xhtml"> - + @@ -86,7 +86,7 @@
-
Historique des Cotisations
+
Mes Cotisations
diff --git a/target/classes/META-INF/resources/pages/secure/membre/export.xhtml b/target/classes/META-INF/resources/pages/secure/membre/export.xhtml index 1d29dc9..92eba64 100644 --- a/target/classes/META-INF/resources/pages/secure/membre/export.xhtml +++ b/target/classes/META-INF/resources/pages/secure/membre/export.xhtml @@ -143,7 +143,7 @@
- +
- + + + + + + Inscription Membre - UnionFlow @@ -268,7 +273,7 @@
- + + styleClass="ui-button-success mr-2" + rendered="#{menuBean.gestionMembresMenuVisible}" /> + onclick="PF('dlgImportExport').show();" type="button" styleClass="ui-button-info" + rendered="#{menuBean.gestionMembresMenuVisible}" /> - +
@@ -125,10 +129,11 @@ + rendered="#{not empty membreListeBean.selectedMembres and menuBean.gestionMembresMenuVisible}"> @@ -157,8 +162,9 @@ - - + + @@ -225,9 +231,10 @@ - + + styleClass="ui-button-warning ui-button-sm ui-button-rounded mr-1" + rendered="#{menuBean.gestionMembresMenuVisible}"> @@ -237,31 +244,34 @@ oncomplete="PF('dlgContact').show();" update=":dlgContact" styleClass="ui-button-help ui-button-sm ui-button-rounded mr-1" /> - + - - + actionListener="#{membreListeBean.preparerSuspendre(membre)}" + update=":formMembres:dlgConfirmSuspendre" + oncomplete="PF('dlgConfirmSuspendre').show();" + rendered="#{menuBean.gestionMembresMenuVisible and membre.statut == 'ACTIF'}" + styleClass="ui-button-danger ui-button-sm ui-button-rounded mr-1" /> - + - - - - - + +

Suspendre ce membre ?

+ + + + +
- - + @@ -247,37 +247,40 @@ - - + actionListener="#{organisationsBean.preparerBasculerStatut(org)}" + update=":formOrganisations:dlgConfirmStatut" + oncomplete="PF('dlgConfirmStatut').show();" /> - - + actionListener="#{organisationsBean.preparerSuppression(org)}" + update=":formOrganisations:dlgConfirmSuppr" + oncomplete="PF('dlgConfirmSuppr').show();" />
- - - - + +

Changer le statut de cette organisation ?

+ + + + +
+ +

Supprimer définitivement cette organisation ? Cette action est irréversible.

+ + + + +
diff --git a/target/classes/META-INF/resources/pages/super-admin/organisations.xhtml b/target/classes/META-INF/resources/pages/super-admin/organisations.xhtml index da4ea0b..9d9e958 100644 --- a/target/classes/META-INF/resources/pages/super-admin/organisations.xhtml +++ b/target/classes/META-INF/resources/pages/super-admin/organisations.xhtml @@ -124,31 +124,40 @@ - - + actionListener="#{organisationsBean.preparerBasculerStatut(org)}" + update=":formOrgs:dlgConfirmStatut" + oncomplete="PF('dlgConfirmStatut').show();" /> - - + actionListener="#{organisationsBean.preparerSuppression(org)}" + update=":formOrgs:dlgConfirmSuppr" + oncomplete="PF('dlgConfirmSuppr').show();" />
- - - - + +

Confirmez l'action sur le statut de l'organisation ?

+ + + + +
+ +

Supprimer cette organisation ? Cette action est irréversible.

+ + + + +
- - + rendered="#{role.supprimable}" + actionListener="#{rolesBean.preparerSuppression(role)}" + update=":tableauForm:dlgConfirmSupprRole" + oncomplete="PF('dlgConfirmSupprRole').show();" />
+ +

Êtes-vous sĂ»r de vouloir supprimer ce rĂŽle ?

+ + + + +
diff --git a/target/classes/META-INF/resources/pages/super-admin/types/organisations.xhtml b/target/classes/META-INF/resources/pages/super-admin/types/organisations.xhtml index 748668d..528cb0a 100644 --- a/target/classes/META-INF/resources/pages/super-admin/types/organisations.xhtml +++ b/target/classes/META-INF/resources/pages/super-admin/types/organisations.xhtml @@ -10,7 +10,7 @@ - +
@@ -67,7 +67,7 @@ severity="#{type.actif ? 'success' : 'danger'}" /> - + - - - +
- - - - + + +

Supprimer définitivement ce type d'organisation ? Cette action est irréversible.

+ + + + +
diff --git a/target/classes/META-INF/resources/templates/components/cards/kpi-card.xhtml b/target/classes/META-INF/resources/templates/components/cards/kpi-card.xhtml index 0a97208..2da3975 100644 --- a/target/classes/META-INF/resources/templates/components/cards/kpi-card.xhtml +++ b/target/classes/META-INF/resources/templates/components/cards/kpi-card.xhtml @@ -112,23 +112,23 @@ -
+
+#{growthValue} #{growthLabel}
-
+
#{noDataLabel}
-
+
+#{growthValue}% #{growthLabel}
-
+
#{noDataLabel}
diff --git a/target/classes/META-INF/resources/templates/components/layout/menu.xhtml b/target/classes/META-INF/resources/templates/components/layout/menu.xhtml index a276291..225cd01 100644 --- a/target/classes/META-INF/resources/templates/components/layout/menu.xhtml +++ b/target/classes/META-INF/resources/templates/components/layout/menu.xhtml @@ -31,7 +31,7 @@ - + @@ -184,7 +184,7 @@ - + diff --git a/target/classes/META-INF/resources/ui/includes/membre-form.xhtml b/target/classes/META-INF/resources/ui/includes/membre-form.xhtml index 77a14bc..c9c08fe 100644 --- a/target/classes/META-INF/resources/ui/includes/membre-form.xhtml +++ b/target/classes/META-INF/resources/ui/includes/membre-form.xhtml @@ -133,7 +133,7 @@
- + diff --git a/target/classes/META-INF/resources/ui/includes/organisation-form.xhtml b/target/classes/META-INF/resources/ui/includes/organisation-form.xhtml index 82ce4ec..5e3914f 100644 --- a/target/classes/META-INF/resources/ui/includes/organisation-form.xhtml +++ b/target/classes/META-INF/resources/ui/includes/organisation-form.xhtml @@ -487,6 +487,7 @@ p6SBD_#6ogdFfGV&urH{tb++@dd84lah=2$$L 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 delta 2012 zcmZuxX>e0j6#j0u``*iIT0&d;pwt$+(U!(S*%GioDNtxyXbV+DFoZ`bZIhUUf@@H~ z1>E3Tr6?%4)D2}b(yCAttHX>xnDLK};tzlL3%79w85r=qq?BdMiUQ;^$gO&`DY!B0*Exz9Ty#FWIv9xRo1+Q}F+oKM zN*PpAtJ&<=L(#TifMHbegt`sBE}yHz7ie`guMY<|`POvk9*&6&<>IovJVk*EcXCvy zn1soq)8bcTN_~ooshB1dbAf#Z+#DViGcilJ&DmBEJCZF(8zsF;iD zWRA<*^i8#E8Pacw+!PJB1zJ4{YA~N;fr^Ew6<5sbBo`K|sDoGhXsLEIU;CAn#yUG%a5u+2DpufLQ6Vj*8{Ee*^2S|6)4;~5n@#Lx0n`?GkC<9QV?P|i6@j#PtPDt1GNdCFx?XUMn- z4Z{`ki2e3a;+%bhh}esSM~#WO_AJq_M!YFaQJ=rv>kBm-sNwkdmJ$!ciQ@=e@J8*E z-KLTbhlp?-7oL=mqhG;i_?+VlqnIZ}U&@&=0}Lj{2)ea_fF7>y@I@jz>3?NF;7>=6 zl3y1Lwr>n^d@U|GrfCFAnlcmYP>EW>=zEFw-C|binApoCbHGgNNLY{#nI`TP+GUak zpkNPrh#H(>&#;$xD`ATWGipj}H}Ni_%s47J4t|&z6AaI`giuR(G^~yINskOW=+qQ5 ztj+lpnmn@Nk~mWOFoL13v=5^gdRQ7UV;KgJ=Piq4`~V8;C&p3iwrG~qDC@xm%`$*8 zxAg?d-L|8sJc{YgyEJPYv*Vbj*#@ysv&FG!5Zwu(nC>b*{N%>D&MhU(hHTesQa{>(ID&>G(u)~GMqSPauNx(Fo$GGsWVq#o z<1XjJnw)f8+84v44854(=0j&&G=BXodE{^_R07h{lvBM|FHnV^h~vp4;P7J$w$ea$ z;}e`9dKN$6C!$sO9T$_7IjQ6qnQTzzWa){$CDEFLD5kSm4s|w{dY^}}7)LMXc$CsQ znO;aYipW(7&F4gN=Av*F2+*6ig&w-CsHE0Uq0nx^hX-%aV|R$?VcbQ@ETnX*(2v=a zQZ>HEJW6ZN&*I4ADCGEvqm0AFsVtbwv2w&3TCP!vKf=fD^XK@V`ID$mG@XqJ>wNNJ{8T3)e&-3icnp*JpP`SwQ#egKg}5(q27}Q41NI7}2LJ#7 diff --git a/target/classes/dev/lions/unionflow/client/service/AssociationService$PerformanceAssociationDTO.class b/target/classes/dev/lions/unionflow/client/service/AssociationService$PerformanceAssociationDTO.class index 79a6540742de70ee0731c2949edd7f5cc4ea9dd3..5179241ce1a4a1b5cdc7f8e8985d88b4c65d68fa 100644 GIT binary patch delta 202 zcmeAX=@Hpr%*wixfrVk$WJ7k*$-b=WjQhZ>E>;cJLkz48hbP}>6Q6vJ)r#>LSX_=x zgY^_p{4`iRiOq`f99Vo4Q2Y{5{4!8HkntK&%$D^QkbfJju8ZA@@g7*+Ep`poM?mq% zU~xGPE5>JF@jMQ7HilO~iPvC>O&pd?4DY})Oq@WOPe7T^ll3_Rm>9lIZsfFKWB3IW L`3+Wki_-`IKs!DL delta 202 zcmeAX=@Hpr%*uL!fra7XWJ7k*$-b=Wj90;|E>;cJn+&WBwhSX_=x zgY_X${1I3@iOq`fDOh|HQ2ZrO{1s31jl LLnT<7(frTMy@nT@rAfrX)R@3yMCkHZ#Ocvl!oam~~Xge`ia`JjMev#z-+}!*; z{eZ;u)Rdsq;)49V;?#*d3>f>M3PiCfu$fpW3e;`2xrH%{k#YLu_e{k&4VyfLS&Q)n wObLGDwy-Q^o4l0UV-wF8W_dOSCI)|oK!#wTAB4bcMurduPM`=QLns3$09qPIYybcN delta 271 zcmew%H&;R6)W2Q(7#J9A86w#km>3yMCx2uXnY@NWaiXg_i;sq<=VU`BF(6-=KQTQu zB`CGHAV04-)g{D#;z|RSxk&N?X!14_3sol1XVu=E#+b#(xNP!8rebWyOipLkV*C!1 z#c4+kw7y~CzjFBN6NCyMy2nJ376N*rm diff --git a/target/classes/dev/lions/unionflow/client/service/EvenementService.class b/target/classes/dev/lions/unionflow/client/service/EvenementService.class index a2b323832ac1799eeb41482dd07cd760fbeb6d18..3a3e6a116d9cd455cead6a3de119268a66981fee 100644 GIT binary patch delta 422 zcmdla*RMPwgE4X98_mfJnUzJ7^K*0a^YjA}(^FG|Qi}`n^NLd^&i7$l163f3O@Yni z11r;AFv7`VKJOeoLtDN z%J>ME7CcsIuqiP51NDi6jF!OR=24>9^M zOA7ictmhRGArvx1{Q`-lM~s6Cs(s-GJXTIcCc!({$gNd_&qt1Lwxc-Rx8GTU~wNd zO*Td*23AI9u*4)bD@Hc3!~-@hRxY48H&|Sa-HMS9DDKKC1QZhniydMQVH5+3NlrH4 N&|#GVic15ictmhRGArvF1{Q|5lM~s6Cs(s-GJXWJcCc!(eq~@~_%=C_Lwxc-Rx8GzU~wNd zO*V$VK#6}~iAii$jErE32W(obtPHG-Y+!LUb}L3sptvh5FHnpREOv-Jgi#PECOO%F OLx)uqC@uyRPX+*)q$7|3 diff --git a/target/classes/dev/lions/unionflow/client/service/MembreService$StatistiquesMembreDTO.class b/target/classes/dev/lions/unionflow/client/service/MembreService$StatistiquesMembreDTO.class index 83e2f9eff86897f9bceff60e14349050245396b2..f6c224d61bdc96ec0f67b9929d07a7a9996344c0 100644 GIT binary patch delta 197 zcmbOwJWF`PK^E2}3@i*wC+}wyoqU@`opB|YCBdq}x|V^JVcld#cJawEtX7O0!QyLx z;#+~@+rZ)#dO z)vaN-V!Q|z{{s}i3KYKv7I)yVV!R0!pTMEPdKV~u4=jEKDE@FVKc_A0Q=r(h$$^}n E02qTio&W#< delta 197 zcmbOwJWF`PK^E5e3@i)_ChunxoqU@`opA}6CBdq}x`Kg~VdZ2-cJawEtX7O`z~XCw z;v0bC8^PiqfZ|)g;tp&YtUG|>JHg^DY*vhWfa12S2Y_M+fntG-N5JYb*fm&B0L4y% z)vaN-Vmt#D{{s}i02IFn7I)yVV!Q$tpTMEPdIKna6D)oOD1K)$Kc_A01EAQ$$$^}n E0O$@o8~^|S diff --git a/target/classes/dev/lions/unionflow/client/service/MembreService.class b/target/classes/dev/lions/unionflow/client/service/MembreService.class index 2e69e30890a5922fa82e0e9e51c01bc08237f6a7..642118d9739e737414d710c7259ef468ec55bcdf 100644 GIT binary patch delta 1599 zcmb7E$x;(h6uq4Rh@gZ_QYerFB0+@!il6~y78Mjh1{u_lG#DTWro-SEP@K__>V-T0 zLD^ZBAK(wTvC4Aq2UspFPj|X`sZ_LdajI`lzkBYz=iSZ^&xZ!%r(f?s5>YE9b4kNd zomgb7OSZW*Ubkr1xLp27C=>~M27I%8V2~FUBVmE}a%30^&W3%lr6|wQntall?PQDS z&~(22@{TL9My6wYI2i5cL(@^dGZGH-{uq+GrQ{x+))V4)HZ|Y1W|O&<$7OR nypO$4cy6gIc|m zamOUiF12|aEj7{!#XvnLo0T%DNiwOTSuS0`VJdTKGAB|_(kZB=&UvMCMJ-@kGuigj zV9!t+&Pw+K`F1>{0dt^*0r9$nIu%0<8rp|f>JiCIq%X*HUnboz(-$-8OA@Uepvz*yVv7%=u_3ym*iw^E!zd^1 zk+e@Ez$h>VTm{B~31AYK0#deIljp3&YFg4tB0~^BkAc8EZGp~F+GvI@zYav2cP|+M1Y<{A_w{}Xp>$e QHpwwZ35ae&Ws3~I0T*%4761SM delta 1521 zcma)6$5Iqg6g_VO%}5-a5eo)pNP>YNief;5IwnwHBq%5%0wRh^gJNtkVPIqR!kzws zRTewTa_7dKe_{Crt|-szz#C<-T%79LH=G;0KiB`N&Hc9g=?j1+ENbuw)S2J4kl7xL zylJU0>$GroATcpMH9RvrJu1*wWiI;qm+Hj_u@v|I^e(;EIs(4u0&PxIk@+Jln5N-{ zK-^KyiG1^G@NLM4ET$<*M*$y&LT~NIT__${MWHnSx!dw>yh6WEaxN zX8WZ}zu<0a8~@g}?xA)s_R&}FgY^6PkPW7hiw)A;gagh%0v=@3@i>6>GhbjX|!hrNea8{(GX$ZEq;%W!P9;kY#TPoN#bI+6~S zcoL_a0aa(9lWFCUiis|wn@A9+i5{Yt=p*_Gdq8Kbj?3BQI_jK~&tgETHcyoN63$$%TKmJm$76+)f+)iZyjp#u{C*gmGME@y=aMFr7?U$wei7I9D*q44g7k zUQJHV_-mM=Ek&KzlN=+1^t^$a>I0c(7JIL{Jdm0h^?^9+nP$lBKSGRKDMM~!&dI_L z;SRINOS3cGP1W1Iq~3;-N*=V>^F54S`B@}gkq=|{Ez<*wv;lrR@?#Sos7LjD4tVF52G=UKAAE0Qjd&>Ifs8AGVz#Vnf&6t~bzZDij2pq~X0d9pZUu^O1B>5dH39%8ry>6U delta 105 zcmbQhGl6GAH#1|;jMQIxki$#EwErK*kE7m@R7!kY5Yri%-^K mwPI`ltE*zwU~K`4w}Qp@0mVDO;(TlxtUW;SUa)u&n-Kt4-yMPg delta 105 zcmZqSZQAYI-PsZIW88G#b9wt24%Y816X9S`v&qsEboj=vRMsQ17*0%Kp7|l zrBH^e;uorkbK7;lJD6I z%E|-zk-QBjvbsD|U-%cP0IvLNYAbK#clLn};K6<(f04i03nqXMd*4_Yk$-V)+VI1t tsktKNNFn&xjCZu>ctSZwXq?5nIzg4BN>Syp;+Jsfr?KakA&Vow`Uj+QM=$^Y delta 240 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 diff --git a/target/classes/dev/lions/unionflow/client/view/CotisationsGestionBean$FiltresCotisations.class b/target/classes/dev/lions/unionflow/client/view/CotisationsGestionBean$FiltresCotisations.class index 6f2af6d1c133a569cbc5fdc3fe62a4dd07b14e19..28cf7d107edeb3bae672d4abde81f81e7800db3b 100644 GIT binary patch delta 213 zcmW;CI|{-;5P;!X&1^PNA%#(kL_`#VD2NY`kOd1B3sa=F@dRGN&UV1oD+D2zvGoAf zg0ErA|Kl(G!q3MTzQDpaxcC7NztF%R1QMVt%MeM6QcQ%RGis~?${HPHlO7lgkJ?gW zoy}*#qzl`MZEftywxxlqamSV#JGqlT>{cy$ delta 213 zcmW;C%?bfg7>Dt5@Siy|7L>*)pRphoCbOX7L@8`6tZiI@o3OKe%hoMS%FWoi02}42 z@OGBZujlNYy*NPmE>d_17f+GJOXTquC4593U(v#kmKez-?V(`{Sc*25Pgg`TO%+Qc z!MG#}MEsF-LDg!IK+T?#M;*%R$tQa-H;unG9x84zQ#EsF-L0s||%;^coU;*%R$tQb|m;unG98bEPP zpm-po4p7XN)d0vh1gl%gYQ<;*R`-)tgVh2kZV48*WwT zEPe?nz6&V68z>&gxDP01%X$dNKMYp4ip`4g7+BpeHVxKOK=IRHaXWS^#&cltK6VY( tOF;3p@oQjlB@PYNTR`#Kll?gY8ShPA$YIO+2*`g7R`-j;2mk@_IMe_D delta 173 zcmZ1@v_@#dV;0W23@mI*7`WJ$O@6~-!?<#CAe-o9J5~+WwG6Cm>n8ta6`$P1YQ?w_ zEPe?nz7;6G4JaPSxDzO5%eoiH-v?H=ip`4gAXwcmHVxLJK=ET>aXWS^#*<+2K6VY( tvq154VDU>p@rz(_B@PYNt3dH{PfAvES>-s5(`!U delta 45 ycmaFD@q}XoJ2Ru-WDaH<#?Z;G%(kqN46JNXliQgC8Dl5k1o9Js{G`d!ES>-pM+-9m diff --git a/target/classes/dev/lions/unionflow/client/view/CotisationsGestionBean$OrganisationPerformante.class b/target/classes/dev/lions/unionflow/client/view/CotisationsGestionBean$OrganisationPerformante.class index 11cf8f03a6074ffeabeb321caa6394355c4d9e9d..9d7f72b53e50a0eb0b7d1d8fbd69a450fec81772 100644 GIT binary patch delta 125 zcmZ3%w}Nj2KMP~-=S;rO<_Q1< CWF+qZ delta 125 zcmZ3%w}Nj2KMP~VQIBo+(SVDU{r@o7Nu>67oXc>)0O CPb8lJ diff --git a/target/classes/dev/lions/unionflow/client/view/CotisationsGestionBean.class b/target/classes/dev/lions/unionflow/client/view/CotisationsGestionBean.class index a3a5c6ab9d3985fcf230302f69b97e1443cfd62e..5aaf9a5a4af0e9cb29f2fe8829c0f6623562ffbf 100644 GIT binary patch delta 4566 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 ZUlYUx%RT;{Me_4~SS>l0hn7e1{4aTnYBB%- delta 4601 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 diff --git a/target/classes/dev/lions/unionflow/client/view/DashboardBean$Activity.class b/target/classes/dev/lions/unionflow/client/view/DashboardBean$Activity.class index cae98b1fc9ade2d3745ff28e0913bd16e88413aa..cbe5d4b0de5fa8ec5f9b8cec1d419c9c76e077bf 100644 GIT binary patch delta 161 zcmWN@yAHu%7zW_)`=YIOurz7HV(K6!F_`{I495Q&#FdDx+pEqbP9cO;oWdq9L0pO0 z{m=A7K@=o8tI(m8#NXIO~o;-(TD_$VBH7}8w zukbcc5jl$2XgQiUc$jbTHQ%A(Dh3i)bB2%k9)YL%fVQXjh@1HdKl3wczUB*NzTzuh Ge)A8&1ueD! diff --git a/target/classes/dev/lions/unionflow/client/view/DashboardBean$MoisFinancier.class b/target/classes/dev/lions/unionflow/client/view/DashboardBean$MoisFinancier.class index 0130a890c956b12cd16be99b1ef213c0785f4821..265dbd526ea3ec3872cd93bb775e4769624a1281 100644 GIT binary patch delta 129 zcmV-{0Dk|87>O9L90(D{00aWZ00{!f02l(w03-s-lPw6x70v((0?z;q0@DB&0@MH` z0@VO70@jlW33vh7lY$970os$m2~h#ulM)I>3Elt&0^a}*0^pNj3Z)g}022b`04M_H j05SsS06zlg073%llN$?A0q&D*3q1kvlfVfVlfer}XWu7E delta 129 zcmV-{0Dk|87>O9L90(Ds00aW800{!E02l(V03-silPw6x6|(>e0<-`P0=NJd0=WPr z0=fV%0=tt533vg%lY$970l$;L2~h#TlM)I>3Bv#d0>l6g0>zVI3Z)gu022br04M^> j05Ss106zlF073%KlN$?A0n?Lg3q1kUlfVfVlfer}xN9V* diff --git a/target/classes/dev/lions/unionflow/client/view/DashboardBean.class b/target/classes/dev/lions/unionflow/client/view/DashboardBean.class index c397708f5e61ca7b780dffb36cbc8da99e227d91..c69d3a636b339c10356dfb4a276a584199a8d674 100644 GIT binary patch literal 29488 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 T2-M>J92FbS8+(m!QpNuPC`8-5 literal 27996 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 diff --git a/target/classes/dev/lions/unionflow/client/view/DemandesAideBean.class b/target/classes/dev/lions/unionflow/client/view/DemandesAideBean.class index 826029615999c206c512bc94b7bdb3f87170d320..e232bfc9164ab4e4b579f5025be9e1e0d614d3f3 100644 GIT binary patch delta 17 ZcmZ2{hjH;8#toain3!K|-r|+73;;{E2i*Vw delta 17 ZcmZ2{hjH;8#toainA8O}Z}G}k1^`E*2Ppsm diff --git a/target/classes/dev/lions/unionflow/client/view/DemandesBean.class b/target/classes/dev/lions/unionflow/client/view/DemandesBean.class index 5014ccff7107f940d4822dd224687866040d0ac0..66e4bd2014b642036c04bca5fd6b48e4fb066fa8 100644 GIT binary patch delta 17 ZcmbQ*$2hf*al-{|CgvBLFKIhV0{}q&2JZj> delta 17 YcmbQ*$2hf*al-{|CUt?$m$aRw0X*skI{*Lx diff --git a/target/classes/dev/lions/unionflow/client/view/EntitesGestionBean$Administrateur.class b/target/classes/dev/lions/unionflow/client/view/EntitesGestionBean$Administrateur.class index b8887a808c3d6450d97925b63d5f01e3b549cbfb..84f87bb8a2f8444a9d32c1029bbef47e57778beb 100644 GIT binary patch delta 57 zcmcb|evf@aBNOBG$@`f^Cr@WmXS@q!*|I)lU}b(ZnUOh=@hMm)gIR<1B~a`YP)vOC H8fGH^S_l&` delta 57 zcmcb|evf@aBNOA*$@`f^Cr@WmXS@w$*|OeeU}b(VnUOh=@iAB?gIR<1IZ*5cP)vOC H8fGH^Sb`HG diff --git a/target/classes/dev/lions/unionflow/client/view/EntitesGestionBean$Entite.class b/target/classes/dev/lions/unionflow/client/view/EntitesGestionBean$Entite.class index 27566ec5db50c88286de5b45868c1b394deda34f..0d534d07a19861ff7a6e6dbc2f1341b943c462a3 100644 GIT binary patch delta 768 zcmW;ITS!z<6vpwjXSI!yBxiISM;o0PHBB%mlHxR{gtBZ(aWV?KP;?>7GA{%nl?6pU zBuJ|$!bC^|yO$3cGLt)g%eq6uxXLHt>D4Qs|Ka=RXNwXYJ zDBckxm!qG&jsZz42w7#oF6 zNL-SwzrZGq?M$-NSGfxN2AeYW3-(uDD^$d=6g>X`Ip+WI(dJb{~{>J(;=R0Z<%8Q58K=k0){nvKuE&%;}c7X>ZV zYP>a=r!T@U8Gi%6B6CBwZi8KuXeg>WOxGLA)19y`)6IlRRkuX4D%2fm&)VmFfUkc@ zPVSL8*_F;mn0hfimYVEOz8E$0Q)=Npy1@N(nFpwi2dSN7(m3Cej+_DC5Q^t0hEa^5 a7)9{{#Sn@H=NMia$7`?gpVA~TxAZ@Q56>3> delta 768 zcmW;Ie@x7A9LMqZ=iWZ$!s@E)I;ZZsq8kfiCSUh8TOm!yu}SWCthB0Qn zH?~+aH9wXqGc>95V=3B{A6qs{jXxNFur*`Tme)Riz8~-BKKs7EBax9v$3&9rCQWfX zq69}5xg0&@al~YXE3BSNvCGzdq#gaD0v>5`S!zH&!3JSN#+D{q>YW@+w)HUVgRueF zM~O?Z^(bu2*!C1leUT>ESJ*dWO10FuJcIp#{Wa!uTk4-|c8B8} zlcbppwgXwdyKNm0n`*2e%~I2(KF!vNuq0!{uoOx5*xCb2H&*4bluxe1{IGzrNm#a6 z>9)>=g^WqMrRK?N*aFx>W4YcUwMc5b#cHvc-+F&%vQ#Y@m z80U+BR#*bQ&lv@%3Q?^>wHnnLR7I%PqAEZ&=8jMeucyPjf$BI)4ZM+#aYS@xzO2h= zb(dnh1=})gw_>{u+fr<6o#hnIJ1Bv7N<(H_-fm14m@3J~dnk+dQVv(qT;4}{yq}hE zHHG;A6><%gbFGy6E7TE*`E6Z?8;|0qsH(^8mdZd#ABUYVcis+I>ZI`r_!;8@etdMSmi}CmHi;@_$brbBeM1xV)Y`V^1NMD1sm~J9iqHaiW_9oRP&Dp!0?fCi* za`Ii7o>S($kLdxXhfg}S_{Fu&hH#Kq(UE&yB;V0D0T~as4lB=_ydV5j4K+%Vy cAH_=)uTb=&IOH6}YeRVL4gS+iNy;tx4@xG_2mk;8 diff --git a/target/classes/dev/lions/unionflow/client/view/EntitesGestionBean$Filtres.class b/target/classes/dev/lions/unionflow/client/view/EntitesGestionBean$Filtres.class index 9ef79095c471d21e195e4b3b68bfcf50e42a3429..54e49ea1225f685da1ecc33234776b207516099e 100644 GIT binary patch delta 194 zcmZ24xL$C>EoR2IlO0$^Cx2j8XZ#6f>9T0B{$*fg{x|s@i}>V17E2};MzF*|pad%e zD+?P?B9M_2C}zvb3*_^G70zU}ViW|cd&#Q7Dhd=A1B>gjSusk2#cSC#SY?6Ya$xa; zKygK|xFEX*t13`jZL%GEAfx8w3GBA4xR#Tw38CblQ!w3Mp C&oFEN delta 194 zcmZ24xL$C>EoR2olO0$^Cx2j8XZ#Lk>9T0B{$^lh{xkUV17E31P|6qxOKnZ3B zRu&eZL?9zOP|TK<8_4GYE1bz{#mEm<_mWkERTwBP0v6Y0vtkqni`TMguu22PWx(PG zf#ULDaY1$sR%M{L%49qCKt}b+6WDE8wSjycu)3G*R*d>!b(S0&tj0ib6R>zKhY1Dv z<=7SR{oBJcZ2(d&w@&zm*sQ6JjEqRL$8I;r{rn%FGJEFC*|Vav%Bw1;=2Xs~Gkezj z%4A7yi$kvNW5Ilh4t^nViXbG!sMKEWw`$Exmf z{sW0ecuj10UAo~7>A`tu9L`Dv-jsfLO9rA%;_$X4;k=~akCKW%NjlC+2Huq{{8{qx zo|NLRZujU+v3|fZFB;7(`OSxP{}JrCg5GF%PtWX-hJUbo|77@A5sw?}^iB5fQ}*r_ zBmV+x@FffQn&o_h*YPb4-$gsVM+fe4_r3@oNHBhsP&|@Yfy9edT;e5D#U|6lN9x2^ z8pL0=Nmn@}-Q=*?J&g#20&>*S(_9>zZw*B!dCc?mrMlvL!qHiJ!e4rs#V)7xcAs%Y zN`8NYiv#^75)Kw0BZH7E(HJQ)$d*`?GK?yT$2@rgb&`N4NyK^?g6$0G6-mY!hScT> z$;ohrF`P8C%W(IQ@m5J41uJt4lnDrtOoYl9J~0;Y;=)iFhYT5yJZ3scvN2t9ut0Lr zD0x`JjJHUE`lt~53xvr8*ERtzhB2`!?zsClt z#zv{ZZkdk5GQ<2m`>1s;d}N+!%9&tY$k`&!!j0rcTbFRP)FkBYh*%D9SwWjCnZ_zS zA*(T1p2HAnViL{Bku~PK+*1+jNVSmKKx!kYEu;*oO{6xH+DarB7zH%2`2bW0~DyBSRS&Q zk5J98cAl#HZ0Tuf@PeuhozxpP^+9L#MGy5uoOZ!*^~WgficAeazII2U+EJl_n4>{h zuEAKTq1ddCVY~hoN3<7?YdB771Ws#jyrq3`Ui;#T_QOr>j}CRR;`DCw*N z#ZL!_e;19B039UVHClRUtoz5ZjS`!HE}95`O+q()65TZgv6_k`9f}l9L%KTYYXp5g zg&ZA;VjX4PnS9Wm$qL3GNXH^VT|6-k37X}uFOL;xF1PY{VLp~>0aj@tTC|A9i?LHn z(W(=1Ld$SgC!tNt@fWSYM>+-9bQ*4J74B$_xl>VNodF-6Y09S5hs|MVbJ0`hp`Xr2 zyw)O77t-J&jMT;E@>IKtsp@0mras+wDaksL^@!32l8q#nkz7vlS&Y{e$kmlRu`i;D zWHZUtymJjA^$$F;mgG7%Vm;{=Q#>u%T&}E%FeEpT+)Q!{$*m-xC%KK}c9J_t?hAX7 z)GkuHNxj6E_wwcaqz;g1{l#OUw3_CsJpM|rSGlCtL{*QLaM_#C1l631 skAoNgO1&-D;DhNL|HZL`<8|h7S{GYxc==d1bA1y&mQOAJwsaumCyW3f{Qv*} delta 2144 zcmZXVdsG%w7RC2IAD_IGhXMixhyp?&h?vGxFjPQLc_W~Lf*>^t_$m~6m`FpZa79wX zv>+`XiC@%6qfI$YO)n>N#%7k5&4^8FbgdrFv~0@eELMNC#=q`4=l<@!`|R^QUiz4A z7wPowouRV;5-nd0IQiJyWrn7wn{szA<2K2)%YN*{phe|Xl@&RaYirl6UR#-(w=mub zo6%^GEu+zdW@4_Xv)*Ie{2i2bzl*jVv7ZsbG?VS&`SXo;GiH3`V($F~GWM=(5=>oW zkeM(c+;%(itgE}*|BEt%NkMl1AcD=oxZqLtmSMtQLw{Syta38Iv?phJ&VwD&;DB_D zMh4t4A0EgwUnXa9p=n9+GkGZy%++XjaG_E~@Wo;Tq8L#qK`cshX1`#(Le|pwUJ&;t}-V zQ5-@8`mqVe)!0F;4q*$CSQ8Ie}MnJ&l)C|4F>B z>v;^|5>DZ3*i`cXzQfD-34^r9D|E-J^w8LM8cs71Lkz)doPytS8qP2lZ!rO{GZDXI zD&Al^-sB>jV?KV*QoL=eNXwx0J#F)SV@od?b6(Z|37+@}lW@UyPsT8t{-V>nq~?Eu z7+gUXKGnH>hBCFV0mJCPb#35Z+Qtq11~*mkH@Jvzb>|koz-rnv~nfw*+>UAaSZp;g)h>T$2e|e5MB^~CoBP`DKp>d4Lkanzh=&Jycf>&gDd?_ zSXK%HZ4YIIF+Ujo+Vo^jMkvEEl@W+n1LiUk*^ELdr=m(9uUA7F8H09C$4<_`KF-8Z zHE4)&ILml7W|o?jh(9n17nyAPa)FhJb718>crgz?OoOlb7s?F8a6XcliF9TmkNPR* zLe!|Q>zS?J;~aD_7kij*3t!~Rlp>5}v8pS<6tz5xOOVW^DB&_JWf{sfui^@9WCb>{ z5<9pGom`17R^cG4af~&lE&GIZ4IEi(Vsi?t>oi)gk-s^W6J>o=vj%fLXMbQb9N4Nd zx2hYDVLIC}liTnB+ti8e$l>E=W8VGdQf^b=6H4w-a;K8Jl-#Xkr;=St8YR1x?D2UD ze%y<2?$dVnV+MN>%L7Q{GiGxB2Vu|Z9ewa-zZ&v9B6wJLkEkifkir)*n=fJ!kE-{_ zjbA~f^&~twV73<|aL`OG@-v?ogj!FlwL|7=@puzln8!0C^`62|>l<2sQ|n&lZ-x1M zOY3v2f7IH$BW!0;9zQVGixRCLY3;%Ym$W#Z7fr+BME-ds|4{Q!j8k!<^|CToMrzB8 z<9XE_(AqVv4Qnl%|1{G|60J8hzp43n(@}CV`fE7x8@TXW?d=u<_-~!ocgWyvWbu0x z@+TDY2c6!JsOBBi3v3UU4zkG(B39VRDAG-_@kFb5VViiPTYRujd~sa-aZ>KZDG9)!1mcWL#M?3nA4?FfN-%~c1UDrV|B*1< zk^AT@;T$btbajzPj+F?GlPR1aQMMCHyBHk<7nu%MnF)7!0OKSM(GrhXNkD=mAysCn zt`ybvAaW!X#WKg#mA&ApKY@~t@sfc+nXe}@alb6EMU_W0C0n<0^ukOtS%!C{3>Tyvm!$$Xq!M3Al{vJ0m9++r@{n;|vBht-nzjZ3 zQi~9&LyXj8hOAS8>oHe0n3f7p^ZJV3;0C2ODYY39(x}uHrJ9s#R;mRHr4_ldRq4LK zHYK+!*{=6JjxhPPp6F2W2_3?dO7AevE8|T|<*L9=CA*X~O72#&Tgg32_9*$3l6#fx z^LtvUUZoBwbx>bEq%S|GRG$+4KkExJ)~f03H*r;Y`mNkqmBo5r$ z`J8CpseU;=PXAlV;9$87N7U$gMc2*PVEI(nVa-2NUk2q7%hgeimTt{Ihoj~1mTQ*l G@cAE5&Ki#Z diff --git a/target/classes/dev/lions/unionflow/client/view/EvenementsBean$FiltresEvenement.class b/target/classes/dev/lions/unionflow/client/view/EvenementsBean$FiltresEvenement.class index 1172d2f29b8800c01db54af7f7c5248bc6c42a31..49d4db47bd7780b43c58820b8b9d37a4a80f2fd2 100644 GIT binary patch delta 101 zcmca6a7|!?Aq%7M*N|XNs*~*h`SpykWC-<}3GOA5J z3uJ3dmS?kN)SMj47RabQc|DM=Gx;r$tvA`8-Ih^*axHrxqv7Q9K(^6jUJg$HbJ`li delta 101 zcmca6a7|!?Aq%6)*&XfNG*)Ef9Spyl}Cik=2GP+Mb z3uJpvmS?kN^qL&Y7Rcx`c|DNrJNYe;?LXO`-Ig(6axHrxW6K58?iiOd1vH_duK58?iiI(3vH_dug0Q@;*%3utr*k6;v0eDnLzO@ zpm-o-4p7XNH4n(o2dnF3vtld+tGmgj!CDLyF9D0ovRg5hfyHy#HCQWv;+0_WjX?2g ius9=!25T))yl%1{M<8Rvu#;K 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�yX_f@1i4vbj5B+2?sGZ{<(J~`r&gxuF!n! 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 literal 28801 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 diff --git a/target/classes/dev/lions/unionflow/client/view/MembreCotisationBean$Cotisation.class b/target/classes/dev/lions/unionflow/client/view/MembreCotisationBean$Cotisation.class index 061ddff54c01364629a3b417e759f7f843268df6..a545036eccf530bb4cf612b4a7ad957c5ea5e688 100644 GIT binary patch delta 343 zcmW-byGud=6o=0_)72Ewy2Nd63D=;Y?jO(+TnGxZA~EbiVf2EuBrq+)UcbSt7E1_w zh;Vz`)Y8@(4b4r>(bl2ugWvZZPCZ-?*CPh^BWm<=1SP}fDBcZ+N6_K1c@znc!((_< zj^Rf+jy|u=i7F|Avli2dvJcn21d02j%7cl5| zcnMYIWqkSH%oHUhO^dQhE3!rz$>xQm5UGutb>Y8;M0h6r)Rb+>% zvP(7DBUkq6K@R9i3TO-Upgs6$71cOYqol@>8pmp!s8LkoC0M2*Ii+DaqnK1EE@k&S x)XY{@qYI5LHM-L1TBDjq)&H{tEp^kSwA|<)x0I7R+Ln7NhzrY%@iWq9=O4;#YIpzu delta 343 zcmW-bJxD?U6h`m8)6*2udcH8V$`&&C%AS?Z9`=<+@=v>?REEMbe0J1hb~E;c6&S_0w!BIs>=p7 zWRo5wPfgjPN7<%l$)PJ0L3i-eDyXrm#-18QHTKmgsZmhlC0M3KIi!>vQCf~EBjx6I wsGY5fMrRsTH9FU*rqP8)mH)G`4%Y;g$rD*bCug##GoA#pY#C2YKF<=!cxJL9t1aW%$?>d#jOQnB1hOwo zeh*|{n(WAC%XoQmJzF5-)yWru>}!+x*#jAGOipCCWxP3gKKn+&I}8y_cNt=t?lB}W U-DgN)x-&VEBbxEajw0PZp>vH$=8 delta 117 zcmew;_)%~}Fbm^?$rD*bCug##Gp+=(Y#CQgKF<=!xMs2d#jO!}`|z*#jAOOipCCW!yP=KKn+&Jq!^{dl_Px_Aw+e U?Po|~+A}$kBbxEZjw0C5s1QUCw| diff --git a/target/classes/dev/lions/unionflow/client/view/MembreCotisationBean.class b/target/classes/dev/lions/unionflow/client/view/MembreCotisationBean.class index af875ffd2581e9f7b741cb82cb5e3ba604f3f35b..6596b63d723ba442458694504bc6c1e025e900fe 100644 GIT binary patch literal 27440 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 diff --git a/target/classes/dev/lions/unionflow/client/view/MembreExportBean$ExportHistorique.class b/target/classes/dev/lions/unionflow/client/view/MembreExportBean$ExportHistorique.class index baa685d00a589ae76c2c64e52daae3281edb24ed..7961f1bc8a0fb6200815b5f9e8b36d5361d0db88 100644 GIT binary patch delta 69 zcmaFH{fv7>LT6_Ee{ delta 71 zcmaFH{fv7EZ+sWsEyhW@o07OC-M*si- diff --git a/target/classes/dev/lions/unionflow/client/view/MembreExportBean.class b/target/classes/dev/lions/unionflow/client/view/MembreExportBean.class index fc1c508c281b54d5810b4ddc8d265769e0eeb7de..9494acd98eb0f115d03bbdd6f1fb2c5cd177b458 100644 GIT binary patch delta 1406 zcmaKsYfzMB6vzK(SuO&#;li$<5WA*tAh#8fblF|@2Fo=eXS+xO;%Zp1C^S(Y5{rx= zbM#m$7e}Uph;}lU>Hc9fw~z8X})i)yUFgJ?i4yYgIjd8Nw3h`}R>$D@JQ^CHP!hd8W7 z8XA#@byB(s4`Ds(;KK&_+OQGN;R$R!O!=v_I4KwT1@6Zw6yS_p;#rjAYdnr`MU0gRLJAo_s13%+WY55m!Nz>c-o1!sE@%TsD z-XSBVD2qTQilCJaQj>!sse+Gj{SVN^~ zAP;<0hD}tCHmX1eRq|p>5oPeVRs(li6rQjc`J66Rt+z3D7;75>#(xlY2*=yLRCT6lu&h$JWhp2ozwnZPK9cD%vnPQK2f4) zqpLJXI_`3LX0#t?G(Fqg(^)+q2-EE_)s-{`cdVV+x2!be<}lp|Q;jE-JrX8OSx9RQ z)44EZm4~u@<zTjSk*qvQSDa^sD_aIFKpkWw9!<-wQ2hQap+E)3`za>Y=k&h zM{CQvc6W1Id&|1!$JTqpl|FvKm`($}!^TTwpMy|jBMJ)TLl*4F zg#$%!3YDS?<)}pk>QRYha`K>tFPcj3SR!5O5P^FUgL+?HW*FJ;L$s76VFfbLAZAQa03N|09>&XP#sRFx2-fh1tV_vHAq*R2yp4!OC$xA5 zI&6X-Ph%c7!-Orob-_l>R`KeR=r*L_If-_&F54WoUGDDiEzPc{&Ye*35~gDpW@0zy zVh>W$gFN)2SgdQXS4JAd8oVNH2C)OL$sqgj4u;{w8#stJaSU(a3%rdp59feXOh0$7ypbm3tLV4Wvmx1SKMt?u4FZV?NE{`wO>dQlTLg@sx&i zQ6t^MmkYb%=OdI%h@njAC<}9G0kTB%XdypeH0jF6G%Ap6p>!%j3KhddW)zVHcCw<3 zY^WkTYRQ3ma$*^kz(X#0sT8ZJ46WowJC*Y%#l@7$KbVs_)vQvwpIXc+SDOtyEV@gS zEGnNBt+1%#eWR9za`=7AA|AD9*<+4nqgAB>f9`RiLO&g~svK=KaD+|eI?-BDlg+@r zHkEAtit|EtKV{fe?vUJi(PN@VMEmVp{?Zc8f7|o;g76KWr4ChI^CpLzD*g8+94hBJ z44my$S>x35TBntg*i)+K6V5U}>DW->z7^YCaxEW5rD;J-=EJs0*tMP*aeO2gy*?A2}}X^rHM& q#(AvjV_MGJt8HZ9uc}ujCLjb2bXM7eNb(>`=|QB@tMn^-5&sVmfQcLc diff --git a/target/classes/dev/lions/unionflow/client/view/MembreImportBean$ErreurImport.class b/target/classes/dev/lions/unionflow/client/view/MembreImportBean$ErreurImport.class index ccdb0ae99fe380dc1fb289bb5c76167816912592..4889d00512de72db34b604d3095a489e431997b2 100644 GIT binary patch delta 37 tcmaFE{)T7$fz|rmD!e2d-7stPXOY*3c~;Z delta 37 tcmaFE{)Tdn=H&6$f!O!mD!e2WAb8VPXOV*3bX(K diff --git a/target/classes/dev/lions/unionflow/client/view/MembreImportBean$ResultatImport.class b/target/classes/dev/lions/unionflow/client/view/MembreImportBean$ResultatImport.class index a56e1c7d34f56c6acd1bc3ebc0f48a70da77609e..5ce6930280d36f71f5bfe165056856a5ed679219 100644 GIT binary patch delta 86 zcmZ1?utZ?PM;2B=1{OxK$=_IPCb6+iwqUhjl$>118aR0Zkaq&elb+1T7C2dfoo#Xi on+2onPx# delta 86 zcmZ1?utZ?PM;2B-1{Ox)$=_IP7)2)=v)VF>O)g{&WE7u#7|52G%*Ylvxqy{zas-YienA@5OsBA{NTD0xPXd1MOT~C(vqRB=pAKc zwkj{vW{t}D@3il3t20t)t8$0lG{?5)Oq1sSPpQm}pAm5yhHr68*jDBZyJDd%n~2r-LC^m~d&S;S*3Wi~G|hxI(pMxLOJdFKt=G1zd5M?VNdt#@g(IxN zVJ*jL#Ti7K&+M23xh&Hl1fXE7_q%JGH1)Guzmu+{PX{ zbWTU-?BaF0X{Se(uh`Fd4$w;{zwxHHI4G$clEEC79FE8Y-jN9J${dc$a*oO7MZ725 z=#t%Zi^FmGi1+0bC**5BkPCb$msGpLC&opO8O%vDoKMYIPMH9wO(|cR3eK3hoHcdI z^_(*e^qNM_n)8KRD$RUo-Q5(wq8)+qp;qzw54la1VbHq>mE*Vmg=f ze*RYf{~^Y|YT;!y@roLFjb`0sGyUq&by@{F^uJR?H#E9M5+6&loqXScEH}xzZlKKz_Bmqb1_l-sr>fkeyIeECqIXQBA&AU-VUJHAU)RKW;Ob RRLNH^Ce=(aQ_TZp-2j&}9#{YX delta 1053 zcmaKqeN5G56vsd3;ojoKB#?Fk6cW&Ty+kw0%f;?RKoA5CG1AIx%Ry~cU=R&0#O1W9 z;iiwaXliewhL+V&(bN#PUZv%XoUTT7*UKu`o4qcLI@~{-x!?Bvp10pQXW#R5x360s ze|-2*9}qSbug0G-GQ*a5vTcSZIVoq(-S;-s&uwT~($v_}P*zvtq{S@0$~DV3bEf^= zJK=w7j$Peqq|!#bITtUmP3aZVb%}f=wa%G7wlh|$?8zLD?e`>JypfYI;iZ_QEC0Ks z?ezs@y8Yhgca;kn_9tJ4Q#fgqBwd4x0^$fVnyI7^w)6ZUcbP`ZZDh(A+v7i1Qb__; zWH6h_+^m%~+`=60q?UV_%M$gLQO9a-WexM#${jq*e4gVrUgmaQXMr=6yH#oz5lcOZ zG?1o0rn8t#?jw);$>#yWG*Uz}vuM%GLp0HNz}0KkW?A;SA)J z#&oPAOK0ctIM=aGTRlNBom8`4TW!?&R-0|2gUzg;%##e67x+w$=xbcYDDCZ)LHUSy>7`swiIb4O)GYi$Pxuw%_?C&fc0Omhfgkj+ zKT^uiRB}#_^$QF6Rn`Apwf%!O{!}IZVy%eEbzbGVppyK}F7qQsJ-qNGVYnUY|)PYH=vA4{d=Dvr0+0k54D$g-Q1o0W%@4=YbB@LE?v zmTfBVN-$b^P_4qKB|)#9t+^^?Uoge43Wn{2$|nM&?UzBHWZEkV?~0c7@iD0Bb- diff --git a/target/classes/dev/lions/unionflow/client/view/MembreInscriptionBean.class b/target/classes/dev/lions/unionflow/client/view/MembreInscriptionBean.class index a2b1f0e097ea2a2dc70914106ab950a1479cdc0e..280065f00ef3b286591054c0a0588c74c27dbd4f 100644 GIT binary patch delta 1953 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�r3n<+upw)h)QSSZ`%sm_I-t5#GUon`L%cCv%fO-&vwZ0_I%q7u#gwB8U))}b& zD+>yf%ua>WR!d!`cBDcMI$WWqLk`b2i+#{imlknTkt1d6jgx%9%WDb*Z=cuH;N^9B z;7>MA@dLl3Q1JTLrw#tbJn*L)r}=@usZj9x^r#K~mOSvM8(|;tw7x*_2t@f1s?Gb8 z^T2N~TKvFoDipjv&uW8@=7Dd;35X&kIZa;48Oh*vNYuOJ=p(Ss87lVbqj410rDrr% z*s^cs$kayvi9>}>tk2qdCmt(*nwfa4J8@gi#O>Hy&DRy#uRw-MKGf^bhnrkoiTH!> zUnqFJ%VkSjMIQJ~{%jjpDBJWAWG~weLz&v42hpUnUT5U6EsFh)e71>m3#3b(b#|r^ z=jGAW;mbC0aiQS(2(=6T(me1nfAAL+3Z749yWlU%10Od!^O%F9*5eBV&;PGZ7d&oq zW$H|S@HK^k=X2x^_Bj2V3qIk?9I7o8JSQ?P_#^YcC;dfs8iOyy#OPD+UXh*Q71n+`KFHRfhLA?W?OTNOP?2J+*vZ0@rT&&3s;d$pg&0(#kaeMZ5*q1F$Faf$88;ud*L7 zyklnrn+369DaNLOyv7)4{H|Lb$dej+ULmK$X{r!F8HDFqUI!}KJ8b81*E8FE<wvGEh*O&a$9{Vbwp diff --git a/target/classes/dev/lions/unionflow/client/view/MembreRechercheBean$Entite.class b/target/classes/dev/lions/unionflow/client/view/MembreRechercheBean$Entite.class index 4544cd4896b298344435423574d268214634a17f..ddd103235b3615ea6be413dd8fcf21e69e2d303a 100644 GIT binary patch delta 57 zcmaFG{)&A=FB9Xf$??phlNU3oGu{WY9x!RJK4xHLelmF>v-o5cW-G?$Kyh2v*Fdp1 HKrv4MQ3(@) delta 57 zcmaFG{)&A=FB9X<$??phlNU3oGu{KU9x!RJK4M^Hemr?0v-o5cW-G>LKyh2vS3t4X HKrv4MP+k*y diff --git a/target/classes/dev/lions/unionflow/client/view/MembreRechercheBean$Filtres.class b/target/classes/dev/lions/unionflow/client/view/MembreRechercheBean$Filtres.class index eec3a7d9eb077926e4a5fcd15c125772691be834..5be63413f1880d94ab65d1a2560459c31af98264 100644 GIT binary patch delta 537 zcmW;GJxiNm6vpxA6b~gY=E?hmZ9@hvxj`XP1@Sf-BrP2jN-^M&LJEMg^~*CR$B!=J!kOP&@) zjSj+w*w&&}3iL1VVfYBW2QSjg{YJ;&3SOe;V^t~Bk77nE@aOa! z_)GYJtN0^22cM_6{HnZyzt9C(l{Oo%$|7%kiyN)M-?(mkP2Td4rG(LC*b3WE2`j7c zXF}f>fp!pT*k@?eIsM^6n;kUz%S^MEyzc%nXJ*zC@xv-XRUmt|3J~<@&lvaQCzWD H2%h~1DPEaN delta 537 zcmW;GziU%r6vpv;N{^7-HaEZSy;zBYVtujFgcJ&WZ6g|VP!Kf1!GO>f92#`6;9#Lc zLJMi2pf5PsAwwxG=#ZfP87_i@xa1#@EQvb$@N5qsz8ub8aj)1PC&J&}w2Zw#Cf=O< z@vh2WuO$CmBDpH(+%OZmM$%}~(<$He{n+)AR#Nm4JPXg!mwYP`z3m&FgI|C@l8dx> z#^`0(6}F8TEA#Y^@ayme`Ut*Azcp*L3}2$RXRR!|VNh_t;1+(9ekoO#3jJ-$=pA^K z{sVpwe%@7s8+sr9fZh%2@(_MkAH!<2+v&PI;f>E}qfg-tH%vF>8UI+%7~OzvvOURI zc@AIGEm)JblC|=ZZ6|B=6?~ii4gQ*5$QgYD-=VMPtnAVU@D{vHpTPHBDZi!%ur95W zw{pn#XWr;LxT6WF)mH)s>7lr-t4oDQXsJM%w76m~XE|MuTD5!K% z6lh?_9)yhxt%NWw1bb|>-1HJ@;mQQ}LPU#d(c^G-KR&f@wFP4dE5*5M|Ca! z)>ZFW`UAA;FMszkeBN`2;vo@`SuGY}m3BvCmOQbTc7rj8N%a-+Ks>EpA9t8j?~Yr_ zix<>q#W(W5cu1SYws3PI!mZkkCM<0e+pgV8!eN7YQ_|8-@m=cONr$`D=fy+ulDeOA z*vyAgA?+30$Ni}Y_iOhnW$A#}LG7Aq97gKBHI@#GA5otdKc-&vEgcs>p?=DDc#?X_@2tGj@;(gS!y5Ae)|!uyHJ_kpK0~dUM2eSOwQ=*VAGtCKlIjq{U%UeOcTS_tgsthk<%6 zVX0j_r~Xzvk2e&SV9xb`O)5@?x8{TTVJGsFzwTZ4=+FUTbw&RG$|wiAU;Q z%Ha;)pNeR=*dD%?s$f~Wm6WBuV*9i!wK+VXUT?E>Q2dbkym*g#=vg`}enh?3b9j{R zcoFrA9pmp_1y5*K_AQ+hJEdLScUVx#A zOSoiaIG-zWfBU#UEAK0L=j44Y?;Ck%&*uU%tr{#C+IStc`4VAU-(f+ M$Y(l=_*GWle@h3wDF6Tf diff --git a/target/classes/dev/lions/unionflow/client/view/MembreRechercheBean$MessageGroupe.class b/target/classes/dev/lions/unionflow/client/view/MembreRechercheBean$MessageGroupe.class index d03c85bf6f8fc0154c2b62d09ba39e7bcb1dff2a..9bf036ea3f558d227224bf69769d259360eb6cde 100644 GIT binary patch delta 73 zcmcb}eUW>^E@oCu1{M~b$@`gY7!4**U=f`x$fCh&!obR6I@yjTkkJAtX3J^=^E@oB@1{N0W$@`gY81*MlU=f`x$fCh&%)rWGGTDwLkkK3{X3J^~-=;US=4c5O5tjzx=Z(s>zWCV+evud!iGO)6+0mZ~8 zN3&Wna)QNI1I2lP;(TE7_dsz$u(&;&2CFDgTnsGU%x1+X2^PN$6qf~x%S~brWK;wT SrL$|Wsse@7z)DxM8vy_vup>?Y delta 148 zcmcc1f0uuQ0Sn{1$%ZU8j6Z;+=;US=4c0#ltjvEWZ(s>zWB`kavud!iFtD<)0>#89 zN3&Wna)8BG1I2lO;=Ew-_dsz0u(&;&2CE2ATof$c%x1+X0T#au6qf;t%T8hsWK;kP SrL$|WssM#l!Ae)N8vy_qH6uF! diff --git a/target/classes/dev/lions/unionflow/client/view/MembreRechercheBean$Statistiques.class b/target/classes/dev/lions/unionflow/client/view/MembreRechercheBean$Statistiques.class index ff971b7c5a7fc29baf525ea61e63ac2a233d0479..5936dee156b090ce2994188e9b9303cdbc7e513f 100644 GIT binary patch delta 100 zcmeC??&jXW#>}{L607KB8D@3HgCIsEvj*!?23DqHlh?6`PoB$c#ds1V{1zyD7ASlU nENsYP#dr}U+{mKAdKD;q4JaJQcykh~E$dw%_a0bPB&!hs&`=&P delta 100 zcmeC??&jXW#>}{5607KB8D@3H10Y5uvj*!C23Dq{lh?6`PoB$c#drcF{1zyD1}J$8Z~YJC)`*7{-~P_31gc3a!++O^%<$6EVtx9hgHyFOao-?{gjZ@!sKkWKkxX*2VE z_nv$1x#xY)z2mpuKkxz(%~RhjBSl34D%Mm&LzqTx4)um=BcW(l?edMAo%STtkh$S# zI60rGXv)+zWfY{+0F`MPD&S{yIK8!za4edrO-1q58HsJJZI6VVXtK69>};)Vb-Fjk zos~}eCMS-+MNTNnG)fSLLy_?1&f;(+8Fvzbc9^E&g0nK)yDAwz@mQ+I5qc+RI$mJPoz6}$D&@pId;vOvscsOwndtGOnu$w`_{rin~}PRl5! zc`g3{-nsyt!c<{|oJxixwe|6MXnPBITt<_qsEn#9+U8iX}J%h&+Lp7bD=}c)JokiaegODNUSX9QHt?3*A zC9iwopdbRsFal9I@wQkBGOU|2wIB^L z)`{1Kdcw6G$yjZBth+lFtz7|K?^x+1dSKg5T^TK*r2%Tu)Jn^k&M8F7QQ(0dcR9(% zP%;Fw0Xca(HI!D+1p!*AX%)3WsdBrSiWBe{#t$`@(QI0y=|Z}QX@n?WEE$Se<-<~o zr!-Gp6QFe&RX6^uX(aCbSZGPEI*HFTuUt8Rl9j(ERm><#Jak|aDOfM zcH(tG`Uul0P4T#siq}M9@kC8Ws-`^@X-`FJI-Ep}Ux~_SBee&pLz6?DOk)Q^3ZLr4 zG7fU;*87^QXEr7{n>J|*3l}QD1;{HEfmSE# z#UDlBR%g=|O%drIiGJ6+pf}uUI-{Cm(m6_4=ydlaJQpTRx=d4?z|P@GC{RnrxX~~& zUvdJS($p)^5Jv?5(CKi+AyVC@X**rc6ofa9hmx^4+2$X13D6!1hhS-FVv`$7`r|DyKJp>;$&7(88eSr+F?*^v&qtIMyxwY^-M)|!M zW?#kie_Yci=q4<+Jr;%SK>O@knXa93G&XkR8R`n#>4${XiIxN~a0T6>>63IT*c0mL zU>f7sv5fAl6Ni7BME%>Ds{HP~Ar=w&!BC)KBG@}M-6eu81xKuU1?kgFlk$yXQz+i$ zbR+Z|!?0_F^S*~^P9d%z-FnJsr^KZlbf2cr(EUs$@F2}tRj&V7y}G#(UTP;jpy@&S z9KfK_0+tiG43tE!9rUoKN9a+A5a^brx}CTu!d&HX%}-G8*7O+dvHm7^NDhbH5q6r# zH9aBI43TMK-Gb&xOGvZx$LADHGNf}HK2VRJLr(6ugQpE zhK^V#QXUhPchX@^-;g203@w?SApH{)3CeG4dO1VDnlKb7NZ*AJ>Kodc7fb*5H2q6v zyd(-%Sw#@v*YvM4rwBr#X)4(e>+VS!LVuv?hcZeyVEbgmk2JkTKei(fOPus_AF+?^b%bqsF@0pEt-V|IanOA-!Ca3ICRU7ogv3`UCw3(^*Hbo`JDI zyk7JN-4be=n+toEqlnz_p8v_zT8NUo(Fl5>sGHAaeduyuYbL7*(0>imHQ0QzjNTO2 z@JG5&o*s~=$K~nCApK8)n4RmMj5rVNF+zMt)4L+$%6MjBOU?=$7h_V8ERW=K?yqR%87Wo<{3N_&OOxA z6WPwxRygJP5S2oblO?7z6*UP*?PB+#ZYbCCX#qZ6^DI6Cjy(&TLlA_~9qM74?N4C( zWAo3IGahPo7M~s9b2QIp>@vsqo5#(Dkobc|$(XQ>sk#u0JV--)o#web4+_+7(<$uV z{4}~$WXBZHr64Z=MLAiPQxgf*cnXA6la1_iK z?^oRhIM-DU$~4h-r*0~8%bj9pJH^g+8atzhUE+fJx{o!Z`Ay88C{;!Sugc88GDoFoB0;Y{rW~H(G=|r zMWq;&%gsfx7!)fCOS+Xm72w-6-!6{R$2u1R3CTta>#}br->La70Uj1k_-2sFKdpJE zOfK@RM=(p(hq2q1HSf}VuZ+}JkOq2ay0YO7b7rqHIyU#U2ei4dPzd4qY z2}7xxE>l-E6Y@)ZD8OIS{B_yy`KmxdzXZ@wv?JCnFOo|k?|YBGsrjEWbqo-Ql5;~` zN)1pMu>aedUl!>UMPpk9`n#I{*}oNNKx~u!Zjk>4wIC>!EmqegGF9P2dmPJ(_vrB; z|0~=D7=;o_kbi*ZxRXTXSY-NdntvqbEh=aoS|TgjAcKU`rezyeHnr8SYz*>Gk#S}x zYnS}gok-l^ziWP7_V7U89qV<1{01sYS@1-vrw8ua9T4PSGEH?esG7->5|eA3Xm4!$ zp*=N+9;}(v;mR{n(;E(nOp#puTJvu*PG?nWGsFqs_dCtM=RZJEd&R>ohd?WH(;Uxt z0>d9Q|7XUTx#<}+;=e>A{=~HOs5GI!ZuD=N3T=6d>ExzuJ+ZhH7yJuK9NObnE27Be zgZx)0NE1qy;jSnwAjsGW1X~a7>2TV^kncO_ZH|J?(J<}-b)&Y58#6q!?Hv_qM>ly2`c35fqFROL?{|m$f$?Z_hP4+45|`fug5V5G!J$Z zQ~|uNfLOaj?KlyEP*tf`Wojss5?eX!=a6d|{a640t;L^9nIy8Dlp3bha5X|w3P*%j^s>glvd@c0u1fMVTXhC_*@r{$wUhb^5e|S>w;sv+HC@fHao-k}nP&Q#)DS@d0XgwNCF8n)Iu(A!VW<-%8_ZcEhL)}pi%zB_E-$lm8m$l&oIA+< zro@T5`9OYb5ZbDQL3r^oq0sa8zVd-VU)&Ju03SxQgrg2BksEQuV>O}NBqnP@PzOlG zZ7fc1l3nmwgW(dGQ!EJx(@CCGL!Pi}SHvJ9$u{Dt_9S2fZq*l+4bV5na>3-!-suaV zDs!nsInbqa^--}cui#{-%$Ay3-6LoB=t|@}48gd4OKYgdoo9$0!}Jen4iX9+mB3obXJhQpvQupgQDHee}gV za5)GYHYX-<+(&~PJJ$XujZ8NUc5GqB41PtTIi*OXalQjj2jzC69rkIYls@EELM9_; zS}>?8NaoOHDvl~kB&xvBxEWg$VzwsX;u1a06u^!&$K3w%m7$QZOSP$0h^y(96C6B9QFL+U;>iLO zQ3g{4cM)JFxl-bxTR1pDX0VCuGDk*80n8O4rp7_iD4Vqm7Ga5d-jr!#Y8o81Ie3L+ zIg9gI^omSj>e%Hna;WE<;R1gOeGHN%S%g$MtlE2r{9-%>8piD$>C$7gw1OT>?6t}WxbWl~j*YYjm|K>9 z0+zn)hzC|JgS5edlVUrIY9)oJ=GHm#S1e5QMMAffobouQIpE(2N z{J{@?^qqFfBad|*r3vgV=7vxtvI<3}x{>NJ9CZ6vlqsyrnXuF- z7KA(I@hQ*(Coxm1OmS2q=3$@ejHFw^guOUCQ)#X4R(Fn6`{hu>H>pd<)O7$nAb<=NPZOXvKj4<^vIyBCE>xw4djNNW%xGp*qP?|g@F1RP96G*qmX_E z)M1=M9vKwVTVDbDIq$e!nDdT{Hs1R@z~fSe z_dcJLT$d1Ba_IoyGYH;?h5%v#-fHnCy(QE35kDt$;27hDmH$IE>Byf{x78TPOcsdh^&!UlZHg2DvLt}B} zasr*}oA7u$q2Z%Y+k~-7uFt!a-$g}c@|DvLQuW$>RI`^(oc0`@c#tOHZE~8X%)w4jd~n9|hTf|t7KeT2eAnpW?os+MPH{q*t;MbDE;Q%HJ?(BXb}x!;@J z@9w9u{GqswIEB_yv08|UPQ^P>6F$!aL(fNF3woPrDy|`)O-r$WR$5HU@W17>24!`T zZVlKtmWHXtqBMXUqs~+3;|XND0%*pw=zxJzOR%`5XbF(o6rieB(?7BO{E^o>^gfo@6RP1=1Ih%%otX1Gl8+tCpj{`1(NY~<~ z_&VJCT#ufM0sj$tb9L|rq9dw7t-`a`F<)*&&qc?O?~qHyQ(`>WFMZ)y6;jHfVTky?n)`7{Eb9iYvDkz$3^1zp($eG1cQ zv{`OQ!w@3Sr*3Fj6da6!Znd63!u!qE5q2Wi+Xj)ZggR0PQSM z7XZA3)iQi3`B93iR%g3vbyZfEUWX?9qG(jnZ~N#sMbt9=FkOH(G#{oV@|CMv=VVmt zkIN3yn_%Xj<`h>IL&^S}rnk()U()nfAbdTmZijc%D63!p?dq2`w=Gy|#@yz>)`_-3 zsV=7qx&j{JN_g_C;2W-n!CeEEd=zSREtqy4m~{h2UJoYi0Mw11VlAO+wNkCZ0_$nA zYE!GhvMO4s)~E}?s2B`0V~$tlDVBx0$Ti0bQLIw~v;>Ov4$WNzeHsQH;-@>7hwuW{ zT^^U^;oEq85A68+UV1<4^M)It-Go)$3{$zqP-;WKajqbh{K&^e+v1`fH|-#+wfneu zFPBVvj!QCLm`n39e+rmy!y0e*VIJpVMnay!%-^F@<4a!N&w3$*vjBf5rn%gHRoJi5 z_G^s&sys}S+^0UqiPgPS>An{A@dQOLa?NfkW-c1p(Z?s15GpTacl08b<8<5Lyw z=QI0w4nS#zaWcm*gHN7W!Snlj8PK%|=*6Yq;W}~Sqo<{LVVaDaKJf(S<7w&!M6!?J z^hJk?p($5;IOT`eE$zGAMmeSEQk4tZ?4)Pue>7y42_hw`C24wEcz zlSSB(<}D9pQT60>_Mr2TY-hq-NW#C6UT-02&RfV41q-_NWm*gmb9yK zN&A@Xyuo&UEVuI$hpEbTd?L-C+(jDb@9?qcZm<7tum2uj|9uwuXDyEV()_@#?7AP# z>3lTJkD1QmCtwdYk{-qn`Ur+O4nIIRo%)dczJNUJD~OaYBCdWNLEwx*1IBqk-(NuoMtXVT= z&6+uL!h~7)JK=;06EY#aMcjj2xwLUZJqUjT`{!qh=32JG1GvuG^8iDxXSSWNb+;2n zZQVn*6IShZdRCq7g#Egmp8aM!VXtndXRp~#Sf<?!*K`*El9>?hj^OL0+VEG63qyU4!44ze$g`(I!LZp^eskOhPKyFFI@vprD! z>6Q)mKD#gBKV;U}llX)e@s4bP;td@6n(P)ogh8r{aH)15qv zzQ||LQ+y_V0CN_-%xBZD_#CM5Y^d$I^jDrkA8;M6NX_L5xCDFx&&T!R1!!5wOc>`KD@?zf3=kb;3xf92KpT_Nt2YD%ODYoE_U@Jex%d<+$&$vpf_$hUX zy41~^#!|)KK==gtH-5a<6Y!_2sx&elxk>0|Id#xh*%FmvLn|9y-=@~2ON<1L+i9M=czRpj?55N#^?UN3=2x)Vg6Xs=A>dkc8TZf_z6`pSpqaSm zJdd~H*U8%qwN_u6U1qTAQkz`1?s3_=9HcynRlicf-$xp>3ndnl4OftMfN$ww?TNf zgEP0$$$TfBio4fy`EH-!=6QmPc!V^%8dYfs`Lmyb0(Nl^RAZM9W2J|&TSbvZNTu!p zDg#cU1r_|43jXg3e!GI-t>C{^@cR`CMF~}*iYwHR{VIr>itK8pA5a>*8Z|O!SCif0 zSIYJZcfU{K2e7CI=?wlHe&7FqA;a$67kF%6pkh+wq?71))q@?r^0o-3MO}s#S0pib z6I;8CLq8G)=vSjFRAq%4TcO5Ps0kISxTHt`jZ3GpHjVU49HeWVR`vJ^GToZvTl2;+6KOe@KA;|Rxo7Rbd)Lc-QqLw zsCK(%&1{Ir_aXA1u>b*SR9E-vZU&9)N0F;`dYC>!-Rmhw6_N zr26%Is=qrR)z@R`I|@_%dOp>!fa>oLK(#%1@KgPUnwRDE8y?j+pz+3nRKJ~1^$!N5 z`r|6K7qEXW5f0ig zY-##E=KI3{G|54dM^k`kWSJcExil?wO;>i=OOduLMNT4n28-OLn2-4oYZF>zWm?@O zK?c}xy7+&<_TT{6K5ar)Q0?@h@`+?vNTub${c7s7v|d)tY9T%iVJJ(MsC)3H)Gl-I zGy+fe0^+`e`i#0C?Vm-b{O6VwenRsmw(YY~zkL90r{D z=hQy;sSi(I2J9Rho>b#>^m$Y`XXEcw> literal 19092 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 V^UG9<`TXidDpiNoOX{ms^?$vdwpaiF diff --git a/target/classes/dev/lions/unionflow/client/view/OrganisationDetailBean.class b/target/classes/dev/lions/unionflow/client/view/OrganisationDetailBean.class index 8597f855adb6b58392d8fcd822060edcf0b0a8dd..e150c34414089266c6abdf30fd750059daaef962 100644 GIT binary patch delta 5372 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 delta 5062 zcmb_fd0bU>7XSXvh4(IxCm>f5R1jrR0cFw9KwMZ+{(}HYwBkLU#Np~rb9YvT`EGoC=>NRoiRPNfSo5Kz_%Z1Vef9pj z#s2ozmgaVU`H}_29&wBAmME`y)b|Rr&CwBQmg(RDrrm0UTMde;_Xny2zCcGnmrOHn zUKy|Q74!yQdqY`EonM!11=p;yC6&u6JjjpIGHSsL(>H4K$uk)T!38W}h=EvX*tUx6b!B*L84q znzgR6y}hL)z|nNhw)<;an(KURXX!Fi!QI|bTkCJ9`%(_h@U=BJHrMM?P6u_q=6Zjd zTV|WF$s^M%pn0%CD!nof8x=eZcvf8-SNc8BrOGQO$cg5H{0sSdOe z&m$EoSC=IUl9S4TEc428ImtYbT;f{km6K(a`D5|~*J`hU9USJq3DdHbm8InAU{%d9SJX%G0CbZJ!>x~`>dL%BcTYiueCpK3D) zr6y(vergc#H~Cu|TAKX@x}46egvPp@X)a7n>Lh=6dt<=A++U;1ISTP%=pp@i3K2~$ z^)0%buMit%5ma8N5b57QKDu0_5EnM@XfNR^TdWRlN@E*0X_La>bv4Igu?%MKwpa}J+?p>K%l$vX9ai?3gKXgFt7c1PE+A?j3JRjLW0BHQlX6c{Ps~-Mu0wLglZGjnraTMOv&^`sA}X`HYHqOJR8B zdyZV%P>+_N4RdRWUX`vTnO9CYGHwKStsxL-Z7<5rRl1hUEh=m9ZD>txY(CxB)L7?F zElQ<+l(}(Y-kdQOTAEk>E#Jh+Hw4VI6l1;ewR{oD7#+J6<7$Vv6~4 zZhYsp@L;%HFE>ERjqFY$H(@x+Q9&8%2lXTMH&gU*<`zzGwe(nsMULLZU+Vd{7QO+x z4xIioo!~UI(ONJGlL2#G-eBWaYb@I^8Z1s&h}+H0c_XrKqn>{G9D@iH%5N!oX+y2t zE<5k?Vr!Pq|>r5MI4_+&``{oX{jIILnFc))B$!9g6 zt2y?e3QaiC_LD`Al^7~_N*A%fHWT#dL9Ogm%gG`E%jGV)o8EuNdGhko87CQtl6%be z@)L$yiL=7Fm%j>AoY1@ltv1z6L{Yy8Itip;IWlk(iJyWJtR(4^F(0e246AKA2~5Lu zB$Cd3b^?|M>Bv1qh(d&(U+TuiiFCCq=!ELYTw>+Ql@;+I+I154vZZv9PIg5R)oZ|26|f-|v|+-}9y z*v8Rz?8I%M>;rc>8M34YEKc$uV~kWBSoPe?5LtwYw zR3GB#xDN?o?)Tckd=*O5PMEDzO2atxki%Z$_L9RsjKhA`@Izr73PT(UWxvB=w8LQ> zIXv{gImCx?*l%f8(C_q+!F3h7-6NWe&dBFDD#p<$}RpRka*n-+)w^4(4cv{}&xq6T1>3vr32dvr;S*;)84t&f69<`}% zWW^VwMt)C%I#;ihgOs9(F;55eA|@HvzI1qpn~lz(mW4mS9tARW7)G$^aH{gD7x^6n@eKi>jKpl{$C!hB1H-(d)U zhoR2~vDzirE`vQg0z>3k@>22~wGsS%p8qeX?`^!KX&v@vOtkW#6rxoGQdK0zD;JJa zZWJpWGgK7jDi5kvG*(frQL(n4RQsM8D=#vB%VVA6F&Zo6C3%@%oV$V8mgW^|f(M-^ zq{gi_ihcKaOuw{qCb?u_8-tq~Osof=K;GBbp08au#-$CMAq{0&YVxc4s|+ zmL3^XB_-KCGS&Re&Bp;%g-6w# zupo}~2Vq`SHqQOA!~bAeKmU^d5C3`PnG0uhA>NQ#UGN%G)&-X#CC6CXO&0YU zP1Z}udMQ~i!#=e*jImSXtd2wFW8MF77#}T9>a19?SLRe@Wd~C-w@2nXG7f~vkA%rj zhRM%T<_;}5#wnP|lez7yV5n0tO07n=T7xNSEy|P+3sg;5VJ%5>D$Bqu`9%KdR2G|N zG;5h(z;=_nt0K8`@vVsF##Z;p(&gDXJ!+68Snq|w4GgxMb%;^*NLCH3=TmJrR*wV5 zI$kWv_G0UfTK9upi4l-w-F|I}68VJPb_q|pb-JUnd(=Tz`3mc71>bgq0Ksk*Jc&_u zYor09jI55)SHjV0FioE^fVISHMo@DTl+i#u%dVnbPtm2c%c zauMt6(%~|VnOEc)pY?$1V|C?Q6}C@&8sE@<5+BYDOHh0elSqA?A*iX$j|COe54BJH zG5}^t7)*>qO_%=!Z*H#k@z%EfD&qBCY3xR+AsY;7G2}Eu+70P2}s z)vk#~NwcoLDnx0K&@`_$NQ-l%!IXy3aJc;(X+Kk{?8#JZw3hBj8QM5U8c)eukfTi` gr1gQhUCY(-30u#;us?mj^VfLlYa2aHwZ8gtU$eiWxuL=DZEQr-%{Mb;PH0}-T<^^c9hZ6h z&df$Nu6Bjj9|dY#biReRG9@^@n^G6&D=xR{e4FBu7&_bH(&TAsZcAtXgm@>?x$(a#RobKlP&E3i8xpugD7gM@9CM8{S^FyX9r5`_H z7NiUa!}@nir*of4=bpN)!s(W;-=bF zUjNJx6{sOcbUq45D^gPup3wP8s$>%15+%=ZouB64nzyB%A9IqQaq+V{KgYjg8fx~` zdYc((J$Z|Hr7Od1NXs?LW8=+R(~``Fg04xO*ubFJRkd|>UN?V=`4j5bcvfKk zXH1b3Y8LsNPye)VE>eWPRKiqW>T6K=zhZJLVV2aX);Ab61rCS#--1>}ZT%8I>fOFa zV~%GP#zoUo{sETYAI*aqc|FhQLaYHtldsIT+Uqa!G?tROZ7Ns8s6#-mb-5R&_S2I8i0l+P}&|{^qetAQ!Tk`Q?q6aY4lmd_{ z2Qaq`1gW&j#Y=s4%8z6)W=uT3(|>$tJjDofHq87yGlNH%F+G!cl$qT#x7!$9#?p_N z*0|KSdP@Bg%o=aj^qdwkL6?bAWFG99w_uVkB~k=^EUB$)@_Q?+HIHQ^lXaP*K1A6c zD%Ui4RrfSq%0kA^^41^-MNxN|q03Au2dHZAqUM?n%Cq}-^>M!5lQ-~_*DJ}IUyH_6TB zt9`OCdW$Z%$kt7LpGZF`x9V~mox=KD?Du;8k#f7-;gUOb*&%nC@AMrKbC2BXlKXVI zUmjqZrnVjP^P$=1vVMIcZs!ATdC}N{K zE?Wk#EvWO<*A!GP_4`(P7S(x2_n)J19nj^Vw8DYvY8#up{z|2UMy9dZQ>OGcpUlnb z(P>;&9&=ci$K{CmUiLUXwl}l?S8RS6o~S}`r`w`=L2eqaR}?$_y!VORH#uNnTWs+7 zy`eiKpoQ*iOqgH4q}GpZF=QXbX45toQFL*09lly?fvJ0Ne8(?(qcsFh((J9nz`dvP zKX7ZKvn|0pg=wY^KNd4SN-NYRxU`A7R-_g0{djm7bBTFsM2dGZwl-~wt_{_O#A-vj zhHGW2W4f*lqRLqOD z3c{`$Z&Q)4+8e7~#N;vKQv1LKa?Hac6M8IEb3MA2D`#Tm42V@nXF#EQgvLZYdy7I7<`p#t<$w0kS$#Mm1f4`6Shr7gv=2c=G$Z914k)=QsfD`j#!>VswVOjrBFN>sFTVm(El{5QTXy( zd_JN2X#f>C{She9k3YYlE6(YgKoigDn@jWB`?9RbLNU}8ohLy?KzemaP0>%r*j~q8MpvL#5Nc=7&H!a54YKo;LltguuN=qq?YN-D{w&v|x{V9ncis!4!4|1~z*a4&!Id`Gq!;iIAV@dU(qnlu36|9_^rk zbQg`JyQzfkrI~aebagLu^)QepvW}f^g6cPFkzjgr%`Yqq88}sAUwAfwm3{#^f;`21UfqkFFZ!2 z^aM>OB+c{`T|mDD$`jXAP=x^ff8{y-PF z;1Vovv4-Dg_ue%zhAmW^fPv`u@PHRU;}2L@F9O*s)Q4V${$9fxdW8nj8#I>wNaN{k zs-SmiKD|d5(fi~r2}7Xgwtsd+I*z=WlIMo6o+mX zxjB;3IEwmnG!18+iZP{GT|D2CYQ& zyki?x`->%jo1T_;p<$6WD_K3~$$RKhE*(cvKTsO1q^BesdZH1TAn&6)oIwB~1?oIy zE&YO$mF@1t{V0sHk(K3A4ChfI=Tim`puSu{1Nb}|#sg^_526wtOfz^0&EcUCW_SqD zg+ZVT9iTBZOa2PTHY#{aL?{lH4=5r`xschrbhia$4%Qp-IEv%(l+J|!P(;~WOa(lN z2BAKbOR112(*!P~*<4PGcor?^N^0cUbQ#JkcrLBwdGss3fPRfYvz`|~!xsiY&ZdF# zH%o`>Ne`~XEed!5icz{lIuxhFY6&x`tsEr8uNU>}a{Udy2`M50{B4TK2LV&Vz_VLD(6q~b;^5VZS_@);6evj%a z%V99g$!+1yimPUE&A>7vUPdlnP6pReH?F5-_CaM0)SFj^Ajxu&BqOu89LSOr*60Qt zpR|b=I9tAL9pzgM`7Q~e`d{Sxdr-bwM{P+EW!p&#QzC7%MB1iA+U|%n9g?MB67dy~ zDS!oZC3WGo6wg;tcU~95ImwZyOGkMSoz(4z<=PFC^UNEkhKJwXLR03N8%q=UUh~N0 zq`-aLLPPdo#V64WIv=aq)}|Fuc|C3xt^>F0DT!~yEx;BU405A+8x^4}!4=9>-VX2I zLFe-wG>h-V3b@NcrZ%5hj!P-)UmUdl#g6q~LT@Cchehj`D9<{}8`Ld_g?iUkYN{Ocmy&$1{wBY z(X=209iYj4n5J*u{>E_;smijs<7|w9Q$Jy z_I>{e`%~&>2iTtm_Gf_od0>A5*k1(pmw^2>V1EVJUj_Ep|39$f!pp)wcUrGN%T|h3 z4%vD?xmEdi$F=r0(7i)Czl-qn9;NX6)Qdl$e*9q&2~l=XciFb?5R1FZKLp#Xwd$fN zEE*eBf{We?JIe*c^{K3bGd^pcnU)rJY&RCkQ@M;kT5NSIpD^>vdhzq-%(BG53&8f` zK|Zz{P8<)XtAGQ9Ss@_@IUn&UgzwL=Y`&l@{ujdbR|wl*!(qRn3OkMj@v=9{^3aa>!?WlAuH2k%t;q4tXJcaF#XRCPg&#U;G;BK}A>qDKRvT=AZ zWT=@^o)Q>t$jBBM-M(X5`Qy`b8zU)qkfWaA-0cVZLxyYT^Q`B@=3R< zf&2p&`EjlzBvo3@J}HD9Q53_FC`w^T6jLi&WO~j%b8mT0;Cx4uIftaOy*j(SI_F$f z@25o;8@16aYNZ+`RHCd(i&V9TKWk%=!PH-d(HI#{r80sh%V?S>V-O!os9wqfv_@vp z6*7;mm-%$REC`YF0oyWG{KLs_Of+OY-6k!T&Yu-EKbQt2a zW*4VEXE#s>J11!V8=XJcfX$<`@~i|o2HGNNB9}D7t5%2LObyX8G@9rTQGkE!1aK~l z-)>>+u0SpW>dP&X=cKSWn+4R3MJVj*P}tRH!Tw3kV6akAh@N?EM?D8Z@H=|Odji>; zGA5suahI-bUtl)gtAIB&F$~c%uM0`J(ZJHu*al@5R3-)%!|eMN96SB9)p`xodM%R5 z^&zmF`;xYl8NRDYr}$`pM|d{?-iFTAnMwyj@S&mbsf|}%$o!=;*|N3mi z-)iaOoEPd=QrOXK55jB@StQO`1)^@@+E%Je1Q6DuI|WtT5!9n?puistoJ%+jiGqcy z1E}JTp!QxsKWqdA0f`wl)9e` zf|_E1>S}=sbchNvwWF$zbqXrBb5K(|f;tXRPydXj)MaU65LKClD$c&kF|VK3LmdHJ zVfRy*_7FbV&Ka)~D!5HJGVBDaf-kjpyu)fw`O_CAHuHldvX%mf4-l+ByT2gx-rzP=YF)-e5?wZDeW7K75V^ z?s4$w@i^xcA}ODMXNHNi5N(eXTMEnswltcgWg_l%Jj}NnFqR^IpnSNIo z4UdZst%(k-80)5_g^gCZPH>}t7B&tI)-gf%jj@9@ycSQF?exGO(?bYuIG3QkkJ~=d z89_XcIs{7{fLLg_%CP`$LX>DnXyrY;3Adc4Ew# zEeNZkRW@tqNI%`8Ye)42n=E9;E3iXs1RyG6mdH8#0<^zXww)t0y%R#lkr`&iL$pI? zvO~srOt!;8?rxEt+s@fY?Q`wX5K@LVKr4W`oGml1Frd5z58e*h84lUx9IV_EWW*m< z6)fT4k^po&#M{Jogb+{G1|q`_67OEfkQ@)}4($)Itt(^Cv<|?#)FUL$f#Y#{hIbqC zuzByo?7*WMj^8bmeOUHX zZ*jL!32n7-sl}L%YXJLwas;jg+g?v++NKE}uIy2-tEZ8d%yLg=0I%H+?h%gpEsJS! z{bF0ChaMB<C3UZ#skk delta 10235 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 diff --git a/target/classes/dev/lions/unionflow/client/view/PersonnelBean$ActiviteRecente.class b/target/classes/dev/lions/unionflow/client/view/PersonnelBean$ActiviteRecente.class index 0a5e346a707dc7a595c1134b1b1b0b625c8a4894..9bab8b009663d019c890389cb73e07d4e94b1341 100644 GIT binary patch delta 95 zcmdnYvzcdu9y8;k$@}itA245#MT7D0WGj|H#{Xdc oLKbx*I4$T-=MC6JMMax;r9Bg^E2KsMWCVOCp4_Q`>) gfs?l~i%s6as=>%L`5|i{BhO@GHd{vC$%Sm509W4>y8r+H delta 75 zcmdnRyNh?j7UszdS;Z%xW>#kunEaX9mQirBAxj{m@Z@F|TSk$|2Z3y{$-=C*jN+36 dSpyj*CocxFr6xZFvSlV4v)MArPA+8g1OQ3`6j%TN diff --git a/target/classes/dev/lions/unionflow/client/view/PersonnelBean$NotificationPersonnelle.class b/target/classes/dev/lions/unionflow/client/view/PersonnelBean$NotificationPersonnelle.class index 1762840f42b9227bc3825e9918722bd0a435cdf7..6ee309021b93ce63c1c875907d5b0685eeee2b6a 100644 GIT binary patch delta 75 zcmcb}dy#j;8D>U-$!D2u7{w=ZvDh+7O!i<2WR#jb3&@t9d;`dqovg)b%P2QFgEesS e8D_D`=UFuv6(|2-4P;cF?8Rows4}^O%@Y7HTNL^L delta 75 zcmcb}dy#j;8Rp45S;ZzlVpeBVpUlN#%cwEggC&qrYw|20TYK^iAX|5`7OO3z-sB9{ bKt_YfyMS!N$v=Q>t{XnGZy diff --git a/target/classes/dev/lions/unionflow/client/view/PersonnelBean$StatistiquesProfil.class b/target/classes/dev/lions/unionflow/client/view/PersonnelBean$StatistiquesProfil.class index 9b4bb537b6628d5fe8b8730537d190c6fa8a2a58..7bb6c45a577f3c40d448fd711654fe75c957190a 100644 GIT binary patch delta 61 zcmX@leV%(m6f@)b$_W%F@ delta 61 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 diff --git a/target/classes/dev/lions/unionflow/client/view/RolesBean$Permission.class b/target/classes/dev/lions/unionflow/client/view/RolesBean$Permission.class index 0ff7be1e839c93b3d02999a93084dfa0674f878f..e2fc07755f1bdfd3b3e73fc1543126ac75a7bfc6 100644 GIT binary patch delta 37 tcmX@Yc7$z18WZnC1{TIi44jOU8Tc5dOfF`MXPh?qGLsGC^vMFuCIH183N`=$ delta 37 tcmX@Yc7$z18WV3R0}Epr11DoS10Q3>f0 z!3v^>Ao>N7KcHSCddZi1>mhp0f-ZL7%+p@qxAtZ)4KEEpy%mpqLKT)#htIkbzqkFX z(Kkf!9qaJ}F|42&KjGpRviOZI{6P=?q96ZofIx}FVXj&%HGO27)u`nfbg%|}jG(|; z3~?=vavd(%yvn-8BQ2|$X9H>&LyV1ZxB;Eqh;5A9O%wLB86#}LI9qXw3CuEyc{;dF z7Y~@y!`4U9EHd=b&US2K2R5@)1Bt2V7PDK;cAM=n+pAZJx#$kFJI&_I=FRT1T~9N~ zQgpX9d#ou~v)7uU?R#2D_Hj@-XOKg>=@j)mU9Hznfg`GS%Pecs9pI>*xdF$t?1mgy zAr){!H&P*w>5b*%s`o;@^<$d$x_Cm5y^tsM#S1v8?sUl0T1W>xqZgLXs-Z35IUQ^Z zd0tN}PwBno8TDrNan?S>bvJW}bNY}8c(KB{Y@U}joeg-U!Y_@lsmc#{y~1Tb&w1VV Ki(Jq<|I&ZUPIwgn delta 485 zcmW-a%Wq6!7{;H6kr*vH9Sk~iPS4Dl(;`hY(Zx)1(wGcG>7-}WrAk)ZBxX7&D_-}AoTSFhHqcP^&lb;R%(OYuaPQ&)SQ zT6%^!o?{7KAc>b)g;#JffjlO$4zJOTH`t7~*p4aG@D6)0JziTm%`D!d2{Y)#2lV12 zO8A6+%whzeamwZyd>tQNy?{l0!$N$ww|~IF9M<3`HsF`t{6-)CU?=`!6#sCPz)2G4 zI1iUNAJ-YvjkcSKID9Tb2b-{#&FJD{Rno^2t!9&EmziB|c7-0MPbb>Urp;!|I%Zwl z^>iXrOZe90tqH8@u%^@YJ?&aQ~#lqM*S(`;4NJg`G0?DN;sX&sOHJG)FK^@3SX4L`!_VNo~ delta 41 rcmeC>?&aQ~#lo07S(`;4NJg`G0?DN;sX&sOHJCMzK^@3SX4L`!>go!& diff --git a/target/classes/dev/lions/unionflow/client/view/RolesBean$TypeRole.class b/target/classes/dev/lions/unionflow/client/view/RolesBean$TypeRole.class index 52748822dd44189b5ede422535a70f4c3dc30d62..3f2b6661b43042584b7e446b5b88b365ef6fd7fe 100644 GIT binary patch delta 41 rcmeC+?%>{_%EH(>S&c;>NQSX^0?7p|sX&sAHJG)HK^@47W7Prx@h=M> delta 41 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 GDer&wnx2*b diff --git a/target/classes/dev/lions/unionflow/client/view/SuperAdminBean$Activite.class b/target/classes/dev/lions/unionflow/client/view/SuperAdminBean$Activite.class index c4fbcc956c882aa5f94beecc2fb763741b9acf32..b18700b56abc1e5a42980b466220ca5d528d770e 100644 GIT binary patch delta 169 zcmaFB|A2qPd}hY&lM7iyCvRm|XFLREePY&NJ;uPwe0;JzOCaMZpqMS|IUxT$kS{*@ z6pIz(C9pavRt?r`K=JEf@iI|eWP4W8$3}y{h1qN1T#mSAV;*;+%TQRDD#dTOTST%s+ znqct)7Ar;_u=oL>xB*by5G>BZYQ<;*6t`uy0E$@x#R3^^!0KMGYOp#0#T>!vbl9vI UUBKcsY#OW{Kygp7_yIN}0JZ`m^Z)<= delta 153 zcmeyw`-yjhD>I|OWP4W8$R|B#7ArxE@ekA1uzoYQ<;-6t`tH1B#gg#R3_v!0KMGYOvY?#q7cAbl9vI UoxtKXY#OX?Kyi1l_yIN}0ILKd&Hw-a diff --git a/target/classes/dev/lions/unionflow/client/view/SuperAdminBean$Entite.class b/target/classes/dev/lions/unionflow/client/view/SuperAdminBean$Entite.class index a93ab067ca658b59dd17d8af439ee27205509394..97ab7e02fda1b393cff5754c3420c92b5732e096 100644 GIT binary patch delta 105 zcmbQnJ&k*VATy)SWPfJS$?DANj3GdlEo%e=D|6)JiOhkFF<_Y=%o?l-K(R!inD}HH m7AwXSuy_xP25SaTJQFN_0VtjW7FS@^U@ZWO7lOr8Sd9Qx}ud4YUBAYXj) YEoLi5L9jY477bQWptu-VJdec)07GjL{Qv*} delta 82 zcmZ3$xqx%SdM3snlN*^uCm&@}V`BafW->8rurf2Svan3nXAWd!2a4IUas&B1K)(3o YTg+CB{9tujEE=rBKyeYUcpi%p0Dln@=l}o! diff --git a/target/classes/dev/lions/unionflow/client/view/SuperAdminBean$MoisRevenu.class b/target/classes/dev/lions/unionflow/client/view/SuperAdminBean$MoisRevenu.class index 980a66427b068975d110fdcff00f82c682ac4154..d8354bd38c33062363527d1ce58b299657039fc8 100644 GIT binary patch delta 77 zcmeC??B?7si-|FH5{u~M4NU5cIUvScCJojC23D5B$?KTKCmS+bF_wUY8<{m&D}ch4 WK;b~fnn^6StPMbJBUn`=ixB`wR20qt delta 77 zcmeC??B?7si-|FL5{u~M4NU5cSs=z+CJoj+23D5*$?KTKCmS+bF&2S@8<{m&%Yee= WK;b~fs!1%itaU(cJy=yFixB`tj1;;6 diff --git a/target/classes/dev/lions/unionflow/client/view/SuperAdminBean$RevenusData.class b/target/classes/dev/lions/unionflow/client/view/SuperAdminBean$RevenusData.class index f38a82d1b1c22c8ad2f738b2ea6fb6e24aa19a43..531b1dce2d7c2e93b15d8e07fb2c5faa296559a4 100644 GIT binary patch delta 197 zcmca4dP#J{c~(|Q1{M~@$yZoy7*!_=ve~j~GO)5}P3GqipPa>J#i$Du6P>(^O@q}C zC~gE6{|6K|1&jN!Yp_}Z#jU{Nlh~~oZNcJ?fZ~ooaVMa7AfxN#L=Ib4Paxk5tZo;F z6{9a$9T%qtYamcO2rTZ$X~h@{7M}+cj|7TGfyEyI#bbfu!jlcSj93$a;z?lfI<61^ Dx%?`i delta 197 zcmca4dP#J{c~(|&1{N0i$yZoy7?mdrve~k#GqAE~Oy=hhpPa>J#i$Jw6P>(^O@mb* zC~g22{|6K|28;W#Yp|LF#Vx?%lh~~ot-<1tfa3N*aR;DyAfxl-L=Ib4cOc&btZo;F z6{9y;9T%qtt3OaY04(muX~h@}7M}+c4+n}zfW;pH#iN1Z!jlcSj9BA=;t62!I<61^ DrBEtt diff --git a/target/classes/dev/lions/unionflow/client/view/SuperAdminBean$TypeEntite.class b/target/classes/dev/lions/unionflow/client/view/SuperAdminBean$TypeEntite.class index 6d376f11c82e185aa56bade03f8cf132948e01b3..800f04aea47f923f53cf1e35f7eee52336bdf0f3 100644 GIT binary patch delta 169 zcmcb`e~W*^OlHQC$^ThIC$DE#XRHUa-Y{#hHZ!m?w@h|q6`yRtV#U}F7H?qDVC@Eq z_khKZ0LA-(;G5d&6qQI3Fx-!=}Ny7%093EZ)Fo k#kd?SegP=H8YsR7EH1)s#khX5Kf5jKW}w)X$rIT<0nj=#y8r+H delta 169 zcmcb`e~W*^OlHQS$^ThIC$DE#XRHOY-Y{#hHZrg>H%)eA6`yRtV#U}B7H?qDVC@8o zcY(!^0L6QO;J6d&6qQI2SB#!=}Ny5GcL~EZ)Fo k#kdqKegP=H5-7e3EH1)s#kh8|Kf5jKMxfZH$rIT<0m5=Kj{pDw diff --git a/target/classes/dev/lions/unionflow/client/view/SuperAdminBean.class b/target/classes/dev/lions/unionflow/client/view/SuperAdminBean.class index cf1a00fd804612cf7efeb8bc016473de903fd896..6baa957379fcce804e3b7030f979526234652cec 100644 GIT binary patch delta 2341 zcmZwIYgkoP8VB(IyEz*;2zZ6W!aO55n?M{YFx?#Lj8GzoqQHOxUbqPehl`--j2Pu5 z$kJA6V_B({d3m04j<*_9a%eKO(s{D6CJW5UN(&t?X^%SpS)cuK-hF<1t#`faUHj~_ z_KI{~mY~Bo-`Nkq?dZ27XjP!;w$jsMRCY>Kbcwg7##=jT@~n!o(kW$)b>7;>GCK&n zusZ;Ig0UBG3r4FADZ>ZdZlurcTZZB?N2sqSHPkP07#x^_AWTI+W7=nDsjV{j=9z_*IMR!UY$rZ;BM!oiE~Mh0EcOE? zKZM!%5S2I#FOH!BN70CnxZ#hv#ZS1UovWG@mieznSJFSNa?e;0vbs4{QCB zwVq;UzdAow>-=U8TSJ~6T)bFQmNEpFy79u1Dv2qXYlUO_` zad<=$kS+HjPsXBD+^7&6b0itflH$8I^_H}HIBguKrE*#tr#*~^5mI~HB2h*eyB~pcIsm2nSi|3>U zTcs8U#LLFkpSi(&8Ie;1qK))3&lfhoakf^%#cB<4nF3 zQ)C&NyPUgP!Nxv;HfhHy=};-tTjgoBf4VJ7UFYXol~icU3#y?o&3qXl@`~D5I9WES zkRn?)tMnp|xeZR)uAVMRmba9vE==_lS>{fdvP-$V;VP=wmc81WiY;>={ax*Q>7Cl0 zGc2=<{=W9i8MYkKzMg)R{*m@>`Z4VZGcEH|`U&mxX4-O6`}_1S>8G>@&a$Ojd%-Nr zJVXCh`-}9m+RxL^(a&rD!)#l6wLd!BGB43DYwx08(;il0nK$S+wda?NH4M==w(y1t z)9}|f&Xw5W)b1{|%n*90_9dmZ^w)lz9!3w>KB&x=2<>HMmKjMOs{IYROZzo?G<}5j z2oYIjsCFqC+FCb zuKg5!B0Wp{uu5C9wbxf#W-dKX`_4)};A(YMm>N)ZzZC1MLSD`0Rl1bx@4Z!{rAk@V znNq8o_}QQiRwqlda@9tt!E@uxh0L}{XPYrMR~BpknBGQzOnX>Ot}N63cukzyPVdlu zg#Hvg&3uNYXm_Z#+8kM<$M)97nd|5;(5vMoUHwL{Wp1Qx(qq5#j+NKxZgVSbo6gx% zXUm&}{E2)B7R_H6b{}8U_oJUAVz4A(n2hFY`T-TRV2yJm21-0e$SAdC zL5K4K|4%ORul<5@w-oX>wXP*sHmKf~48ER|7p};dz_-Nr;^*-5cghb4ayZ~L;uuZF i8I1mnD;WbA-(w7f)9*7zC*w)RAUGX;93hUri1;5ro`QM+ delta 2356 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 BV>|!= delta 3514 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 delta 173 zcmca9a#Li(A6CZelP7S9P8MPdE)M{hgD!ml diff --git a/target/classes/dev/lions/unionflow/client/view/UserSession$EntiteInfo.class b/target/classes/dev/lions/unionflow/client/view/UserSession$EntiteInfo.class index bc8cb2805f1dd71c40df22e9922a8e8b30e86054..fb3243808d14ff16a4c67937da914e234f1556ff 100644 GIT binary patch delta 151 zcmdnPzlVRr7iLDy$q!jXCv&mnh#E3*Fc~rMGZ`~TFqtx_F_|&AGFeRSW(j4q1*)-S zb!1>=a+-XfO?b2CFAf+zTvz4k+#m7MEkwU=0L{2Z6!Mm;e9( delta 151 zcmdnPzlVRr7iLDO$q!jXCv&mnh$=B~Fex+eGpR60FsU)9F{v}SGHFikW(j4~1FErQ zHDX|8GM;>&O?b2CEfN+!`!?4k&I17MEkwV08kDJA=iO*sK`cz~Y;L c;$A>;Z=iS}qu*phc3ajUAU_zau8Z9W0Kb7HP5=M^ diff --git a/target/classes/dev/lions/unionflow/client/view/UserSession.class b/target/classes/dev/lions/unionflow/client/view/UserSession.class index 6d9184b002e620b16c869181786d99dcf6532783..327240e06c1441f7c683545eea021279033926e3 100644 GIT binary patch literal 14762 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 E0RoH>tN;K2 delta 53 zcmeys{(*hNWG2RWlP@xfPF~5R&bS1~vSnStz{<38vM_TX;~KC`6|)BG2B6r+$;+8N E0RiO^r2qf` diff --git a/target/classes/dev/lions/unionflow/client/view/UtilisateursBean$StatistiquesUtilisateurs.class b/target/classes/dev/lions/unionflow/client/view/UtilisateursBean$StatistiquesUtilisateurs.class index 4529171f6208438e43064f8517fbb3983983e476..f5f93d70fddcecbbc5d94be8aa43d508b846d9bc 100644 GIT binary patch delta 105 zcmcc5eV=0ou4tQxGdf#P$(;%ixr0J*sz2mk;8 delta 105 zcmcc5eV=WH{$#K^NmeVyX<&7ktQxGdfa0^k;%ixr0JkU}`v3p{ diff --git a/target/classes/dev/lions/unionflow/client/view/UtilisateursBean$Utilisateur.class b/target/classes/dev/lions/unionflow/client/view/UtilisateursBean$Utilisateur.class index 350a1e616e4b5136ba228f911564071c29efb6f2..df5e81ed87051cf2ec085b7ac1789c10da49cfc1 100644 GIT binary patch delta 527 zcmW;EPe@cz7zOa}EG{xJ^JW~hnMY|v3!j1oO$0r#sI?0p2r3j52&pJ2NMwj8L`^v$9MGQ9Rt;J->6lyBFJwjotF&tZuckb+11U z#padvJE}w!Jbm1X=$wFyQsZ?2N0rknj3?n(cqrW%ksgdn zFCIw(!#a4-)km_P+et3Qxp>UQ1Q(NBJdr*m_5ZA0dy4H-wkfvH*iN&Z;r$fvckEfV zFWJ6g`+j-v3^48UtB3BC+Bm-~c0NzR%@8l5POD+~A4kDSC`IfE@Z NkAG5(Z5_9-?E`4?n6m%? delta 527 zcmW;EOGuPa90lU!G%GHLV{t4L130pf?xv@ zN_R0XCbbs!+KgHob(CPTTIHjMy(5g^1GO?(X@W^S>wIlW?-ngNW|2@^r#e zf?D&+cpP;}6fWy>E2s;-F6xc9dmYt4zhZoxe$_ZEM>Wx#=}}yxMN}*Eb+gM@E^e4z zsn1az^qa=peJ*YpPtkAFyNtu{qT6`X@2LCq9(~UrMXz4)N7Mu6nAw%)xac>#J2{RT zpbr{P(Y0}Jz)^Afknw2XuALAIkL5Imr5GdPU{ucIiB#aJUJGp6V-mwNd5Guo2rnd# zmy*CM8O50P<-58l_pP1eVw{T!E+)Bn&BYrTMp7T<9@|rFr`gW1O|hM2JIDJe-XGa% zw(r=^vwhF@1KW?hP4m{(jltHkPjU(il8r?PU`YzFENAdpO7KO_;j4u4O)9Y>7m<+~ ztm^$>Th@18{NTk;-4bfZT4P#g+R*7xyljhUn`uWv*yT^Z*nnH3}(O{bb5jtNE_ zqaI@%RkZlSAH*!iHPP06w@e*HOUr28XN~@0`pu3%P5*kH_xn7b=Xl@uZr$=a)9JSd zngDpUoL#0bbmf(Kx>*{#x3NwNR8#~ilk-dbWu?Q*s;dH()n#rI{FvMlIsR|jg z%N!T=zRX~pVREc;%H|%?&DGwUBbO`#Rm1> ztD&XVU%^7xBE1s+R^6nnJ>Tp?7~BYl2NCe%1NabyEX1Op)Y^-UIcS9eh(WI0v>!?z z#M5B(#79WN$8cZ>oXEpK3`G%!VI)hDs`BMB`6I>BqymvKhbh@;2m0-n2l+ip@JPNS+I(y zY6LKy-e*KV7k|nl>kRJmC3mUe9<}I-nTW?Mq%b~+rSma|jrX5s4PVsmIcLOP|g)>{uP_AL>dJBu?jg@!^zijgmrBE4H~c!>#+$NumuOO z6=$#w=dfKark3kFdBKgm>S!rSa~OkcxEpP-C%7W5vzoJyo%X{*s22`$$|fY^FmLsH zw)la2{>Y7waI>S_R~E)i{Z->2Jg-e23H6!G;HMmgG5RpJ&DeDi`VfMDJ(Z z#3l6$zin5vV1B&%N4DX zh<{~grboS%NO!DMxxyseY11|6s)ZzZKa@OYp)$OS>2lZ^ubUWa#aN7Jt|ArrE|#db zquxHm>~|Ha80xut2WlNdTEJbXEPR3}x$3s*-KocgYIO3rRnL$<&12JhQ%?x#jntEx z^_53$g7>3_-#MlWtA+q3*zLDOvCO&Klm{K1_mL3SOoD5LP$WNWM)-c ziZKwQ5swmCo3-0h%H22&$9QC80`f5tK9r#p<*34oc!~R0FbT6!ffbmHR<2iJN~FbY zQJyNIQ(?!;$fQ#NstHV^G96*OiU!QU61;|`n1$t-iDs&+@p@!WcD8cAL9`Bus7E^I zSxo2gn9Gdw7_5=2Mf@+|w~%O)B;;OCU(9}%u$MR4$6H8dSSQ{_E|#(S<*crmWQ(}+ zwnwjI>{W=vJ4nL2ax!mPbQ`&LDyxx(HIb71DCO&5^7oj09Y$b1iXa@xMpnHE^RbzU zw-WdOTd<9*kI{)wa0uJcgU@7TLA}0%1O9^JF174rvIt`ERitP{l4|*eS-yn>-{E;e zPV7Mr_Hv?K4F5fQ{DGbBV|V-6!;fge0kq*DHsB|`&-FI^%w)e{2fDF~3A=EZo;^JM zmAj+-_wqY}KK!PR@$Dw#Df&CrKk6P7PXLlyp>8f^#-3?w@|lIkC%wAN=2J` zir=l*Bq}_1pDb!QV7(Ire(oNkFaOxS diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 0804e29..78f7651 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -33,10 +33,12 @@ dev\lions\unionflow\client\service\RestClientExceptionMapper$UnauthorizedExcepti dev\lions\unionflow\client\service\DocumentService.class dev\lions\unionflow\client\util\LazyDataModelBase.class dev\lions\unionflow\client\view\MembreImportBean$ResultatImport.class +dev\lions\unionflow\client\view\DashboardMembreBean$CotisationPerso.class dev\lions\unionflow\client\view\RapportDetailsBean.class dev\lions\unionflow\client\view\SuperAdminBean$Entite.class dev\lions\unionflow\client\view\DemandesAideBean.class dev\lions\unionflow\client\service\MetricsService$ResponseTimeStats.class +dev\lions\unionflow\client\api\dto\MembreDashboardResponse.class dev\lions\unionflow\client\view\RapportsBean$NouveauRapport.class dev\lions\unionflow\client\view\DocumentsBean$Dossier.class dev\lions\unionflow\client\view\MembreDashboardBean$Alerte.class @@ -59,7 +61,9 @@ dev\lions\unionflow\client\service\AdminUserService.class dev\lions\unionflow\client\service\CacheService.class dev\lions\unionflow\client\view\UserSession.class dev\lions\unionflow\client\view\CotisationsBean.class +dev\lions\unionflow\client\view\DashboardMembreBean$NotificationPerso.class dev\lions\unionflow\client\service\RestClientExceptionMapper$BadRequestException.class +dev\lions\unionflow\client\view\MesCotisationsPaiementBean$PaiementPerso.class dev\lions\unionflow\client\view\MembreInscriptionBean.class dev\lions\unionflow\client\view\RapportsBean$HistoriqueRapport.class dev\lions\unionflow\client\view\RolesBean$Utilisateur.class @@ -67,6 +71,7 @@ dev\lions\unionflow\client\validation\ValidationGroups$UpdateAssociation.class dev\lions\unionflow\client\view\PersonnelBean.class dev\lions\unionflow\client\view\MembreDashboardBean$Activite.class dev\lions\unionflow\client\constants\StatutOrganisationConstants.class +dev\lions\unionflow\client\view\MesCotisationsPaiementBean$CotisationPerso.class dev\lions\unionflow\client\view\SouscriptionBean$AlerteQuota.class dev\lions\unionflow\client\view\DemandesBean$Gestionnaire.class dev\lions\unionflow\client\service\MembreService$ResultatImportDTO.class @@ -80,6 +85,7 @@ dev\lions\unionflow\client\view\UtilisateursBean$Organisation.class dev\lions\unionflow\client\security\TokenCleanupService.class dev\lions\unionflow\client\service\MetricsService.class dev\lions\unionflow\client\view\SuperAdminBean$Alerte.class +dev\lions\unionflow\client\converter\UuidConverter.class dev\lions\unionflow\client\view\DashboardBean$Activity.class dev\lions\unionflow\client\view\ParametresBean$SessionActive.class dev\lions\unionflow\client\view\EntitesGestionBean$Filtres.class @@ -103,7 +109,6 @@ dev\lions\unionflow\client\view\CotisationsGestionBean.class dev\lions\unionflow\client\view\MembreProfilBean$Aide.class dev\lions\unionflow\client\config\QuarkusApplicationFactory.class dev\lions\unionflow\client\view\ParametresBean.class -dev\lions\unionflow\client\service\AssociationService$PagedResponseDTO.class dev\lions\unionflow\client\service\AdhesionService.class dev\lions\unionflow\client\view\SuperAdminBean$MoisRevenu.class dev\lions\unionflow\client\security\TokenRefreshService$TokenInfo.class @@ -120,6 +125,7 @@ dev\lions\unionflow\client\validation\ValidationGroups$UpdateMember.class dev\lions\unionflow\client\view\DocumentsBean$Filtres.class dev\lions\unionflow\client\view\CotisationsGestionBean$FiltresCotisations.class dev\lions\unionflow\client\view\MembreRechercheBean$Filtres.class +dev\lions\unionflow\client\view\DashboardMembreBean.class dev\lions\unionflow\client\exception\ViewExpiredExceptionHandler.class dev\lions\unionflow\client\view\MembreProfilBean$ContactData.class dev\lions\unionflow\client\service\AnalyticsService.class @@ -137,6 +143,7 @@ dev\lions\unionflow\client\view\LoginBean.class dev\lions\unionflow\client\security\AuthenticationFilter.class dev\lions\unionflow\client\service\AuditService.class dev\lions\unionflow\client\view\FavorisBean.class +dev\lions\unionflow\client\bean\PageSecurityBean.class dev\lions\unionflow\client\view\EvenementsBean$FiltresEvenement.class dev\lions\unionflow\client\view\SouscriptionBean.class dev\lions\unionflow\client\view\PersonnelBean$StatistiquesProfil.class @@ -208,6 +215,8 @@ dev\lions\unionflow\client\view\MembreRechercheBean$RechercheSauvegardee.class dev\lions\unionflow\client\view\HelloView.class dev\lions\unionflow\client\view\EntitesGestionBean.class dev\lions\unionflow\client\view\RapportsBean$Alerte.class +dev\lions\unionflow\client\view\MesCotisationsPaiementBean.class +dev\lions\unionflow\client\service\MembreDashboardRestClient.class dev\lions\unionflow\client\view\EvenementsBean$StatistiquesEvenements.class dev\lions\unionflow\client\view\DemandesBean$NouvelleDemande.class dev\lions\unionflow\client\interceptor\LogBackendCall.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index f497288..ae1ce74 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,7 +1,10 @@ +C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\api\dto\MembreDashboardResponse.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\bean\MenuBean.java +C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\bean\PageSecurityBean.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\config\QuarkusApplicationFactory.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\constants\StatutOrganisationConstants.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\converter\MembreConverter.java +C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\converter\UuidConverter.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\el\QuarkusArcELResolver.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\exception\ViewExpiredExceptionHandler.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\exception\ViewExpiredExceptionHandlerFactory.java @@ -32,6 +35,7 @@ C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quark C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\service\ExportClientService.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\service\FavorisService.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\service\FormulaireService.java +C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\service\MembreDashboardRestClient.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\service\MembreImportMultipartForm.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\service\MembreService.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\service\MetricsService.java @@ -63,6 +67,7 @@ C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quark C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\CotisationsBean.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\CotisationsGestionBean.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\DashboardBean.java +C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\DashboardMembreBean.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\DemandesAideBean.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\DemandesBean.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\DocumentBean.java @@ -85,6 +90,7 @@ C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quark C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\MembreListeBean.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\MembreProfilBean.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\MembreRechercheBean.java +C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\MesCotisationsPaiementBean.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\NavigationBean.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\NotificationBean.java C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\OrganisationDetailBean.java diff --git a/unionflow-client-quarkus-primefaces-freya.iml b/unionflow-client-quarkus-primefaces-freya.iml deleted file mode 100644 index 7d58d8e..0000000 --- a/unionflow-client-quarkus-primefaces-freya.iml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file