dahoud
fcaac36a14
feat(sprint-15 web 2026-04-25): Live Activity Feed page (transparency operations)
...
Page consommant /api/audit-trail/recent avec auto-refresh PrimeFaces toutes les 10s.
Transparency opérationnelle UnionFlow — chaque utilisateur voit selon son scope.
REST client AuditTrailRestClient
- Nouvelle méthode recent(scope, orgId, userId, limit)
Bean LiveFeedBean (@ViewScoped)
- Polling pilote externe via p:poll interval=10
- 3 scopes : SELF (défaut, n'importe quel rôle), ORG (admin/officer), ALL (compliance/contrôleur)
- Helpers : couleurAction (8 mappings), couleurSod (3 cas), tempsRelatif (s/m/h/j/futur)
- Limit clamp [1, 500]
- Compteur de refresh visible dans l'UI (debug)
Page /pages/secure/conformite/live-feed.xhtml
- Panel scope avec selectOneMenu + p:ajax change → rafraîchir
- Conditional inputs : orgId si scope=ORG, userId si scope=SELF
- p:poll interval=10 listener=rafraichir autoStart=true
- DataTable opérations : index, "il y a Xs", acteur+rôle, action coloré, entité, description, SoD tag
- Tag refresh counter (visible feedback)
Centralisation
- ViewPaths.CONFORMITE_LIVE_FEED + getter ViewPathsBean
- menu.xhtml : entrée Live Feed sous sous-menu Conformité (icon pi-bolt)
Tests (13/13 verts)
- couleurAction × 4 (danger/success/info/autres)
- couleurSod
- tempsRelatif × 6 (null, secondes, minutes, heures, jours, futur)
- setLimit clamp × 4
- defaults
2026-04-25 16:10:41 +00:00
dahoud
e936af7d39
feat(sprint-14 web 2026-04-25): picker p:autoComplete pour Compliance Officer (UX vs UUID textuel)
...
DRY strict — réutilise MembreService REST client existant, aucun nouveau client.
ComplianceOfficerPickerBean (@Named, @ApplicationScoped)
- suggest(query) : recherche multi-champ (nom OU prénom) via MembreService.rechercher,
dédoublonne via LinkedHashMap, gère erreur gracieuse → []
- label(membre) : "Prénom NOM (numéro)" avec fallback id si entité minimaliste
- resoudre(uuid) : pour affichage initial mode édition
UI organisation-form.xhtml
- Remplacement p:inputText UUID → p:autoComplete forceSelection minQueryLength=2 queryDelay=300
- Placeholder "Tapez 2+ lettres du nom ou prénom..."
- Stocke UUID, affiche label humain — DTO unchanged côté backend
Tests (8 tests, logique pure sans mock REST)
- label × 6 (null, complet, sans numéro, nom seul, prénom seul, fallback id)
- suggest × 2 (query null/blank → liste vide sans appel réseau)
- resoudre × 1 (id null)
ACTION USER : `mvn install` côté unionflow-server-api 1.0.9 puis tester web local.
2026-04-25 15:36:37 +00:00
dahoud
cdcdb37459
refactor(sprint-12 web 2026-04-25): centralisation navigation outcomes via ViewPaths constants + ViewPathsBean
...
DRY strict appliqué pour la maintenance — outcomes de navigation centralisés en un lieu unique
au lieu de paths hardcodés disséminés dans 13+ fichiers.
Architecture
- constants.ViewPaths : classe finale + ~80 constantes public static final String, organisées
par module (Dashboard, Membres, Adhésions, Cotisations, Finance, Crédit, Évènements, Aide,
Communication, Documents, Organisation, Conformité, Admin, Rapports, Souscription, Super-Admin)
- view.ViewPathsBean (@Named "paths" @ApplicationScoped) : expose les constantes en EL aux XHTML
Migration menu.xhtml (65 edits, 0 path orphelin)
- outcome="/pages/secure/dashboard" → outcome="#{paths.dashboard}"
- outcome="/pages/secure/conformite/dashboard" → outcome="#{paths.conformiteDashboard}"
- ... 60+ autres mappings
Migration autres XHTML (13 edits, 12 fichiers)
- index, error/viewExpired, topbar, admin × 4, evenement × 2, organisation × 2, reports
Migration beans Java (4 fichiers, 18 returns)
- NavigationBean : goToProfile, goToSettings (super-admin / admin / membre), getDashboardUrlForUserType
- DashboardMembreBean : 5 méthodes navigation (cotisations, événement, aide, profil)
- MembreDashboardBean : voirEvenement, payerCotisations
- OrganisationsBean : retour vers liste
Test cohérence (3 tests, 100%)
- chaquePathExisteCommeFichier : reflectif sur ViewPaths, vérifie xhtml en classpath
- redirectSuffixFormat : structure REDIRECT_SUFFIX
- aucuneConstanteVide : non-null, non-blank
Dette détectée (3 pages référencées mais inexistantes — flaggées KNOWN_MISSING_PAGES)
- /pages/secure/evenement/bilan-detail.xhtml
- /pages/admin/parametres.xhtml
- /pages/membre/parametres.xhtml
Bénéfices
- 1 seul lieu pour renommer/déplacer une page
- Type-safety compile-time côté Java
- Tests détectent automatiquement les paths orphelins
- IDE complétion sur les getters paths.xxx
2026-04-25 14:34:11 +00:00
dahoud
917c8c5359
feat(sprint-11 web 2026-04-25): pages PrimeFaces Sprint 10 (UBO, audit-trail viewer, délégations rôles) + bump api 1.0.6→1.0.8
...
DRY strict appliqué : web réutilise directement les DTOs officiels de
unionflow-server-api 1.0.8 (CreateBeneficiaireEffectifRequest, BeneficiaireEffectifResponse,
AuditTrailOperationResponse, CreateRoleDelegationRequest, RoleDelegationResponse) au lieu
de DTOs miroirs locaux. Aucune duplication.
Bump dépendance api 1.0.6 → 1.0.8
REST clients @RegisterRestClient configKey=unionflow-api
- BeneficiaireEffectifRestClient : CRUD lister/trouverParId/creer/mettreAJour/desactiver
- AuditTrailRestClient : 5 endpoints lecture (parUtilisateur, historique, parOrganisation, sodViolations, financial)
- RoleDelegationRestClient : listerParOrganisation / creer / revoquer
Beans @ViewScoped
- BeneficiaireEffectifBean : recherche (KYC|org|PEP), création formulaire, marquerPep, désactiver
- AuditTrailViewerBean : 5 modes (USER/ENTITY/ORG/SOD_VIOLATIONS/FINANCIAL), couleurAction (DELETE→danger, VALIDATE→success, etc.), couleurSod
- RoleDelegationBean : recherche/créer/révoquer, couleurStatut (ACTIVE/REVOQUEE/EXPIREE)
Pages XHTML
- /pages/secure/conformite/beneficiaires-effectifs.xhtml — recherche + tableau + nouvelle UBO (panel toggleable)
- /pages/secure/conformite/audit-trail.xhtml — filtres mode + tableau + détail JSONB (pre format)
- /pages/secure/admin/role-delegations.xhtml — table actives + nouvelle (datePicker dates)
MenuBean + menu.xhtml
- 3 nouveaux flags : isBeneficiairesEffectifsVisible, isAuditTrailViewerVisible, isRoleDelegationsVisible
- 3 menuitems ajoutés au sous-menu Conformité existant (icônes pi-users, pi-history, pi-share-alt)
- Gating par rôles : COMPLIANCE_OFFICER + CONTROLEUR_INTERNE pour audit ; ADMIN_ORGANISATION + PRESIDENT pour délégations
Tests (10/10 verts, 31/31 cumulé S8+S11)
- AuditTrailViewerBeanTest : 8 tests (couleurAction × 6 cas, couleurSod, defaults)
- RoleDelegationBeanTest : 2 tests (couleurStatut × 5, defaults)
2026-04-25 12:56:13 +00:00
dahoud
8f96fa4209
fix(sprint-9 followup web): expose nouvelles pages conformité dans le menu de navigation
...
Les 3 pages PrimeFaces livrées en Sprint 8 (compliance dashboard, rapports trimestriels,
PI-SPI readiness) existaient mais étaient inaccessibles via la navigation principale.
MenuBean
- isConformiteDashboardVisible : SUPER_ADMIN, ADMIN_ORGANISATION, PRESIDENT, TRESORIER, COMPLIANCE_OFFICER, CONTROLEUR_INTERNE
- isRapportsTrimestrielsVisible : SUPER_ADMIN, ADMIN_ORGANISATION, PRESIDENT, CONTROLEUR_INTERNE
- isPispiReadinessVisible : SUPER_ADMIN, COMPLIANCE_OFFICER
menu.xhtml
- Nouveau sous-menu "Conformité" (icône pi-verified) inséré après "Gestion Financière"
- 3 menuitems gated par les flags ci-dessus
2026-04-25 11:21:58 +00:00
dahoud
a7788036eb
feat(sprint-8 web 2026-04-25): pages PrimeFaces conformité (compliance dashboard + rapports trimestriels + PI-SPI readiness)
...
Front-end web JSF/PrimeFaces pour exposer les features backend Sprints 3, 5, 7 aux compliance officers et controleurs internes.
DTOs locaux (miroirs JSON, @JsonIgnoreProperties)
- ComplianceSnapshotDto + ConformiteIndicateurDto (P1-NEW-7)
- RapportTrimestrielDto + helpers estDraft/estSigne/estArchive (P2-NEW-3)
- PispiReadinessDto + CheckResultDto + helpers estReady/estBlocked (P1-NEW-15)
REST clients @RegisterRestClient configKey=unionflow-api
- ComplianceDashboardRestClient : getSnapshotCurrent + getSnapshotOf(orgId)
- RapportTrimestrielRestClient : lister, generer, signer, archiver, telechargerPdf
- PispiReadinessRestClient : getReadiness
- AuthHeaderFactory propage le token OIDC
Beans @ViewScoped
- ConformiteDashboardBean : init + rafraichir + couleurScore + hasAlertes
- RapportsTrimestrielsBean : lister, genererRapport, signerSelection, archiverSelection, telechargerPdf via ExternalContext
- PispiReadinessBean : rafraichir + gestion HTTP 503 BLOCKED + couleurStatus + couleurCheck
Pages XHTML PrimeFaces (template main-template.xhtml, classes Freya)
- /pages/secure/conformite/dashboard.xhtml — score global + 9 indicateurs en grille + alertes
- /pages/secure/conformite/rapports-trimestriels.xhtml — table DRAFT/SIGNE/ARCHIVE + bouton générer/signer/archiver/PDF
- /pages/secure/admin/pispi-readiness.xhtml — 8 checks + blocages/warnings dédiés + statut global
Tests (21/21 verts, JUnit5 natif puisque AssertJ non transitif)
- ConformiteDashboardBeanTest : 9 tests (couleur score success/warning/danger/secondary, hasAlertes 5 cas)
- PispiReadinessBeanTest : 8 tests (couleurStatus READY/DEGRADED/BLOCKED/null, couleurCheck PASS/FAIL × severity, DTO helpers)
- RapportTrimestrielDtoTest : 4 tests (estDraft/estSigne/estArchive/inconnu)
2026-04-25 11:02:48 +00:00
b0d23a0003
chore(quarkus-327): bump to Quarkus 3.27.3 LTS, make pom autonomous, rename deprecated config keys
2026-04-23 14:46:48 +00:00
dahoud
401a72458b
chore: taglib PrimeFaces Freya + logo + cleanup OrganisationDetailBean
...
- META-INF/primefaces-freya.taglib.xml : tags PrimeFaces Freya
- src/main/webapp/resources/images/unionflow-logo.png : logo app
- OrganisationDetailBean : cleanup mineur (2 lignes)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-21 12:43:56 +00:00
dahoud
deb525d727
fix: supprimer méthode getTypeOrganisationLibelle() dupliquée dans OrganisationDetailBean
2026-04-17 20:20:08 +00:00
dahoud
cbdd5571f9
refactor: corriger formulaire organisation et supprimer alias morts
...
Formulaire organisation-form.xhtml:
- Fix binding numeroRegistre→numeroEnregistrement (bug silencieux)
- Fix réseaux sociaux: JSON brut→format lisible un par ligne
- Fix tooltips: "Côte d'Ivoire"→générique multi-pays
OrganisationsBean:
- Villes: 20 CI→70+ villes UEMOA/CEMAC/Maroc
- Régions: 19 CI→60+ régions multi-pays
nouvelle.xhtml:
- Supprimer bouton "Enregistrer" doublon dans le header
detail.xhtml:
- numeroRegistre→numeroEnregistrement
- nomOrganisationParente→organisationParenteNom
- typeLibelle→typeOrganisationLibelle
OrganisationDetailBean:
- getTypeLibelle()→getTypeOrganisationLibelle()
2026-04-17 20:01:02 +00:00
dahoud
634cc5e30d
refactor: toilettage intégral menu et suppression système entités
...
Supprimé:
- EntitesGestionBean.java (doublon de OrganisationsBean)
- pages/super-admin/entites/ (gestion.xhtml + gestion-enhanced.xhtml)
- pages/super-admin/organisations.xhtml (doublon mort)
Menu restructuré:
- 32→17 sous-menus, 0 lien mort (était 22 url="#")
- Fusionné Annuaire+Gestion Membres en un seul sous-menu contextuel
- Supprimé sous-menu Administration (fourre-tout, doublons redistribués)
- Supprimé sous-menu Formations (inutile, pointait vers dashboard)
- Modules non implémentés: item unique "Bientôt disponible" disabled
- Aide et Support: 9→3 items, Mon Espace: 8→4 items
- Documents: 7→1 item (seul fonctionnel conservé)
Nettoyé:
- ADMIN_ENTITE→ADMIN_ORGANISATION dans scripts, docs, Javadoc
- 3 méthodes @Deprecated supprimées dans MenuBean
- faces-config.xml: 5 rules entite*→3 rules organisation*
- SuperAdminBean: constantes+méthodes entite→organisation
2026-04-17 19:20:19 +00:00
dahoud
4735c1633f
fix(cotisations): InitierPaiementEnLigneRequest record (new au lieu de builder)
...
Le DTO est un record Java, pas un @Builder Lombok. builder() n'existe pas.
Aussi: pom.xml mis à jour.
2026-04-17 00:10:36 +00:00
dahoud
4793f18711
fix(org): protéger preparerNouvelleOrganisation contre les AJAX postbacks
...
Le preRenderView de nouvelle.xhtml appelait preparerNouvelleOrganisation() à
chaque render — y compris les polls PrimeFaces du template (~5s) et les
partial AJAX updates. Cela réinitialisait nouvelleOrganisation = new OrganisationResponse()
à chaque cycle, perdant les données saisies par l'utilisateur.
Symptôme : erreurs 499 en boucle dans la console browser + impossible de soumettre
le formulaire (données toujours vides au moment du POST).
Fix : if (fc.isPostback()) return; → la méthode ne s'exécute que sur le
chargement initial (GET), pas sur les AJAX postbacks.
2026-04-16 10:38:26 +00:00
dahoud
d70c79f9e9
fix(organisations): corriger executeWithRetry, accesseurs statut et XHTML détail
...
- OrganisationsBean : executeWithRetrySupplier → executeWithRetry (méthode correcte,
compatible ECJ — Callable<T> au lieu de Supplier<T> non capturé)
- OrganisationDetailBean : utiliser statutLibelle/statutSeverity si présents avant
fallback sur statut brut ; supprimer revenirAListe() (redirect manuel inutile) ;
propager typeLibelle en plus de typeOrganisationLibelle
- detail.xhtml : remplacer les panneaux adresseComplete/dateFondation/niveauHierarchique
(champs absents du DTO) par nombreEvenements qui existe dans OrganisationSummaryResponse
2026-04-12 14:53:36 +00:00
dahoud
237922891d
fix(client): version 1.0.4, accesseurs JavaBean sur OrganisationSummaryResponse (compat JSF/EL)
2026-04-11 02:00:48 +00:00
dahoud
0d936eb80a
feat: formulaire types organisation avec categorie et modules requis
...
- TypeOrganisationsAdminBean: gestion List<String> modulesSelectionnes
(sync CSV↔List), constantes CATEGORIES/MODULES_DISPONIBLES, getters JSF,
CreateTypeReferenceRequest et UpdateTypeReferenceRequest mis à jour (11 args)
- organisations.xhtml: dropdown catégorie + selectManyCheckbox modules (16),
colonnes Catégorie et Modules requis dans le DataTable, dialogue 750px
- pom.xml: unionflow-server-api 1.0.0 → 1.0.3
2026-04-09 15:08:48 +00:00
dahoud
bcdf5c0338
fix(build): corriger types MembreSummaryResponse vs MembreResponse dans les beans
2026-04-07 22:01:32 +00:00
dahoud
5e88753469
fix(build): import lombok.Data manquant dans MessagingBean
2026-04-07 21:47:56 +00:00
dahoud
ac0c5a67a1
fix(frontend): corrections workflow v3.0 — inscription événements, CreateMembreRequest, AJAX session expiry
...
Services:
- EvenementService: POST /inscriptions (sans membreId), DELETE /inscriptions, GET /recherche, GET /type/{type}
- MembreService: creer() accepte CreateMembreRequest au lieu de MembreResponse
- Nouveaux services: BackupService, EpargneService, FinanceApprovalService, LogsService, MessageService, OrganisationService, PaiementClientService
Beans:
- MembreInscriptionBean: construit CreateMembreRequest.builder() avec organisationId UUID
- EvenementsBean: inscrireParticipant(id) sans userId (backend infère depuis token)
- DashboardBean: checkAccessAndRedirect() SUPER_ADMIN en premier
Sécurité:
- AuthenticationFilter: gestion AJAX PrimeFaces (partial/ajax → XML partial-response redirect)
- PermissionChecker: vérification rôles côté bean
- k8s/: manifestes secrets SMTP et Wave (placeholders à remplir)
Pages XHTML: dashboards rôles, cotisations, membres, événements, organisations
2026-04-07 20:54:20 +00:00
dahoud
0dc050f422
Sync: code local unifié
...
Synchronisation du code source local (fait foi).
Signed-off-by: lions dev Team
2026-03-15 16:25:45 +00:00
dahoud
6b28cf751e
Refactoring
2026-03-01 22:00:28 +00:00
dahoud
50a9b089a4
Fix: Correct exporterExcel method call parameters
...
The exporterExcel method signature requires 11 parameters but was being
called with only 3. This caused a compilation error during deployment.
Fixed by providing all required parameters:
- format, associationId, statut, type
- dateAdhesionDebut, dateAdhesionFin
- colonnesExport
- inclureHeaders, formaterDates, inclureStatistiques
- motDePasse
Most parameters are set to null or default values for now.
2025-12-12 22:17:27 +00:00
dahoud
2910809949
Configure Maven repository for unionflow-server-api dependency
2025-12-10 01:12:54 +00:00