diff --git a/pom.xml b/pom.xml index d0a0886..8d780af 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ dev.lions.unionflow unionflow-parent - 1.0.3 + 1.0.4 ../unionflow-server-api/parent-pom.xml @@ -129,7 +129,7 @@ dev.lions.unionflow unionflow-server-api - 1.0.3 + 1.0.4 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 index eefab52..4ca6c6a 100644 --- a/src/main/java/dev/lions/unionflow/client/api/dto/MembreDashboardResponse.java +++ b/src/main/java/dev/lions/unionflow/client/api/dto/MembreDashboardResponse.java @@ -1,5 +1,9 @@ package dev.lions.unionflow.client.api.dto; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; @@ -7,29 +11,33 @@ import java.time.LocalDate; /** * DTO received from the backend for the member dashboard synthesis. */ -public record MembreDashboardResponse( - String prenom, - String nom, - LocalDate dateInscription, +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MembreDashboardResponse implements Serializable { - // Cotisations - BigDecimal mesCotisationsPaiement, - String statutCotisations, - Integer tauxCotisationsPerso, + private String prenom; + private String nom; + private LocalDate dateInscription; - // Epargne - BigDecimal monSoldeEpargne, - BigDecimal evolutionEpargneNombre, - String evolutionEpargne, - Integer objectifEpargne, + // Cotisations + private BigDecimal mesCotisationsPaiement; + private String statutCotisations; + private Integer tauxCotisationsPerso; - // Evenements - Integer mesEvenementsInscrits, - Integer evenementsAVenir, - Integer tauxParticipationPerso, + // Epargne + private BigDecimal monSoldeEpargne; + private BigDecimal evolutionEpargneNombre; + private String evolutionEpargne; + private Integer objectifEpargne; - // Aides - Integer mesDemandesAide, - Integer aidesEnCours, - Integer tauxAidesApprouvees) implements Serializable { + // Evenements + private Integer mesEvenementsInscrits; + private Integer evenementsAVenir; + private Integer tauxParticipationPerso; + + // Aides + private Integer mesDemandesAide; + private Integer aidesEnCours; + private Integer tauxAidesApprouvees; } 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 1327d71..bb56bae 100644 --- a/src/main/java/dev/lions/unionflow/client/view/AdhesionsBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/AdhesionsBean.java @@ -152,11 +152,11 @@ public class AdhesionsBean implements Serializable { items.add(new SelectItem(null, "Sélectionner une organisation")); if (listeAssociations != null) { for (OrganisationSummaryResponse assoc : listeAssociations) { - String label = assoc.nom(); - if (assoc.typeOrganisation() != null) { - label += " (" + assoc.typeOrganisation() + ")"; + String label = assoc.getNom(); + if (assoc.getTypeOrganisation() != null) { + label += " (" + assoc.getTypeOrganisation() + ")"; } - items.add(new SelectItem(assoc.id(), label)); + items.add(new SelectItem(assoc.getId(), label)); } } return items; diff --git a/src/main/java/dev/lions/unionflow/client/view/CotisationsBean.java b/src/main/java/dev/lions/unionflow/client/view/CotisationsBean.java index bce70db..ebee7c3 100644 --- a/src/main/java/dev/lions/unionflow/client/view/CotisationsBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/CotisationsBean.java @@ -680,7 +680,7 @@ public class CotisationsBean implements Serializable { try { IntentionStatutResponse statut = paiementClientService.getStatutIntention(waveIntentionId); - this.waveStatut = statut.statut(); + this.waveStatut = statut.getStatut(); if ("COMPLETEE".equals(waveStatut)) { waveDialogOuvert = false; 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 d5617f5..4600406 100644 --- a/src/main/java/dev/lions/unionflow/client/view/CotisationsGestionBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/CotisationsGestionBean.java @@ -352,8 +352,8 @@ public class CotisationsGestionBean implements Serializable { if (response != null && response.getData() != null) { for (OrganisationSummaryResponse assoc : response.getData()) { Organisation org = new Organisation(); - org.setId(assoc.id()); - org.setNom(assoc.nom()); + org.setId(assoc.getId()); + org.setNom(assoc.getNom()); listeOrganisations.add(org); } } @@ -391,7 +391,7 @@ public class CotisationsGestionBean implements Serializable { for (OrganisationSummaryResponse assoc : associations.stream().limit(5).collect(Collectors.toList())) { List cotisationsOrg = cotisationsDTO.stream() - .filter(c -> c.getOrganisationId() != null && c.getOrganisationId().equals(assoc.id())) + .filter(c -> c.getOrganisationId() != null && c.getOrganisationId().equals(assoc.getId())) .collect(Collectors.toList()); long total = cotisationsOrg.size(); @@ -404,7 +404,7 @@ public class CotisationsGestionBean implements Serializable { .reduce(BigDecimal.ZERO, BigDecimal::add); OrganisationPerformante org = new OrganisationPerformante(); - org.setNom(assoc.nom()); + org.setNom(assoc.getNom()); org.setTauxRecouvrement(taux); org.setMontantCollecte(formatMontant(montantCollecte)); org.setNombreMembresAJour((int) payees); diff --git a/src/main/java/dev/lions/unionflow/client/view/DashboardMembreBean.java b/src/main/java/dev/lions/unionflow/client/view/DashboardMembreBean.java index e53a6aa..e702adf 100644 --- a/src/main/java/dev/lions/unionflow/client/view/DashboardMembreBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/DashboardMembreBean.java @@ -94,22 +94,22 @@ public class DashboardMembreBean implements Serializable { try { 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(); + this.prenomMembre = data.getPrenom(); + this.nomMembre = data.getNom(); + this.dateInscription = data.getDateInscription(); + this.mesCotisationsPaiement = formatMontant(data.getMesCotisationsPaiement()); + this.statutCotisations = data.getStatutCotisations() != null ? data.getStatutCotisations() : "Non disponible"; + this.tauxCotisationsPerso = data.getTauxCotisationsPerso(); + this.monSoldeEpargne = formatMontant(data.getMonSoldeEpargne()); + this.evolutionEpargneNombre = formatMontant(data.getEvolutionEpargneNombre()); + this.evolutionEpargne = data.getEvolutionEpargne() != null ? data.getEvolutionEpargne() : "+0%"; + this.objectifEpargne = data.getObjectifEpargne(); + this.mesEvenementsInscrits = data.getMesEvenementsInscrits() != null ? data.getMesEvenementsInscrits() : 0; + this.evenementsAVenir = data.getEvenementsAVenir() != null ? data.getEvenementsAVenir() : 0; + this.tauxParticipationPerso = data.getTauxParticipationPerso(); + this.mesDemandesAide = data.getMesDemandesAide() != null ? data.getMesDemandesAide() : 0; + this.aidesEnCours = data.getAidesEnCours() != null ? data.getAidesEnCours() : 0; + this.tauxAidesApprouvees = data.getTauxAidesApprouvees(); } } catch (Exception e) { LOG.error("Erreur chargement KPI dashboard", e); 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 0acc25d..f67d3f0 100644 --- a/src/main/java/dev/lions/unionflow/client/view/EntitesGestionBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/EntitesGestionBean.java @@ -113,10 +113,10 @@ public class EntitesGestionBean implements Serializable { associations = response.getData(); } statistiques.setTotalEntites(associations.size()); - long actives = associations.stream().filter(a -> "ACTIVE".equals(a.statut())).count(); + long actives = associations.stream().filter(a -> "ACTIVE".equals(a.getStatut())).count(); statistiques.setEntitesActives((int) actives); int totalMembres = associations.stream() - .mapToInt(a -> a.nombreMembres() != null ? a.nombreMembres() : 0) + .mapToInt(a -> a.getNombreMembres() != null ? a.getNombreMembres() : 0) .sum(); statistiques.setTotalMembres(totalMembres); double moyenne = associations.isEmpty() ? 0 : (double) totalMembres / associations.size(); @@ -154,15 +154,15 @@ public class EntitesGestionBean implements Serializable { private Entite convertToEntite(OrganisationSummaryResponse dto) { Entite entite = new Entite(); - entite.setId(dto.id()); - entite.setNom(dto.nom()); - entite.setCodeEntite(dto.nomCourt()); // Using nomCourt as code - entite.setType(dto.typeOrganisation()); - entite.setTypeLibelle(typeCatalogueService.resolveLibelle(dto.typeOrganisation())); + entite.setId(dto.getId()); + entite.setNom(dto.getNom()); + entite.setCodeEntite(dto.getNomCourt()); // Using nomCourt as code + entite.setType(dto.getTypeOrganisation()); + entite.setTypeLibelle(typeCatalogueService.resolveLibelle(dto.getTypeOrganisation())); entite.setRegion(null); // Not available in Summary - entite.setStatut(dto.statut()); - entite.setNombreMembres(dto.nombreMembres() != null ? dto.nombreMembres() : 0); - entite.setMembresUtilises(dto.nombreMembres() != null ? dto.nombreMembres() : 0); + entite.setStatut(dto.getStatut()); + entite.setNombreMembres(dto.getNombreMembres() != null ? dto.getNombreMembres() : 0); + entite.setMembresUtilises(dto.getNombreMembres() != null ? dto.getNombreMembres() : 0); entite.setAdresse(null); // Not available in Summary entite.setTelephone(null); // Not available in Summary entite.setEmail(null); // Not available in Summary @@ -170,7 +170,7 @@ public class EntitesGestionBean implements Serializable { entite.setDerniereActivite(null); // Not available in Summary try { - SouscriptionStatutResponse souscription = souscriptionService.obtenirActive(dto.id()); + SouscriptionStatutResponse souscription = souscriptionService.obtenirActive(dto.getId()); if (souscription != null) { entite.setForfaitSouscrit( souscription.getPlanCommercial() != null ? souscription.getPlanCommercial() : "Non défini"); @@ -572,7 +572,7 @@ public class EntitesGestionBean implements Serializable { for (OrganisationSummaryResponse assoc : associations) { try { - SouscriptionStatutResponse souscription = souscriptionService.obtenirActive(assoc.id()); + SouscriptionStatutResponse souscription = souscriptionService.obtenirActive(assoc.getId()); if (souscription != null) { totalSouscriptions++; if ("ACTIVE".equals(souscription.getStatut())) { 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 89f37b4..65dd0cc 100644 --- a/src/main/java/dev/lions/unionflow/client/view/MembreExportBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/MembreExportBean.java @@ -98,8 +98,8 @@ public class MembreExportBean implements Serializable { : new ArrayList<>(); for (OrganisationSummaryResponse assoc : associations) { OrganisationResponse org = new OrganisationResponse(); - org.setId(assoc.id()); - org.setNom(assoc.nom()); + org.setId(assoc.getId()); + org.setNom(assoc.getNom()); org.setVille(null /* ville not in Summary */); organisationsDisponibles.add(org); } 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 2201d3c..d49bebb 100644 --- a/src/main/java/dev/lions/unionflow/client/view/MembreImportBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/MembreImportBean.java @@ -81,8 +81,8 @@ public class MembreImportBean implements Serializable { : new ArrayList<>(); for (OrganisationSummaryResponse assoc : associations) { OrganisationResponse org = new OrganisationResponse(); - org.setId(assoc.id()); - org.setNom(assoc.nom()); + org.setId(assoc.getId()); + org.setNom(assoc.getNom()); org.setVille(null /* ville not in Summary */); organisationsDisponibles.add(org); } 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 44ccfcf..b0cdeb4 100644 --- a/src/main/java/dev/lions/unionflow/client/view/MembreLazyDataModel.java +++ b/src/main/java/dev/lions/unionflow/client/view/MembreLazyDataModel.java @@ -97,7 +97,7 @@ public class MembreLazyDataModel extends LazyDataModelBase o.statut() != null && StatutOrganisationConstants.ACTIVE.equals(o.statut())) + .filter(o -> o.getStatut() != null && StatutOrganisationConstants.ACTIVE.equals(o.getStatut())) .count(); long inactives = total - actives; 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 ade9826..673fb7a 100644 --- a/src/main/java/dev/lions/unionflow/client/view/OrganisationsBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/OrganisationsBean.java @@ -159,7 +159,7 @@ public class OrganisationsBean implements Serializable { totalOrganisations = toutes.size(); organisationsActives = toutes.stream() - .filter(o -> o.statut() != null && StatutOrganisationConstants.ACTIVE.equals(o.statut())) + .filter(o -> o.getStatut() != null && StatutOrganisationConstants.ACTIVE.equals(o.getStatut())) .count(); organisationsInactives = totalOrganisations - organisationsActives; @@ -321,7 +321,7 @@ public class OrganisationsBean implements Serializable { public void preparerModification(OrganisationSummaryResponse org) { try { organisationSelectionnee = retryService.executeWithRetrySupplier( - () -> organisationService.obtenirParId(org.id()), + () -> organisationService.obtenirParId(org.getId()), "chargement de l'organisation pour modification"); } catch (Exception e) { errorHandler.handleException(e, "lors du chargement de l'organisation", null); @@ -368,9 +368,9 @@ public class OrganisationsBean implements Serializable { */ public void preparerSuppression(OrganisationSummaryResponse org) { OrganisationResponse full = new OrganisationResponse(); - full.setId(org.id()); - full.setNom(org.nom()); - full.setStatut(org.statut()); + full.setId(org.getId()); + full.setNom(org.getNom()); + full.setStatut(org.getStatut()); organisationPourSuppression = full; } @@ -399,9 +399,9 @@ public class OrganisationsBean implements Serializable { */ public void preparerBasculerStatut(OrganisationSummaryResponse org) { OrganisationResponse full = new OrganisationResponse(); - full.setId(org.id()); - full.setNom(org.nom()); - full.setStatut(org.statut()); + full.setId(org.getId()); + full.setNom(org.getNom()); + full.setStatut(org.getStatut()); organisationPourStatut = full; } @@ -609,22 +609,22 @@ public class OrganisationsBean implements Serializable { .filter(org -> { if (rechercheGlobale != null && !rechercheGlobale.trim().isEmpty()) { String recherche = rechercheGlobale.toLowerCase(); - return (org.nom() != null && org.nom().toLowerCase().contains(recherche)) || - (org.nomCourt() != null && org.nomCourt().toLowerCase().contains(recherche)) || - (org.typeOrganisationLibelle() != null - && org.typeOrganisationLibelle().toLowerCase().contains(recherche)); + return (org.getNom() != null && org.getNom().toLowerCase().contains(recherche)) || + (org.getNomCourt() != null && org.getNomCourt().toLowerCase().contains(recherche)) || + (org.getTypeOrganisationLibelle() != null + && org.getTypeOrganisationLibelle().toLowerCase().contains(recherche)); } return true; }) .filter(org -> { if (filtreStatut != null && !filtreStatut.trim().isEmpty()) { - return filtreStatut.equals(org.statut()); + return filtreStatut.equals(org.getStatut()); } return true; }) .filter(org -> { if (filtreType != null && !filtreType.trim().isEmpty()) { - return filtreType.equals(org.typeOrganisation()); + return filtreType.equals(org.getTypeOrganisation()); } return true; }) 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 22503d2..685c780 100644 --- a/src/main/java/dev/lions/unionflow/client/view/SuperAdminBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/SuperAdminBean.java @@ -339,17 +339,17 @@ public class SuperAdminBean implements Serializable { : new ArrayList<>(); topEntites = associations.stream() .sorted((a1, a2) -> { - int m1 = a1.nombreMembres() != null ? a1.nombreMembres() : 0; - int m2 = a2.nombreMembres() != null ? a2.nombreMembres() : 0; + int m1 = a1.getNombreMembres() != null ? a1.getNombreMembres() : 0; + int m2 = a2.getNombreMembres() != null ? a2.getNombreMembres() : 0; return Integer.compare(m2, m1); }) .limit(5) .map(a -> { Entite entite = new Entite(); - entite.setId(a.id()); - entite.setNom(a.nom()); - entite.setTypeEntite(a.typeOrganisation()); - entite.setNombreMembres(a.nombreMembres() != null ? a.nombreMembres() : 0); + entite.setId(a.getId()); + entite.setNom(a.getNom()); + entite.setTypeEntite(a.getTypeOrganisation()); + entite.setNombreMembres(a.getNombreMembres() != null ? a.getNombreMembres() : 0); return entite; }) .collect(java.util.stream.Collectors.toList()); 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 4d201b9..6ae1eb6 100644 --- a/src/main/java/dev/lions/unionflow/client/view/UtilisateursBean.java +++ b/src/main/java/dev/lions/unionflow/client/view/UtilisateursBean.java @@ -91,8 +91,8 @@ public class UtilisateursBean implements Serializable { : new ArrayList<>(); for (OrganisationSummaryResponse assoc : associations) { Organisation org = new Organisation(); - org.setId(assoc.id()); - org.setNom(assoc.nom()); + org.setId(assoc.getId()); + org.setNom(assoc.getNom()); organisationsDisponibles.add(org); } } catch (Exception e) { diff --git a/src/main/resources/META-INF/resources/freya-layout/images/unionflow-logo.png b/src/main/resources/META-INF/resources/freya-layout/images/unionflow-logo.png new file mode 100644 index 0000000..90bcd48 Binary files /dev/null and b/src/main/resources/META-INF/resources/freya-layout/images/unionflow-logo.png differ diff --git a/src/main/resources/META-INF/resources/images/unionflow-logo.png b/src/main/resources/META-INF/resources/images/unionflow-logo.png new file mode 100644 index 0000000..90bcd48 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/unionflow-logo.png differ diff --git a/src/main/resources/META-INF/resources/index.xhtml b/src/main/resources/META-INF/resources/index.xhtml index 471d0f0..db3ee61 100644 --- a/src/main/resources/META-INF/resources/index.xhtml +++ b/src/main/resources/META-INF/resources/index.xhtml @@ -13,7 +13,7 @@ - + UnionFlow - Plateforme de Gestion Intégrée pour Mutuelles, Associations et Clubs @@ -23,6 +23,7 @@ + @@ -31,8 +32,13 @@
- - + + + + UNIONFLOW +
@@ -188,9 +194,9 @@
- Pourquoi choisir UnionFlow ? -

Une plateforme robuste et moderne bâtie pour les organisations du monde entier —
- avec une sensibilité particulière pour les réalités africaines.

+ La technologie au service de la gouvernance +

Toute la rigueur exigée par les institutions, accessible depuis votre mobile —
+ conçu avec une fine compréhension des réalités associatives africaines et mondiales.

@@ -214,15 +220,15 @@
  • - OpenID Connect via Keycloak + Infrastructure hautement sécurisée
  • - Contrôle d'accès granulaire par rôle + Chaque action est loggée et traçable
  • - Chiffrement de bout en bout + Droits de validation croisée stricts
@@ -269,16 +275,16 @@

- Architecture cloud-native + Architecture ultra-rapide

- Bâtie sur Quarkus et une architecture microservices, la plateforme monte en - charge automatiquement et garantit une haute disponibilité. + Bâtie sur des technologies cloud de dernière génération, la plateforme reste + fluide et instantanée même avec des milliers de transactions.