Configure Maven repository for unionflow-server-api dependency
This commit is contained in:
@@ -0,0 +1,449 @@
|
||||
<!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:define name="title">Rapports Financiers - UnionFlow</ui:define>
|
||||
|
||||
<ui:define name="content">
|
||||
<!-- En-tête -->
|
||||
<div class="grid">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="flex align-items-center justify-content-between">
|
||||
<div>
|
||||
<h3 class="mb-2">
|
||||
<i class="pi pi-chart-bar text-indigo-500 mr-2"></i>
|
||||
Rapports Financiers
|
||||
</h3>
|
||||
<p class="text-600 m-0">Analyse complète de la situation financière • #{rapportBean.periodeAnalyse}</p>
|
||||
</div>
|
||||
<div class="flex gap-2">
|
||||
<p:commandButton value="Générer rapport PDF"
|
||||
icon="pi pi-file-pdf"
|
||||
styleClass="ui-button-danger"
|
||||
action="#{rapportBean.genererPDF}" />
|
||||
<p:commandButton value="Exporter Excel"
|
||||
icon="pi pi-file-excel"
|
||||
styleClass="ui-button-success"
|
||||
action="#{rapportBean.exporterExcel}" />
|
||||
<p:commandButton value="Imprimer"
|
||||
icon="pi pi-print"
|
||||
styleClass="ui-button-outlined ui-button-secondary"
|
||||
onclick="window.print();" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sélection de période -->
|
||||
<div class="card">
|
||||
<h:form id="formPeriode">
|
||||
<div class="flex align-items-center gap-3">
|
||||
<p:selectOneMenu value="#{rapportBean.typePeriode}" style="width: 200px;">
|
||||
<f:selectItem itemLabel="Cette année" itemValue="ANNEE" />
|
||||
<f:selectItem itemLabel="Ce trimestre" itemValue="TRIMESTRE" />
|
||||
<f:selectItem itemLabel="Ce mois" itemValue="MOIS" />
|
||||
<f:selectItem itemLabel="Période personnalisée" itemValue="CUSTOM" />
|
||||
<p:ajax update="@form :kpiPanel :graphsPanel :detailsPanel" />
|
||||
</p:selectOneMenu>
|
||||
|
||||
<p:calendar id="dateDebut" value="#{rapportBean.dateDebut}"
|
||||
pattern="dd/MM/yyyy" showIcon="true"
|
||||
placeholder="Date début"
|
||||
disabled="#{rapportBean.typePeriode != 'CUSTOM'}">
|
||||
<p:ajax event="dateSelect" update=":kpiPanel :graphsPanel :detailsPanel" />
|
||||
</p:calendar>
|
||||
|
||||
<p:calendar id="dateFin" value="#{rapportBean.dateFin}"
|
||||
pattern="dd/MM/yyyy" showIcon="true"
|
||||
placeholder="Date fin"
|
||||
disabled="#{rapportBean.typePeriode != 'CUSTOM'}">
|
||||
<p:ajax event="dateSelect" update=":kpiPanel :graphsPanel :detailsPanel" />
|
||||
</p:calendar>
|
||||
|
||||
<p:commandButton value="Actualiser"
|
||||
icon="pi pi-refresh"
|
||||
styleClass="ui-button-outlined ui-button-info"
|
||||
action="#{rapportBean.actualiser}"
|
||||
update=":kpiPanel :graphsPanel :detailsPanel" />
|
||||
</div>
|
||||
</h:form>
|
||||
</div>
|
||||
|
||||
<!-- KPIs Financiers -->
|
||||
<h:panelGroup id="kpiPanel">
|
||||
<div class="formgrid grid">
|
||||
<ui:include src="/templates/components/cards/kpi-card.xhtml">
|
||||
<ui:param name="title" value="Revenus Totaux" />
|
||||
<ui:param name="value" value="#{rapportBean.revenusTotaux}" />
|
||||
<ui:param name="icon" value="pi-dollar" />
|
||||
<ui:param name="iconColor" value="blue-600" />
|
||||
<ui:param name="growthValue" value="#{rapportBean.croissanceRevenus}" />
|
||||
<ui:param name="growthLabel" value="vs période précédente" />
|
||||
<ui:param name="showProgress" value="false" />
|
||||
</ui:include>
|
||||
|
||||
<ui:include src="/templates/components/cards/kpi-card.xhtml">
|
||||
<ui:param name="title" value="Dépenses Totales" />
|
||||
<ui:param name="value" value="#{rapportBean.depensesTotales}" />
|
||||
<ui:param name="icon" value="pi-shopping-cart" />
|
||||
<ui:param name="iconColor" value="orange-600" />
|
||||
<ui:param name="growthValue" value="#{rapportBean.croissanceDepenses}" />
|
||||
<ui:param name="growthLabel" value="vs période précédente" />
|
||||
<ui:param name="showProgress" value="false" />
|
||||
</ui:include>
|
||||
|
||||
<ui:include src="/templates/components/cards/kpi-card.xhtml">
|
||||
<ui:param name="title" value="Bénéfice Net" />
|
||||
<ui:param name="value" value="#{rapportBean.beneficeNet}" />
|
||||
<ui:param name="icon" value="pi-chart-line" />
|
||||
<ui:param name="iconColor" value="green-600" />
|
||||
<ui:param name="progressValue" value="#{rapportBean.margePercentage}" />
|
||||
<ui:param name="showGrowth" value="false" />
|
||||
</ui:include>
|
||||
|
||||
<ui:include src="/templates/components/cards/kpi-card.xhtml">
|
||||
<ui:param name="title" value="Trésorerie" />
|
||||
<ui:param name="value" value="#{rapportBean.tresorerie}" />
|
||||
<ui:param name="icon" value="pi-wallet" />
|
||||
<ui:param name="iconColor" value="purple-600" />
|
||||
<ui:param name="statusIcon" value="pi-info-circle" />
|
||||
<ui:param name="statusLabel" value="Jours d'autonomie" />
|
||||
<ui:param name="statusValue" value="#{rapportBean.joursAutonomie}" />
|
||||
<ui:param name="showProgress" value="false" />
|
||||
</ui:include>
|
||||
</div>
|
||||
</h:panelGroup>
|
||||
|
||||
<!-- Graphiques -->
|
||||
<h:panelGroup id="graphsPanel">
|
||||
<div class="grid">
|
||||
<!-- Évolution Revenus/Dépenses -->
|
||||
<div class="col-12 md:col-6">
|
||||
<div class="card">
|
||||
<h5>Évolution Revenus vs Dépenses</h5>
|
||||
<div class="surface-100 p-4 border-round text-center"><div class="text-2xl font-bold text-primary mb-2">📊</div><div class="text-600">Graphique en cours de développement</div></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Répartition des Revenus -->
|
||||
<div class="col-12 md:col-6">
|
||||
<div class="card">
|
||||
<h5>Sources de Revenus</h5>
|
||||
<div class="surface-100 p-4 border-round text-center"><div class="text-2xl font-bold text-primary mb-2">📊</div><div class="text-600">Graphique en cours de développement</div></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Répartition des Dépenses -->
|
||||
<div class="col-12 md:col-6">
|
||||
<div class="card">
|
||||
<h5>Catégories de Dépenses</h5>
|
||||
<div class="surface-100 p-4 border-round text-center"><div class="text-2xl font-bold text-primary mb-2">📊</div><div class="text-600">Graphique en cours de développement</div></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Cash Flow -->
|
||||
<div class="col-12 md:col-6">
|
||||
<div class="card">
|
||||
<h5>Cash Flow Mensuel</h5>
|
||||
<div class="surface-100 p-4 border-round text-center"><div class="text-2xl font-bold text-primary mb-2">📊</div><div class="text-600">Graphique en cours de développement</div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</h:panelGroup>
|
||||
|
||||
<!-- Analyse Détaillée -->
|
||||
<h:panelGroup id="detailsPanel">
|
||||
<div class="grid">
|
||||
<!-- Top Contributeurs -->
|
||||
<div class="col-12 md:col-6">
|
||||
<div class="card">
|
||||
<h5>Top 10 Contributeurs</h5>
|
||||
<ui:repeat value="#{rapportBean.topContributeurs}" var="contributeur" varStatus="status">
|
||||
<div class="flex align-items-center justify-content-between p-3 mb-2 border-round"
|
||||
style="background: var(--surface-50);">
|
||||
<div class="flex align-items-center">
|
||||
<div class="bg-primary text-white border-round text-center mr-3"
|
||||
style="width: 2rem; height: 2rem; line-height: 2rem;">
|
||||
#{status.index + 1}
|
||||
</div>
|
||||
<div>
|
||||
<div class="font-medium">#{contributeur.nom}</div>
|
||||
<small class="text-600">#{contributeur.numeroMembre}</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-right">
|
||||
<div class="font-bold text-primary">#{contributeur.montantTotal}</div>
|
||||
<small class="text-600">#{contributeur.nombreContributions} contributions</small>
|
||||
</div>
|
||||
</div>
|
||||
</ui:repeat>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Prévisions -->
|
||||
<div class="col-12 md:col-6">
|
||||
<div class="card">
|
||||
<h5>Prévisions Financières</h5>
|
||||
<div class="surface-50 p-3 border-round mb-3">
|
||||
<div class="flex align-items-center justify-content-between mb-2">
|
||||
<span class="font-medium">Revenus prévus (3 mois)</span>
|
||||
<span class="font-bold text-green-500">#{rapportBean.revenusPrevus3Mois}</span>
|
||||
</div>
|
||||
<div class="flex align-items-center justify-content-between mb-2">
|
||||
<span class="font-medium">Dépenses prévues (3 mois)</span>
|
||||
<span class="font-bold text-orange-500">#{rapportBean.depensesPrevues3Mois}</span>
|
||||
</div>
|
||||
<div class="flex align-items-center justify-content-between">
|
||||
<span class="font-medium">Solde prévisionnel</span>
|
||||
<span class="font-bold text-primary">#{rapportBean.soldePrevisionnel}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h6>Recommandations</h6>
|
||||
<ui:repeat value="#{rapportBean.recommandations}" var="recommandation">
|
||||
<div class="flex align-items-start mb-2">
|
||||
<i class="pi pi-lightbulb text-yellow-500 mr-2 mt-1"></i>
|
||||
<span>#{recommandation}</span>
|
||||
</div>
|
||||
</ui:repeat>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tableau Détaillé des Transactions -->
|
||||
<div class="card">
|
||||
<h:form id="formTransactions">
|
||||
<h5>Détail des Transactions</h5>
|
||||
|
||||
<p:tabView>
|
||||
<p:tab title="Revenus">
|
||||
<p:dataTable var="revenu" value="#{rapportBean.detailRevenus}"
|
||||
paginator="true" rows="10"
|
||||
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
|
||||
currentPageReportTemplate="Affichage {startRecord}-{endRecord} sur {totalRecords}">
|
||||
|
||||
<p:column headerText="Date" sortBy="#{revenu.date}" style="width:120px">
|
||||
<h:outputText value="#{revenu.date}">
|
||||
<f:convertDateTime pattern="dd/MM/yyyy" type="localDate" />
|
||||
</h:outputText>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Catégorie" sortBy="#{revenu.categorie}">
|
||||
<p:tag value="#{revenu.categorie}" styleClass="#{revenu.categorieClass}" />
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Description" sortBy="#{revenu.description}">
|
||||
<h:outputText value="#{revenu.description}" />
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Montant" sortBy="#{revenu.montant}" style="width:150px">
|
||||
<h:outputText value="#{revenu.montant}" styleClass="font-bold text-green-500">
|
||||
<f:convertNumber type="currency" currencySymbol="FCFA " />
|
||||
</h:outputText>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Mode" style="width:120px">
|
||||
<div class="flex align-items-center">
|
||||
<i class="pi #{revenu.modeIcon} mr-2"></i>
|
||||
<span>#{revenu.modePaiement}</span>
|
||||
</div>
|
||||
</p:column>
|
||||
</p:dataTable>
|
||||
</p:tab>
|
||||
|
||||
<p:tab title="Dépenses">
|
||||
<p:dataTable var="depense" value="#{rapportBean.detailDepenses}"
|
||||
paginator="true" rows="10"
|
||||
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
|
||||
currentPageReportTemplate="Affichage {startRecord}-{endRecord} sur {totalRecords}">
|
||||
|
||||
<p:column headerText="Date" sortBy="#{depense.date}" style="width:120px">
|
||||
<h:outputText value="#{depense.date}">
|
||||
<f:convertDateTime pattern="dd/MM/yyyy" type="localDate" />
|
||||
</h:outputText>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Catégorie" sortBy="#{depense.categorie}">
|
||||
<p:tag value="#{depense.categorie}" styleClass="#{depense.categorieClass}" />
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Description" sortBy="#{depense.description}">
|
||||
<h:outputText value="#{depense.description}" />
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Bénéficiaire" sortBy="#{depense.beneficiaire}">
|
||||
<h:outputText value="#{depense.beneficiaire}" />
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Montant" sortBy="#{depense.montant}" style="width:150px">
|
||||
<h:outputText value="#{depense.montant}" styleClass="font-bold text-red-500">
|
||||
<f:convertNumber type="currency" currencySymbol="FCFA " />
|
||||
</h:outputText>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Justificatif" style="width:100px; text-align:center;">
|
||||
<p:commandButton icon="pi pi-file"
|
||||
styleClass="ui-button-rounded ui-button-text"
|
||||
action="#{rapportBean.voirJustificatif(depense)}"
|
||||
rendered="#{depense.hasJustificatif}" />
|
||||
</p:column>
|
||||
</p:dataTable>
|
||||
</p:tab>
|
||||
</p:tabView>
|
||||
</h:form>
|
||||
</div>
|
||||
|
||||
<!-- Ratios et Indicateurs -->
|
||||
<div class="card">
|
||||
<h5>Indicateurs Clés de Performance</h5>
|
||||
<div class="formgrid grid">
|
||||
<ui:include src="/templates/components/cards/kpi-card.xhtml">
|
||||
<ui:param name="title" value="Taux de Recouvrement" />
|
||||
<ui:param name="value" value="#{rapportBean.tauxRecouvrement}%" />
|
||||
<ui:param name="icon" value="pi-percentage" />
|
||||
<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="Ratio de Couverture" />
|
||||
<ui:param name="value" value="#{rapportBean.ratioCouverture}" />
|
||||
<ui:param name="icon" value="pi-shield" />
|
||||
<ui:param name="iconColor" value="green-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="Coût Moyen/Membre" />
|
||||
<ui:param name="value" value="#{rapportBean.coutMoyenMembre}" />
|
||||
<ui:param name="icon" value="pi-user-minus" />
|
||||
<ui:param name="iconColor" value="orange-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="Revenu Moyen/Membre" />
|
||||
<ui:param name="value" value="#{rapportBean.revenuMoyenMembre}" />
|
||||
<ui:param name="icon" value="pi-user-plus" />
|
||||
<ui:param name="iconColor" value="purple-600" />
|
||||
<ui:param name="showGrowth" value="false" />
|
||||
<ui:param name="showProgress" value="false" />
|
||||
</ui:include>
|
||||
</div>
|
||||
</div>
|
||||
</h:panelGroup>
|
||||
|
||||
<!-- Actions d'export -->
|
||||
<div class="card">
|
||||
<div class="flex justify-content-center gap-3">
|
||||
<p:commandButton value="Envoyer par email"
|
||||
icon="pi pi-envelope"
|
||||
styleClass="ui-button-outlined ui-button-info"
|
||||
onclick="PF('dlgEmail').show();" />
|
||||
<p:commandButton value="Programmer rapport automatique"
|
||||
icon="pi pi-calendar"
|
||||
styleClass="ui-button-outlined ui-button-warning"
|
||||
onclick="PF('dlgProgrammer').show();" />
|
||||
<p:commandButton value="Archiver"
|
||||
icon="pi pi-save"
|
||||
styleClass="ui-button-outlined ui-button-secondary"
|
||||
action="#{rapportBean.archiver}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Dialog Email -->
|
||||
<p:dialog header="Envoyer le rapport par email" widgetVar="dlgEmail" modal="true" width="500">
|
||||
<h:form id="formEmail">
|
||||
<div class="ui-fluid">
|
||||
<div class="field">
|
||||
<p:outputLabel for="destinataires" value="Destinataires" />
|
||||
<p:chips id="destinataires" value="#{rapportBean.destinataires}" />
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<p:outputLabel for="message" value="Message" />
|
||||
<p:inputTextarea id="message" value="#{rapportBean.messageEmail}" rows="5" />
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<p:selectBooleanCheckbox id="inclurePDF" value="#{rapportBean.inclurePDF}" />
|
||||
<p:outputLabel for="inclurePDF" value=" Inclure le rapport PDF" />
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<p:selectBooleanCheckbox id="inclureExcel" value="#{rapportBean.inclureExcel}" />
|
||||
<p:outputLabel for="inclureExcel" value=" Inclure le fichier Excel" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex gap-2 mt-3">
|
||||
<p:commandButton value="Envoyer" icon="pi pi-send"
|
||||
styleClass="ui-button-info"
|
||||
action="#{rapportBean.envoyerEmail}"
|
||||
oncomplete="PF('dlgEmail').hide();" />
|
||||
<p:commandButton value="Annuler" icon="pi pi-times"
|
||||
styleClass="ui-button-secondary"
|
||||
onclick="PF('dlgEmail').hide();" type="button" />
|
||||
</div>
|
||||
</h:form>
|
||||
</p:dialog>
|
||||
|
||||
<!-- Dialog Programmer -->
|
||||
<p:dialog header="Programmer rapport automatique" widgetVar="dlgProgrammer" modal="true" width="500">
|
||||
<h:form id="formProgrammer">
|
||||
<div class="ui-fluid">
|
||||
<div class="field">
|
||||
<p:outputLabel for="frequence" value="Fréquence" />
|
||||
<p:selectOneMenu id="frequence" value="#{rapportBean.frequence}">
|
||||
<f:selectItem itemLabel="Quotidien" itemValue="QUOTIDIEN" />
|
||||
<f:selectItem itemLabel="Hebdomadaire" itemValue="HEBDOMADAIRE" />
|
||||
<f:selectItem itemLabel="Mensuel" itemValue="MENSUEL" />
|
||||
<f:selectItem itemLabel="Trimestriel" itemValue="TRIMESTRIEL" />
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<p:outputLabel for="jourEnvoi" value="Jour d'envoi" />
|
||||
<p:selectOneMenu id="jourEnvoi" value="#{rapportBean.jourEnvoi}">
|
||||
<f:selectItem itemLabel="Lundi" itemValue="1" />
|
||||
<f:selectItem itemLabel="Mardi" itemValue="2" />
|
||||
<f:selectItem itemLabel="Mercredi" itemValue="3" />
|
||||
<f:selectItem itemLabel="Jeudi" itemValue="4" />
|
||||
<f:selectItem itemLabel="Vendredi" itemValue="5" />
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<p:outputLabel for="heureEnvoi" value="Heure d'envoi" />
|
||||
<p:inputText id="heureEnvoi" value="#{rapportBean.heureEnvoi}" placeholder="09:00" />
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<p:outputLabel for="destinatairesProg" value="Destinataires" />
|
||||
<p:chips id="destinatairesProg" value="#{rapportBean.destinatairesProgrammes}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex gap-2 mt-3">
|
||||
<p:commandButton value="Programmer" icon="pi pi-check"
|
||||
styleClass="ui-button-warning"
|
||||
action="#{rapportBean.programmerRapport}"
|
||||
oncomplete="PF('dlgProgrammer').hide();" />
|
||||
<p:commandButton value="Annuler" icon="pi pi-times"
|
||||
styleClass="ui-button-secondary"
|
||||
onclick="PF('dlgProgrammer').hide();" type="button" />
|
||||
</div>
|
||||
</h:form>
|
||||
</p:dialog>
|
||||
</ui:define>
|
||||
|
||||
</ui:composition>
|
||||
Reference in New Issue
Block a user