Configure Maven repository for unionflow-server-api dependency

This commit is contained in:
dahoud
2025-12-10 01:12:54 +00:00
commit 2910809949
1173 changed files with 435718 additions and 0 deletions

View File

@@ -0,0 +1,116 @@
<!DOCTYPE html>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/templates/main-template.xhtml">
<ui:param name="page" value="#{rapportsBean}"/>
<ui:define name="title">Rapports Activités - UnionFlow</ui:define>
<ui:define name="content">
<!-- En-tête -->
<ui:include src="/templates/components/layout/page-header.xhtml">
<ui:param name="icon" value="pi pi-calendar text-orange-500" />
<ui:param name="title" value="Rapports Activités" />
<ui:param name="description" value="Analyse des activités et événements" />
<ui:define name="actions">
<h:form id="formActions">
<div class="flex gap-2">
<ui:include src="/templates/components/buttons/button-success.xhtml">
<ui:param name="value" value="Exporter" />
<ui:param name="icon" value="pi pi-download" />
<ui:param name="onclick" value="PF('dlgExport').show();" />
</ui:include>
<ui:include src="/templates/components/buttons/button-icon.xhtml">
<ui:param name="icon" value="pi pi-refresh" />
<ui:param name="action" value="#{rapportsBean.actualiser}" />
<ui:param name="update" value="@form" />
<ui:param name="title" value="Actualiser" />
<ui:param name="rounded" value="true" />
<ui:param name="text" value="false" />
<ui:param name="styleClass" value="ui-button-outlined ui-button-secondary" />
</ui:include>
</div>
</h:form>
</ui:define>
</ui:include>
<!-- Statistiques activités -->
<div class="grid">
<ui:include src="/templates/components/cards/stat-card.xhtml">
<ui:param name="value" value="#{rapportsBean.indicateurs.totalEvenements}" />
<ui:param name="label" value="Total Événements" />
<ui:param name="icon" value="pi pi-calendar" />
<ui:param name="bgColor" value="orange" />
</ui:include>
<ui:include src="/templates/components/cards/stat-card.xhtml">
<ui:param name="value" value="#{rapportsBean.indicateurs.croissanceEvenements}%" />
<ui:param name="label" value="Croissance Événements" />
<ui:param name="icon" value="pi pi-arrow-up" />
<ui:param name="bgColor" value="green" />
</ui:include>
</div>
<!-- KPIs Activités -->
<div class="card">
<h5>Indicateurs d'Activité</h5>
<div class="formgrid grid">
<ui:repeat value="#{rapportsBean.kpis}" var="kpi">
<ui:include src="/templates/components/cards/kpi-card.xhtml">
<ui:param name="title" value="#{kpi.libelle}" />
<ui:param name="value" value="#{kpi.valeur}" />
<ui:param name="icon" value="#{kpi.icon}" />
<ui:param name="iconColor" value="#{kpi.couleur}" />
<ui:param name="growthValue" value="#{kpi.variation}" />
<ui:param name="growthLabel" value="variation" />
<ui:param name="colSize" value="col-12 md:col-4" />
<ui:param name="showProgress" value="false" />
</ui:include>
</ui:repeat>
</div>
</div>
<!-- Dialog Export -->
<h:form id="formExport">
<p:dialog id="dlgExport"
widgetVar="dlgExport"
header="Exporter le Rapport Activités"
modal="true"
resizable="false"
style="width: 90vw; max-width: 500px;">
<div class="grid">
<div class="col-12">
<div class="field">
<p:outputLabel for="formatExport" value="Format d'Export" />
<p:selectOneRadio id="formatExport"
value="#{rapportsBean.nouveauRapport.format}"
layout="grid"
columns="1">
<f:selectItem itemLabel="PDF" itemValue="PDF" />
<f:selectItem itemLabel="Excel (.xlsx)" itemValue="EXCEL" />
<f:selectItem itemLabel="CSV" itemValue="CSV" />
</p:selectOneRadio>
</div>
</div>
</div>
<f:facet name="footer">
<div class="flex justify-content-end gap-2">
<p:commandButton value="Annuler"
styleClass="p-button-outlined"
onclick="PF('dlgExport').hide();"
type="button" />
<p:commandButton value="Exporter"
icon="pi pi-download"
styleClass="p-button-success"
action="#{rapportsBean.exporterDonnees}" />
</div>
</f:facet>
</p:dialog>
</h:form>
</ui:define>
</ui:composition>

View File

@@ -0,0 +1,145 @@
<!DOCTYPE html>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/templates/main-template.xhtml">
<ui:param name="page" value="#{rapportDetailsBean}"/>
<ui:define name="title">Détails du Rapport - UnionFlow</ui:define>
<ui:define name="content">
<h:form id="formDetails">
<p:messages id="messages" showDetail="true" closable="true"/>
<!-- En-tête -->
<div class="card mb-3">
<div class="flex justify-content-between align-items-center flex-column md:flex-row">
<div class="flex align-items-center gap-3 mb-2 md:mb-0">
<div class="bg-primary text-white border-round text-center"
style="width: 64px; height: 64px; line-height: 64px;">
<i class="pi #{rapportDetailsBean.rapport.typeIcon} text-3xl"></i>
</div>
<div>
<h3 class="m-0">#{rapportDetailsBean.rapport.typeLibelle}</h3>
<div class="mt-2 flex align-items-center gap-2">
<p:tag value="#{rapportDetailsBean.rapport.statut}"
severity="#{rapportDetailsBean.rapport.statutSeverity}" />
<span class="text-600">Généré le #{rapportDetailsBean.dateGenerationFormatee}</span>
</div>
</div>
</div>
<div class="flex gap-2">
<ui:include src="/templates/components/buttons/button-secondary.xhtml">
<ui:param name="value" value="Retour"/>
<ui:param name="icon" value="pi pi-arrow-left"/>
<ui:param name="action" value="#{rapportDetailsBean.retourner}"/>
</ui:include>
<p:commandButton value="Télécharger"
icon="pi pi-download"
styleClass="ui-button-success"
action="#{rapportDetailsBean.telechargerRapport}"
update="messages"
rendered="#{rapportDetailsBean.isRapportDisponible()}"/>
<p:commandButton value="Régénérer"
icon="pi pi-refresh"
styleClass="ui-button-outlined ui-button-warning"
action="#{rapportDetailsBean.regenererRapport}"
update="messages"/>
</div>
</div>
</div>
<h:panelGroup rendered="#{not empty rapportDetailsBean.rapport}">
<div class="grid">
<!-- Informations générales -->
<div class="col-12 md:col-6">
<div class="card">
<h5 class="mb-3">Informations Générales</h5>
<ui:include src="/templates/components/forms/detail-field.xhtml">
<ui:param name="label" value="Type de rapport"/>
<ui:param name="value" value="#{rapportDetailsBean.rapport.typeLibelle}"/>
</ui:include>
<ui:include src="/templates/components/forms/detail-field.xhtml">
<ui:param name="label" value="Date de génération"/>
<ui:param name="value" value="#{rapportDetailsBean.dateGenerationFormatee}"/>
</ui:include>
<ui:include src="/templates/components/forms/detail-field.xhtml">
<ui:param name="label" value="Période couverte"/>
<ui:param name="value" value="#{rapportDetailsBean.rapport.periodeCouverte}"/>
</ui:include>
<ui:include src="/templates/components/forms/detail-field.xhtml">
<ui:param name="label" value="Généré par"/>
<ui:param name="value" value="#{rapportDetailsBean.rapport.generePar}"/>
</ui:include>
<ui:include src="/templates/components/forms/detail-field.xhtml">
<ui:param name="label" value="Statut"/>
<ui:param name="value" value="#{rapportDetailsBean.rapport.statut}"/>
</ui:include>
</div>
</div>
<!-- Résumé du rapport -->
<div class="col-12 md:col-6">
<div class="card">
<h5 class="mb-3">Résumé</h5>
<div class="surface-50 p-3 border-round">
<p class="text-600 m-0">
Ce rapport contient les données analytiques et statistiques
pour la période sélectionnée. Les informations détaillées
sont disponibles dans le fichier téléchargeable.
</p>
</div>
</div>
</div>
</div>
<!-- Actions rapides -->
<div class="card mt-3">
<h5 class="mb-3">Actions</h5>
<div class="flex flex-wrap gap-2">
<p:commandButton value="Télécharger PDF"
icon="pi pi-file-pdf"
styleClass="ui-button-success"
action="#{rapportDetailsBean.telechargerRapport}"
update="messages"
rendered="#{rapportDetailsBean.isRapportDisponible()}"/>
<p:commandButton value="Télécharger Excel"
icon="pi pi-file-excel"
styleClass="ui-button-outlined ui-button-success"
action="#{rapportDetailsBean.telechargerRapport}"
update="messages"
rendered="#{rapportDetailsBean.isRapportDisponible()}"/>
<p:commandButton value="Régénérer le rapport"
icon="pi pi-refresh"
styleClass="ui-button-outlined ui-button-warning"
action="#{rapportDetailsBean.regenererRapport}"
update="messages"/>
<p:commandButton value="Partager"
icon="pi pi-share-alt"
styleClass="ui-button-outlined ui-button-info"
onclick="PF('dlgPartage').show();"/>
</div>
</div>
</h:panelGroup>
<!-- Message si rapport non trouvé -->
<h:panelGroup rendered="#{empty rapportDetailsBean.rapport}">
<div class="card">
<div class="text-center p-5">
<i class="pi pi-exclamation-triangle text-6xl text-orange-500 mb-3"></i>
<h3 class="mb-2">Rapport introuvable</h3>
<p class="text-600 mb-4">Le rapport demandé n'a pas été trouvé.</p>
<ui:include src="/templates/components/buttons/button-secondary.xhtml">
<ui:param name="value" value="Retour aux rapports"/>
<ui:param name="icon" value="pi pi-arrow-left"/>
<ui:param name="action" value="#{rapportDetailsBean.retourner}"/>
</ui:include>
</div>
</div>
</h:panelGroup>
</h:form>
</ui:define>
</ui:composition>

View File

@@ -0,0 +1,170 @@
<!DOCTYPE html>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/templates/main-template.xhtml">
<ui:param name="page" value="#{rapportsBean}"/>
<ui:define name="title">Export de Rapports - UnionFlow</ui:define>
<ui:define name="content">
<!-- En-tête -->
<ui:include src="/templates/components/layout/page-header.xhtml">
<ui:param name="icon" value="pi pi-download text-indigo-500" />
<ui:param name="title" value="Export de Rapports" />
<ui:param name="description" value="Générer et exporter des rapports personnalisés" />
</ui:include>
<!-- Formulaire de génération de rapport -->
<div class="card">
<h:form id="formRapport">
<h5>Nouveau Rapport</h5>
<div class="grid">
<div class="col-12 md:col-6">
<div class="field">
<p:outputLabel for="typeRapport" value="Type de Rapport *" />
<p:selectOneMenu id="typeRapport"
value="#{rapportsBean.nouveauRapport.type}"
styleClass="w-full"
required="true">
<f:selectItem itemLabel="Sélectionner un type" itemValue="" />
<f:selectItem itemLabel="Rapport Financier" itemValue="FINANCIER" />
<f:selectItem itemLabel="Rapport Membres" itemValue="MEMBRES" />
<f:selectItem itemLabel="Rapport Activités" itemValue="ACTIVITES" />
<f:selectItem itemLabel="Rapport Performance" itemValue="PERFORMANCE" />
<f:selectItem itemLabel="Rapport Complet" itemValue="COMPLET" />
</p:selectOneMenu>
</div>
</div>
<div class="col-12 md:col-6">
<div class="field">
<p:outputLabel for="formatRapport" value="Format *" />
<p:selectOneMenu id="formatRapport"
value="#{rapportsBean.nouveauRapport.format}"
styleClass="w-full"
required="true">
<f:selectItem itemLabel="PDF" itemValue="PDF" />
<f:selectItem itemLabel="Excel (.xlsx)" itemValue="EXCEL" />
<f:selectItem itemLabel="CSV" itemValue="CSV" />
</p:selectOneMenu>
</div>
</div>
<div class="col-12 md:col-6">
<div class="field">
<p:outputLabel for="periodeRapport" value="Période *" />
<p:selectOneMenu id="periodeRapport"
value="#{rapportsBean.nouveauRapport.periode}"
styleClass="w-full"
required="true">
<f:selectItem itemLabel="7 derniers jours" itemValue="7_JOURS" />
<f:selectItem itemLabel="30 derniers jours" itemValue="30_JOURS" />
<f:selectItem itemLabel="3 derniers mois" itemValue="3_MOIS" />
<f:selectItem itemLabel="6 derniers mois" itemValue="6_MOIS" />
<f:selectItem itemLabel="Année en cours" itemValue="ANNEE_COURANTE" />
<f:selectItem itemLabel="Période personnalisée" itemValue="PERSONNALISEE" />
</p:selectOneMenu>
</div>
</div>
<div class="col-12 md:col-6">
<div class="field">
<p:outputLabel for="detailRapport" value="Niveau de Détail" />
<p:selectOneMenu id="detailRapport"
value="#{rapportsBean.nouveauRapport.detail}"
styleClass="w-full">
<f:selectItem itemLabel="Résumé" itemValue="RESUME" />
<f:selectItem itemLabel="Standard" itemValue="STANDARD" />
<f:selectItem itemLabel="Détaillé" itemValue="DETAILLE" />
</p:selectOneMenu>
</div>
</div>
<div class="col-12">
<div class="field">
<p:outputLabel for="commentairesRapport" value="Commentaires (optionnel)" />
<p:inputTextarea id="commentairesRapport"
value="#{rapportsBean.nouveauRapport.commentaires}"
rows="3"
styleClass="w-full"
placeholder="Ajoutez des commentaires ou notes pour ce rapport..." />
</div>
</div>
<div class="col-12">
<div class="flex justify-content-end gap-2">
<p:commandButton value="Réinitialiser"
icon="pi pi-refresh"
styleClass="p-button-outlined p-button-secondary"
action="#{rapportsBean.nouveauRapport = null}"
update="@form" />
<ui:include src="/templates/components/buttons/button-primary.xhtml">
<ui:param name="value" value="Générer le Rapport" />
<ui:param name="icon" value="pi pi-file" />
<ui:param name="action" value="#{rapportsBean.genererRapport}" />
<ui:param name="update" value="@form :formHistorique" />
</ui:include>
</div>
</div>
</div>
</h:form>
</div>
<!-- Historique des rapports -->
<div class="card">
<h:form id="formHistorique">
<h5>Historique des Rapports</h5>
<p:dataTable value="#{rapportsBean.historiqueRapports}" var="rapport"
emptyMessage="Aucun rapport généré"
paginator="true"
rows="10"
styleClass="p-datatable-sm">
<p:column headerText="Type">
<div class="flex align-items-center gap-2">
<i class="#{rapport.typeIcon} text-#{rapport.typeCouleur}"></i>
<span class="font-semibold">#{rapport.typeLibelle}</span>
</div>
</p:column>
<p:column headerText="Période">
<span>#{rapport.periodeCouverte}</span>
</p:column>
<p:column headerText="Date Génération">
<span>#{rapport.dateGenerationFormatee}</span>
</p:column>
<p:column headerText="Généré par">
<span>#{rapport.generePar}</span>
</p:column>
<p:column headerText="Statut">
<p:tag value="#{rapport.statut}"
severity="#{rapport.statutSeverity}" />
</p:column>
<p:column headerText="Actions" styleClass="text-center">
<div class="flex justify-content-center gap-1">
<p:commandButton icon="pi pi-eye"
title="Voir"
styleClass="p-button-sm p-button-rounded p-button-info"
action="#{rapportsBean.voirRapport(rapport)}" />
<p:commandButton icon="pi pi-download"
title="Télécharger"
styleClass="p-button-sm p-button-rounded p-button-success"
action="#{rapportsBean.telechargerRapport(rapport)}"
rendered="#{rapport.statut == 'GENERE'}" />
</div>
</p:column>
</p:dataTable>
</h:form>
</div>
</ui:define>
</ui:composition>

View File

@@ -0,0 +1,209 @@
<!DOCTYPE html>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/templates/main-template.xhtml">
<ui:param name="page" value="#{rapportsBean}"/>
<ui:define name="title">Rapports Financiers - UnionFlow</ui:define>
<ui:define name="content">
<!-- En-tête -->
<ui:include src="/templates/components/layout/page-header.xhtml">
<ui:param name="icon" value="pi pi-dollar text-green-500" />
<ui:param name="title" value="Rapports Financiers" />
<ui:param name="description" value="Analyse financière et suivi des revenus" />
<ui:define name="actions">
<h:form id="formActions">
<div class="flex gap-2">
<ui:include src="/templates/components/buttons/button-success.xhtml">
<ui:param name="value" value="Exporter" />
<ui:param name="icon" value="pi pi-download" />
<ui:param name="onclick" value="PF('dlgExport').show();" />
</ui:include>
<ui:include src="/templates/components/buttons/button-icon.xhtml">
<ui:param name="icon" value="pi pi-refresh" />
<ui:param name="action" value="#{rapportsBean.actualiser}" />
<ui:param name="update" value="@form" />
<ui:param name="title" value="Actualiser" />
<ui:param name="rounded" value="true" />
<ui:param name="text" value="false" />
<ui:param name="styleClass" value="ui-button-outlined ui-button-secondary" />
</ui:include>
</div>
</h:form>
</ui:define>
</ui:include>
<!-- Filtres de période -->
<div class="card">
<h:form id="formFiltres">
<h5>Période d'Analyse</h5>
<div class="grid">
<div class="col-12 md:col-3">
<ui:include src="/templates/components/forms/form-field-select.xhtml">
<ui:param name="id" value="periodeRapide" />
<ui:param name="label" value="Période Rapide" />
<ui:param name="value" value="#{rapportsBean.periodeRapide}" />
<ui:param name="update" value="@form" />
<ui:define name="items">
<f:selectItem itemLabel="7 derniers jours" itemValue="7_JOURS" />
<f:selectItem itemLabel="30 derniers jours" itemValue="30_JOURS" />
<f:selectItem itemLabel="3 derniers mois" itemValue="3_MOIS" />
<f:selectItem itemLabel="6 derniers mois" itemValue="6_MOIS" />
<f:selectItem itemLabel="Année en cours" itemValue="ANNEE_COURANTE" />
</ui:define>
</ui:include>
</div>
<div class="col-12 md:col-3">
<ui:include src="/templates/components/forms/form-field-calendar.xhtml">
<ui:param name="id" value="dateDebut" />
<ui:param name="label" value="Date Début" />
<ui:param name="value" value="#{rapportsBean.dateDebut}" />
<ui:param name="update" value="@form" />
</ui:include>
</div>
<div class="col-12 md:col-3">
<ui:include src="/templates/components/forms/form-field-calendar.xhtml">
<ui:param name="id" value="dateFin" />
<ui:param name="label" value="Date Fin" />
<ui:param name="value" value="#{rapportsBean.dateFin}" />
<ui:param name="update" value="@form" />
</ui:include>
</div>
<div class="col-12 md:col-3">
<div class="field">
<p:outputLabel />
<ui:include src="/templates/components/buttons/button-primary.xhtml">
<ui:param name="value" value="Appliquer" />
<ui:param name="icon" value="pi pi-check" />
<ui:param name="action" value="#{rapportsBean.chargerDonnees}" />
<ui:param name="update" value="@form" />
</ui:include>
</div>
</div>
</div>
</h:form>
</div>
<!-- Indicateurs financiers -->
<div class="grid">
<ui:include src="/templates/components/cards/stat-card.xhtml">
<ui:param name="value" value="#{rapportsBean.indicateurs.revenus}" />
<ui:param name="label" value="Revenus Totaux" />
<ui:param name="icon" value="pi pi-dollar" />
<ui:param name="bgColor" value="green" />
</ui:include>
<ui:include src="/templates/components/cards/stat-card.xhtml">
<ui:param name="value" value="#{rapportsBean.indicateurs.croissanceRevenus}%" />
<ui:param name="label" value="Croissance Revenus" />
<ui:param name="icon" value="pi pi-arrow-up" />
<ui:param name="bgColor" value="blue" />
</ui:include>
<ui:include src="/templates/components/cards/stat-card.xhtml">
<ui:param name="value" value="#{rapportsBean.indicateurs.totalMembres}" />
<ui:param name="label" value="Membres Actifs" />
<ui:param name="icon" value="pi pi-users" />
<ui:param name="bgColor" value="purple" />
</ui:include>
<ui:include src="/templates/components/cards/stat-card.xhtml">
<ui:param name="value" value="#{rapportsBean.indicateurs.croissanceMembres}%" />
<ui:param name="label" value="Croissance Membres" />
<ui:param name="icon" value="pi pi-chart-line" />
<ui:param name="bgColor" value="orange" />
</ui:include>
</div>
<!-- Sources de revenus -->
<div class="card">
<h5>Sources de Revenus</h5>
<p:dataTable value="#{rapportsBean.sourceRevenus}" var="source"
emptyMessage="Aucune donnée disponible"
styleClass="p-datatable-sm">
<p:column headerText="Source">
<div class="flex align-items-center gap-2">
<i class="#{source.icon} text-lg"></i>
<span class="font-semibold">#{source.libelle}</span>
</div>
</p:column>
<p:column headerText="Montant">
<span class="font-bold">#{source.montant} FCFA</span>
</p:column>
<p:column headerText="Pourcentage">
<p:progressBar value="#{source.pourcentage}"
showValue="true"
styleClass="p-progressbar-sm" />
</p:column>
</p:dataTable>
</div>
<!-- KPIs Financiers -->
<div class="card">
<h5>Indicateurs Clés de Performance</h5>
<div class="formgrid grid">
<ui:repeat value="#{rapportsBean.kpis}" var="kpi">
<ui:include src="/templates/components/cards/kpi-card.xhtml">
<ui:param name="title" value="#{kpi.libelle}" />
<ui:param name="value" value="#{kpi.valeur}" />
<ui:param name="icon" value="#{kpi.icon}" />
<ui:param name="iconColor" value="#{kpi.couleur}" />
<ui:param name="growthValue" value="#{kpi.variation}" />
<ui:param name="growthLabel" value="variation" />
<ui:param name="colSize" value="col-12 md:col-4" />
<ui:param name="showProgress" value="false" />
</ui:include>
</ui:repeat>
</div>
</div>
<!-- Dialog Export -->
<h:form id="formExport">
<p:dialog id="dlgExport"
widgetVar="dlgExport"
header="Exporter le Rapport Financier"
modal="true"
resizable="false"
style="width: 90vw; max-width: 500px;">
<div class="grid">
<div class="col-12">
<div class="field">
<p:outputLabel for="formatExport" value="Format d'Export" />
<p:selectOneRadio id="formatExport"
value="#{rapportsBean.nouveauRapport.format}"
layout="grid"
columns="1">
<f:selectItem itemLabel="PDF" itemValue="PDF" />
<f:selectItem itemLabel="Excel (.xlsx)" itemValue="EXCEL" />
<f:selectItem itemLabel="CSV" itemValue="CSV" />
</p:selectOneRadio>
</div>
</div>
</div>
<f:facet name="footer">
<div class="flex justify-content-end gap-2">
<p:commandButton value="Annuler"
styleClass="p-button-outlined"
onclick="PF('dlgExport').hide();"
type="button" />
<p:commandButton value="Exporter"
icon="pi pi-download"
styleClass="p-button-success"
action="#{rapportsBean.exporterDonnees}" />
</div>
</f:facet>
</p:dialog>
</h:form>
</ui:define>
</ui:composition>

View File

@@ -0,0 +1,150 @@
<!DOCTYPE html>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/templates/main-template.xhtml">
<ui:param name="page" value="#{rapportsBean}"/>
<ui:define name="title">Rapports Membres - UnionFlow</ui:define>
<ui:define name="content">
<!-- En-tête -->
<ui:include src="/templates/components/layout/page-header.xhtml">
<ui:param name="icon" value="pi pi-users text-blue-500" />
<ui:param name="title" value="Rapports Membres" />
<ui:param name="description" value="Analyse et statistiques sur les membres" />
<ui:define name="actions">
<h:form id="formActions">
<div class="flex gap-2">
<ui:include src="/templates/components/buttons/button-success.xhtml">
<ui:param name="value" value="Exporter" />
<ui:param name="icon" value="pi pi-download" />
<ui:param name="onclick" value="PF('dlgExport').show();" />
</ui:include>
<ui:include src="/templates/components/buttons/button-icon.xhtml">
<ui:param name="icon" value="pi pi-refresh" />
<ui:param name="action" value="#{rapportsBean.actualiser}" />
<ui:param name="update" value="@form" />
<ui:param name="title" value="Actualiser" />
<ui:param name="rounded" value="true" />
<ui:param name="text" value="false" />
<ui:param name="styleClass" value="ui-button-outlined ui-button-secondary" />
</ui:include>
</div>
</h:form>
</ui:define>
</ui:include>
<!-- Statistiques membres -->
<div class="formgrid grid">
<ui:include src="/templates/components/cards/kpi-card.xhtml">
<ui:param name="title" value="Total Membres" />
<ui:param name="value" value="#{rapportsBean.indicateurs.totalMembres}" />
<ui:param name="icon" value="pi-users" />
<ui:param name="iconColor" value="blue-600" />
<ui:param name="showGrowth" value="false" />
<ui:param name="showProgress" value="false" />
</ui:include>
<ui:include src="/templates/components/cards/kpi-card.xhtml">
<ui:param name="title" value="Croissance" />
<ui:param name="value" value="#{rapportsBean.indicateurs.croissanceMembres}%" />
<ui:param name="icon" value="pi-arrow-up" />
<ui:param name="iconColor" value="green-600" />
<ui:param name="showGrowth" value="false" />
<ui:param name="showProgress" value="false" />
</ui:include>
</div>
<!-- Répartition des membres -->
<div class="card">
<h5>Répartition des Membres</h5>
<p:dataTable value="#{rapportsBean.repartitionMembres}" var="repartition"
emptyMessage="Aucune donnée disponible"
styleClass="p-datatable-sm">
<p:column headerText="Statut">
<div class="flex align-items-center gap-2">
<div class="w-1rem h-1rem border-circle bg-#{repartition.couleur}"></div>
<span class="font-semibold">#{repartition.libelle}</span>
</div>
</p:column>
<p:column headerText="Nombre">
<span class="font-bold">#{repartition.nombre}</span>
</p:column>
<p:column headerText="Pourcentage">
<p:progressBar value="#{repartition.pourcentage}"
showValue="true"
styleClass="p-progressbar-sm" />
</p:column>
</p:dataTable>
</div>
<!-- Objectifs -->
<div class="card">
<h5>Objectifs</h5>
<div class="grid">
<ui:repeat value="#{rapportsBean.objectifs}" var="objectif">
<div class="col-12 md:col-6">
<div class="surface-100 border-round-lg p-4">
<div class="flex align-items-center justify-content-between mb-3">
<span class="font-semibold">#{objectif.libelle}</span>
<span class="text-sm text-600">#{objectif.pourcentage}%</span>
</div>
<p:progressBar value="#{objectif.pourcentage}"
showValue="false"
styleClass="p-progressbar-sm mb-2" />
<div class="flex justify-content-between text-sm">
<span class="text-600">Réalisé: #{objectif.realise}</span>
<span class="text-600">Cible: #{objectif.cible}</span>
</div>
</div>
</div>
</ui:repeat>
</div>
</div>
<!-- Dialog Export -->
<h:form id="formExport">
<p:dialog id="dlgExport"
widgetVar="dlgExport"
header="Exporter le Rapport Membres"
modal="true"
resizable="false"
style="width: 90vw; max-width: 500px;">
<div class="grid">
<div class="col-12">
<div class="field">
<p:outputLabel for="formatExport" value="Format d'Export" />
<p:selectOneRadio id="formatExport"
value="#{rapportsBean.nouveauRapport.format}"
layout="grid"
columns="1">
<f:selectItem itemLabel="PDF" itemValue="PDF" />
<f:selectItem itemLabel="Excel (.xlsx)" itemValue="EXCEL" />
<f:selectItem itemLabel="CSV" itemValue="CSV" />
</p:selectOneRadio>
</div>
</div>
</div>
<f:facet name="footer">
<div class="flex justify-content-end gap-2">
<p:commandButton value="Annuler"
styleClass="p-button-outlined"
onclick="PF('dlgExport').hide();"
type="button" />
<p:commandButton value="Exporter"
icon="pi pi-download"
styleClass="p-button-success"
action="#{rapportsBean.exporterDonnees}" />
</div>
</f:facet>
</p:dialog>
</h:form>
</ui:define>
</ui:composition>