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,433 @@
<!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">Gestion des Entités - UnionFlow</ui:define>
<ui:define name="content">
<div class="ui-fluid">
<!-- En-tête principal avec disposition Freya stricte -->
<div class="card">
<div class="formgrid grid">
<div class="field col-12 lg:col-8">
<h2 class="text-primary font-bold mb-2">
<i class="pi pi-building text-blue-500 mr-2"></i>
Gestion des Entités
</h2>
<p class="text-600 mt-0">
Administration complète des clubs et entités Lions •
<span class="font-semibold">#{entitesGestionBean.statistiques.totalEntites} entités</span>
<span class="font-semibold text-green-600">#{entitesGestionBean.statistiques.entitesActives} actives</span>
</p>
</div>
<div class="field col-12 lg:col-4 text-right">
<h:form id="formActionsEntete">
<p:commandButton icon="pi pi-plus"
title="Nouvelle entité"
styleClass="ui-button-success ui-button-sm mr-3"
onclick="PF('dlgNouvelleEntite').show();" />
<p:commandButton icon="pi pi-upload"
title="Import Excel"
styleClass="ui-button-info ui-button-outlined ui-button-sm mr-3"
onclick="PF('dlgImportEntites').show();" />
<p:commandButton icon="pi pi-download"
title="Exporter"
styleClass="ui-button-secondary ui-button-outlined ui-button-sm"
action="#{entitesGestionBean.exporterEntites}" />
</h:form>
</div>
</div>
</div>
<!-- KPIs avec grille Freya stricte -->
<div class="formgrid grid">
<!-- KPI 1: Total Entités -->
<ui:include src="/templates/components/cards/kpi-card.xhtml">
<ui:param name="title" value="Total Entités" />
<ui:param name="value" value="#{entitesGestionBean.statistiques.totalEntites}" />
<ui:param name="icon" value="pi-building" />
<ui:param name="iconColor" value="blue-600" />
<ui:param name="growthValue" value="8" />
<ui:param name="growthLabel" value="ce mois" />
<ui:param name="growthType" value="number" />
<ui:param name="showProgress" value="false" />
</ui:include>
<!-- KPI 2: Entités Actives -->
<ui:include src="/templates/components/cards/kpi-card.xhtml">
<ui:param name="title" value="Entités Actives" />
<ui:param name="value" value="#{entitesGestionBean.statistiques.entitesActives}" />
<ui:param name="icon" value="pi-check" />
<ui:param name="iconColor" value="green-600" />
<ui:param name="progressValue" value="92" />
<ui:param name="noDataLabel" value="92% d'activité" />
<ui:param name="showGrowth" value="false" />
</ui:include>
<!-- KPI 3: Total Membres -->
<ui:include src="/templates/components/cards/kpi-card.xhtml">
<ui:param name="title" value="Total Membres" />
<ui:param name="value" value="#{entitesGestionBean.statistiques.totalMembres}" />
<ui:param name="icon" value="pi-users" />
<ui:param name="iconColor" value="orange-600" />
<ui:param name="statusIcon" value="pi-info-circle" />
<ui:param name="statusLabel" value="Moyenne" />
<ui:param name="statusValue" value="#{entitesGestionBean.statistiques.moyenneMembresParEntite}/entité" />
<ui:param name="showProgress" value="false" />
</ui:include>
<!-- KPI 4: Revenus Totaux -->
<ui:include src="/templates/components/cards/kpi-card.xhtml">
<ui:param name="title" value="Revenus Totaux" />
<ui:param name="value" value="#{entitesGestionBean.statistiques.revenus}" />
<ui:param name="icon" value="pi-dollar" />
<ui:param name="iconColor" value="purple-600" />
<ui:param name="growthValue" value="15" />
<ui:param name="growthLabel" value="vs année dernière" />
<ui:param name="showProgress" value="false" />
</ui:include>
</div>
<!-- Section Filtres avec structure Freya -->
<div class="card">
<h5 class="mb-3">
<i class="pi pi-filter text-blue-500 mr-2"></i>
Filtres et Recherche
</h5>
<h:form id="formFiltres">
<div class="formgrid grid">
<div class="field col-12 md:col-6 lg:col-3">
<label for="searchNom" class="block text-900 font-medium mb-2">Nom de l'entité</label>
<span class="p-input-icon-left w-full">
<i class="pi pi-search"></i>
<p:inputText id="searchNom"
value="#{entitesGestionBean.filtres.nom}"
placeholder="Rechercher par nom..."
styleClass="w-full">
<p:ajax event="keyup" delay="300"
update=":formTableEntites:dtEntites" />
</p:inputText>
</span>
</div>
<div class="field col-12 md:col-6 lg:col-3">
<label for="filterType" class="block text-900 font-medium mb-2">Type d'entité</label>
<p:selectOneMenu id="filterType"
value="#{entitesGestionBean.filtres.type}"
styleClass="w-full">
<f:selectItem itemLabel="Tous les types" itemValue="" />
<f:selectItem itemLabel="Club Lions" itemValue="CLUB_LIONS" />
<f:selectItem itemLabel="LEO Club" itemValue="LEO_CLUB" />
<f:selectItem itemLabel="Branche" itemValue="BRANCHE" />
<p:ajax update=":formTableEntites:dtEntites" />
</p:selectOneMenu>
</div>
<div class="field col-12 md:col-6 lg:col-3">
<label for="filterStatut" class="block text-900 font-medium mb-2">Statut</label>
<p:selectOneMenu id="filterStatut"
value="#{entitesGestionBean.filtres.statut}"
styleClass="w-full">
<f:selectItem itemLabel="Tous les statuts" itemValue="" />
<f:selectItem itemLabel="Active" itemValue="ACTIVE" />
<f:selectItem itemLabel="Inactive" itemValue="INACTIVE" />
<f:selectItem itemLabel="Suspendue" itemValue="SUSPENDUE" />
<p:ajax update=":formTableEntites:dtEntites" />
</p:selectOneMenu>
</div>
<div class="field col-12 md:col-6 lg:col-3">
<label for="filterRegion" class="block text-900 font-medium mb-2">Région</label>
<p:selectOneMenu id="filterRegion"
value="#{entitesGestionBean.filtres.region}"
styleClass="w-full">
<f:selectItem itemLabel="Toutes les régions" itemValue="" />
<f:selectItem itemLabel="Dakar" itemValue="DAKAR" />
<f:selectItem itemLabel="Thiès" itemValue="THIES" />
<f:selectItem itemLabel="Kaolack" itemValue="KAOLACK" />
<f:selectItem itemLabel="Saint-Louis" itemValue="SAINT_LOUIS" />
<p:ajax update=":formTableEntites:dtEntites" />
</p:selectOneMenu>
</div>
</div>
<div class="flex justify-content-end mt-3">
<p:commandButton value="Réinitialiser"
icon="pi pi-refresh"
styleClass="ui-button-outlined ui-button-secondary ui-button-sm"
action="#{entitesGestionBean.reinitialiserFiltres}"
update="@form :formTableEntites:dtEntites" />
</div>
</h:form>
</div>
<!-- Table des Entités avec structure Freya -->
<div class="card">
<h:form id="formTableEntites">
<div class="flex align-items-center justify-content-between mb-3">
<h5 class="m-0">
<i class="pi pi-list text-primary mr-2"></i>
Liste des Entités
</h5>
<div>
<p:commandButton value="Actions groupées"
icon="pi pi-bars"
styleClass="ui-button-warning ui-button-sm mr-2"
onclick="PF('dlgActionsGroupees').show();"
disabled="#{empty entitesGestionBean.entitesSelectionnees}" />
<p:commandButton value="Export Excel"
icon="pi pi-file-excel"
styleClass="ui-button-success ui-button-outlined ui-button-sm"
action="#{entitesGestionBean.exporterExcel}" />
</div>
</div>
<p:dataTable id="dtEntites"
value="#{entitesGestionBean.entitesFiltrees}"
var="entite"
selection="#{entitesGestionBean.entitesSelectionnees}"
rowKey="#{entite.id}"
paginator="true"
rows="20"
paginatorPosition="bottom"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="10,20,50,100"
currentPageReportTemplate="Affichage {startRecord}-{endRecord} sur {totalRecords} entités"
styleClass="p-datatable-sm p-datatable-gridlines p-datatable-striped"
emptyMessage="Aucune entité trouvée">
<p:column selectionMode="multiple" style="width:3rem" exportable="false"/>
<p:column headerText="Entité" sortBy="#{entite.nom}" filterBy="#{entite.nom}">
<div class="flex align-items-center">
<div class="flex align-items-center justify-content-center bg-primary-100 border-circle mr-2"
style="width: 2rem; height: 2rem;">
<i class="pi #{entite.typeIcon} text-primary-600"></i>
</div>
<div>
<div class="text-900 font-medium">#{entite.nom}</div>
<div class="text-500 text-xs">#{entite.codeEntite}</div>
</div>
</div>
</p:column>
<p:column headerText="Type" sortBy="#{entite.type}" filterBy="#{entite.type}" style="width:8rem">
<p:tag value="#{entite.typeLibelle}"
severity="#{entite.typeSeverity}"
icon="pi #{entite.typeIcon}"
styleClass="text-xs" />
</p:column>
<p:column headerText="Région" sortBy="#{entite.region}" style="width:8rem">
<span class="text-900 font-medium">#{entite.region}</span>
</p:column>
<p:column headerText="Membres" sortBy="#{entite.nombreMembres}" style="width:6rem; text-align:center">
<div class="text-center">
<div class="text-900 font-bold">#{entite.nombreMembres}</div>
<div class="text-500 text-xs">membres</div>
</div>
</p:column>
<p:column headerText="Administrateur">
<div class="flex align-items-center" rendered="#{entite.administrateur != null}">
<div class="bg-300 border-circle mr-2" style="width: 1.5rem; height: 1.5rem;"></div>
<div>
<div class="text-900 text-sm">#{entite.administrateur.nomComplet}</div>
<div class="text-500 text-xs">#{entite.administrateur.email}</div>
</div>
</div>
<span class="text-400 text-xs" rendered="#{entite.administrateur == null}">
Aucun administrateur
</span>
</p:column>
<p:column headerText="Dernière activité" sortBy="#{entite.derniereActivite}" style="width:10rem">
<div class="text-900 text-sm">#{entite.derniereActiviteFormatee}</div>
<div class="text-500 text-xs">#{entite.derniereActiviteRelative}</div>
</p:column>
<p:column headerText="Statut" sortBy="#{entite.statut}" filterBy="#{entite.statut}" style="width:7rem">
<p:tag value="#{entite.statut}"
severity="#{entite.statutSeverity}"
icon="pi #{entite.statutIcon}"
styleClass="text-xs w-full" />
</p:column>
<p:column headerText="Actions" style="width:8rem" exportable="false">
<h:form id="formActions#{entite.id}">
<div class="flex gap-1">
<p:commandButton icon="pi pi-eye"
styleClass="ui-button-rounded ui-button-text ui-button-info ui-button-sm"
action="#{entitesGestionBean.voirEntite(entite)}"
title="Voir détails" />
<p:commandButton icon="pi pi-pencil"
styleClass="ui-button-rounded ui-button-text ui-button-warning ui-button-sm"
onclick="PF('dlgModifierEntite').show();"
title="Modifier">
<f:setPropertyActionListener target="#{entitesGestionBean.entiteSelectionne}" value="#{entite}" />
</p:commandButton>
<p:commandButton icon="pi pi-cog"
styleClass="ui-button-rounded ui-button-text ui-button-secondary ui-button-sm"
onclick="PF('dlgActionsEntite').show();"
title="Actions">
<f:setPropertyActionListener target="#{entitesGestionBean.entiteSelectionne}" value="#{entite}" />
</p:commandButton>
</div>
</h:form>
</p:column>
</p:dataTable>
</h:form>
</div>
</div>
<!-- Dialogs avec structure Freya -->
<!-- Dialog Nouvelle Entité -->
<p:dialog header="Créer une Nouvelle Entité"
widgetVar="dlgNouvelleEntite"
modal="true"
width="700"
height="auto"
resizable="false">
<h:form id="formNouvelleEntite">
<div class="ui-fluid formgrid grid">
<div class="field col-12 md:col-6">
<label for="newNom" class="block text-900 font-medium mb-2">Nom de l'entité *</label>
<p:inputText id="newNom"
value="#{entitesGestionBean.nouvelleEntite.nom}"
required="true"
placeholder="Ex: Lions Club Dakar Centre" />
</div>
<div class="field col-12 md:col-6">
<label for="newType" class="block text-900 font-medium mb-2">Type d'entité *</label>
<p:selectOneMenu id="newType"
value="#{entitesGestionBean.nouvelleEntite.type}"
required="true">
<f:selectItem itemLabel="Sélectionner un type" itemValue="" />
<f:selectItem itemLabel="Club Lions" itemValue="CLUB_LIONS" />
<f:selectItem itemLabel="LEO Club" itemValue="LEO_CLUB" />
<f:selectItem itemLabel="Branche" itemValue="BRANCHE" />
</p:selectOneMenu>
</div>
<div class="field col-12 md:col-6">
<label for="newRegion" class="block text-900 font-medium mb-2">Région *</label>
<p:selectOneMenu id="newRegion"
value="#{entitesGestionBean.nouvelleEntite.region}"
required="true">
<f:selectItem itemLabel="Sélectionner une région" itemValue="" />
<f:selectItem itemLabel="Dakar" itemValue="DAKAR" />
<f:selectItem itemLabel="Thiès" itemValue="THIES" />
<f:selectItem itemLabel="Kaolack" itemValue="KAOLACK" />
<f:selectItem itemLabel="Saint-Louis" itemValue="SAINT_LOUIS" />
</p:selectOneMenu>
</div>
<div class="field col-12 md:col-6">
<label for="newTelephone" class="block text-900 font-medium mb-2">Téléphone</label>
<p:inputText id="newTelephone"
value="#{entitesGestionBean.nouvelleEntite.telephone}"
placeholder="77 123 45 67" />
</div>
<div class="field col-12">
<label for="newEmail" class="block text-900 font-medium mb-2">Email</label>
<p:inputText id="newEmail"
value="#{entitesGestionBean.nouvelleEntite.email}"
placeholder="contact@lionsclub-dakar.sn" />
</div>
<div class="field col-12">
<label for="newAdresse" class="block text-900 font-medium mb-2">Adresse</label>
<p:inputTextarea id="newAdresse"
value="#{entitesGestionBean.nouvelleEntite.adresse}"
rows="2"
placeholder="Adresse complète de l'entité..." />
</div>
<div class="field col-12">
<label for="newDescription" class="block text-900 font-medium mb-2">Description</label>
<p:inputTextarea id="newDescription"
value="#{entitesGestionBean.nouvelleEntite.description}"
rows="3"
placeholder="Description de l'entité..." />
</div>
</div>
<div class="flex justify-content-end gap-2 mt-3">
<p:commandButton value="Annuler"
icon="pi pi-times"
styleClass="ui-button-secondary ui-button-outlined ui-button-sm"
onclick="PF('dlgNouvelleEntite').hide();"
type="button" />
<p:commandButton value="Créer l'entité"
icon="pi pi-check"
styleClass="ui-button-success ui-button-sm"
action="#{entitesGestionBean.creerEntite}"
update="@form :formTableEntites:dtEntites"
oncomplete="if(!args.validationFailed) PF('dlgNouvelleEntite').hide();" />
</div>
</h:form>
</p:dialog>
<!-- Dialog Actions Entité -->
<p:dialog header="Actions sur l'Entité"
widgetVar="dlgActionsEntite"
modal="true"
width="400"
height="auto"
resizable="false">
<h:form id="formActionsEntite">
<div class="surface-50 border-round-lg p-3 mb-3">
<div class="text-500 text-sm mb-1">Entité sélectionnée</div>
<div class="text-900 font-bold">#{entitesGestionBean.entiteSelectionne.nom}</div>
<div class="text-500 text-sm">#{entitesGestionBean.entiteSelectionne.codeEntite}</div>
</div>
<div class="flex flex-column gap-2">
<p:commandButton value="Gérer les membres"
icon="pi pi-users"
styleClass="ui-button-info ui-button-outlined ui-button-sm w-full"
action="#{entitesGestionBean.gererMembres}" />
<p:commandButton value="Configuration"
icon="pi pi-cog"
styleClass="ui-button-warning ui-button-outlined ui-button-sm w-full"
action="#{entitesGestionBean.configurerEntite}" />
<p:commandButton value="Rapports"
icon="pi pi-chart-bar"
styleClass="ui-button-secondary ui-button-outlined ui-button-sm w-full"
action="#{entitesGestionBean.voirRapports}" />
<p:commandButton value="Suspendre"
icon="pi pi-ban"
styleClass="ui-button-danger ui-button-outlined ui-button-sm w-full"
action="#{entitesGestionBean.suspendreEntite}"
onclick="return confirm('Êtes-vous sûr de vouloir suspendre cette entité ?');"
rendered="#{entitesGestionBean.entiteSelectionne.statut == 'ACTIVE'}" />
<p:commandButton value="Réactiver"
icon="pi pi-check"
styleClass="ui-button-success ui-button-outlined ui-button-sm w-full"
action="#{entitesGestionBean.reactiverEntite}"
rendered="#{entitesGestionBean.entiteSelectionne.statut == 'SUSPENDUE'}" />
<hr class="surface-border" />
<p:commandButton value="Supprimer"
icon="pi pi-trash"
styleClass="ui-button-danger ui-button-sm w-full"
onclick="return confirm('ATTENTION: Cette action est irréversible. Confirmer la suppression ?');"
action="#{entitesGestionBean.supprimerEntite}" />
</div>
</h:form>
</p:dialog>
</ui:define>
</ui:composition>