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,528 @@
<!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="#{evenementsBean}"/>
<ui:define name="title">Gestion des Événements - 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-blue-500" />
<ui:param name="title" value="Gestion des Événements" />
<ui:param name="description" value="Création, suivi et gestion des événements de l'organisation" />
<ui:define name="actions">
<h:form id="formActionsEvenements">
<div class="flex gap-2">
<ui:include src="/templates/components/buttons/button-success.xhtml">
<ui:param name="value" value="Nouvel événement" />
<ui:param name="icon" value="pi pi-plus" />
<ui:param name="onclick" value="PF('dlgNouvelEvenement').show();" />
</ui:include>
<ui:include src="/templates/components/buttons/button-secondary.xhtml">
<ui:param name="value" value="Exporter" />
<ui:param name="icon" value="pi pi-download" />
<ui:param name="outlined" value="true" />
</ui:include>
<ui:include src="/templates/components/buttons/button-icon.xhtml">
<ui:param name="icon" value="pi pi-refresh" />
<ui:param name="action" value="#{evenementsBean.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 -->
<div class="grid">
<ui:include src="/templates/components/cards/stat-card.xhtml">
<ui:param name="value" value="#{evenementsBean.statistiques.totalEvenements}" />
<ui:param name="label" value="Total Événements" />
<ui:param name="icon" value="pi pi-calendar" />
<ui:param name="bgColor" value="blue" />
</ui:include>
<ui:include src="/templates/components/cards/stat-card.xhtml">
<ui:param name="value" value="#{evenementsBean.statistiques.evenementsActifs}" />
<ui:param name="label" value="Événements Actifs" />
<ui:param name="icon" value="pi pi-check-circle" />
<ui:param name="bgColor" value="green" />
</ui:include>
<ui:include src="/templates/components/cards/stat-card.xhtml">
<ui:param name="value" value="#{evenementsBean.statistiques.participantsTotal}" />
<ui:param name="label" value="Total Participants" />
<ui:param name="icon" value="pi pi-users" />
<ui:param name="bgColor" value="orange" />
</ui:include>
<ui:include src="/templates/components/cards/stat-card.xhtml">
<ui:param name="value" value="#{evenementsBean.statistiques.budgetTotal}" />
<ui:param name="label" value="Budget Total" />
<ui:param name="icon" value="pi pi-wallet" />
<ui:param name="bgColor" value="purple" />
</ui:include>
</div>
<!-- Liste des événements -->
<div class="card">
<h:form id="formEvenements">
<h5>Liste des Événements</h5>
<!-- Filtres et recherche (DRY/WOU: filter-bar) -->
<ui:decorate template="/templates/components/cards/filter-bar.xhtml">
<ui:param name="title" value="Filtres" />
<ui:param name="styleClass" value="mb-3" />
<ui:define name="filters">
<div class="col-12 md:col-4">
<div class="field">
<p:outputLabel for="searchTitre" value="Rechercher" />
<span class="p-input-icon-left w-full">
<i class="pi pi-search"></i>
<p:inputText id="searchTitre"
placeholder="Rechercher par titre..."
value="#{evenementsBean.filtres.titre}"
styleClass="w-full">
<p:ajax event="keyup" update="dtEvenements" delay="500"/>
</p:inputText>
</span>
</div>
</div>
<div class="col-12 md:col-2">
<div class="field">
<p:outputLabel for="filtreType" value="Type" />
<p:selectOneMenu id="filtreType"
value="#{evenementsBean.filtres.type}"
styleClass="w-full">
<f:selectItem itemLabel="Tous les types" itemValue="" />
<f:selectItem itemLabel="Assemblée Générale" itemValue="ASSEMBLEE_GENERALE" />
<f:selectItem itemLabel="Formation" itemValue="FORMATION" />
<f:selectItem itemLabel="Activité Sociale" itemValue="ACTIVITE_SOCIALE" />
<f:selectItem itemLabel="Action Caritative" itemValue="ACTION_CARITATIVE" />
<f:selectItem itemLabel="Réunion de Bureau" itemValue="REUNION_BUREAU" />
<f:selectItem itemLabel="Conférence" itemValue="CONFERENCE" />
<f:selectItem itemLabel="Atelier" itemValue="ATELIER" />
<f:selectItem itemLabel="Cérémonie" itemValue="CEREMONIE" />
<f:selectItem itemLabel="Autre" itemValue="AUTRE" />
<p:ajax event="change" update="dtEvenements" />
</p:selectOneMenu>
</div>
</div>
<div class="col-12 md:col-2">
<div class="field">
<p:outputLabel for="filtreStatut" value="Statut" />
<p:selectOneMenu id="filtreStatut"
value="#{evenementsBean.filtres.statut}"
styleClass="w-full">
<f:selectItem itemLabel="Tous les statuts" itemValue="" />
<f:selectItem itemLabel="Planifié" itemValue="PLANIFIE" />
<f:selectItem itemLabel="Confirmé" itemValue="CONFIRME" />
<f:selectItem itemLabel="En cours" itemValue="EN_COURS" />
<f:selectItem itemLabel="Terminé" itemValue="TERMINE" />
<f:selectItem itemLabel="Annulé" itemValue="ANNULE" />
<f:selectItem itemLabel="Reporté" itemValue="REPORTE" />
<p:ajax event="change" update="dtEvenements" />
</p:selectOneMenu>
</div>
</div>
<div class="col-12 md:col-2">
<div class="field">
<p:outputLabel for="filtrePriorite" value="Priorité" />
<p:selectOneMenu id="filtrePriorite"
value="#{evenementsBean.filtres.priorite}"
styleClass="w-full">
<f:selectItem itemLabel="Toutes les priorités" itemValue="" />
<f:selectItem itemLabel="Critique" itemValue="CRITIQUE" />
<f:selectItem itemLabel="Haute" itemValue="HAUTE" />
<f:selectItem itemLabel="Normale" itemValue="NORMALE" />
<f:selectItem itemLabel="Basse" itemValue="BASSE" />
<p:ajax event="change" update="dtEvenements" />
</p:selectOneMenu>
</div>
</div>
</ui:define>
<ui:define name="actions">
<div class="col-12 md:col-2">
<div class="field">
<label class="invisible">Actions</label>
<p:commandButton value="Réinitialiser"
icon="pi pi-filter-slash"
action="#{evenementsBean.reinitialiserFiltres}"
update="dtEvenements searchTitre filtreType filtreStatut filtrePriorite"
styleClass="ui-button-secondary w-full" />
</div>
</div>
</ui:define>
</ui:decorate>
<!-- Tableau des événements -->
<p:dataTable id="dtEvenements"
value="#{evenementsBean.evenementsFiltres}"
var="evenement"
paginator="true"
rows="20"
rowsPerPageTemplate="10,20,50,100"
emptyMessage="Aucun événement trouvé"
selection="#{evenementsBean.evenementSelectionne}"
selectionMode="single"
rowKey="#{evenement.id}">
<p:column headerText="Titre" sortBy="#{evenement.titre}" filterBy="#{evenement.titre}">
<div class="flex align-items-center gap-2">
<i class="#{evenement.typeEvenementIcon} text-#{evenement.typeEvenementSeverity}"></i>
<span class="font-semibold">#{evenement.titre}</span>
</div>
</p:column>
<p:column headerText="Type" sortBy="#{evenement.typeEvenement}">
<p:tag value="#{evenement.typeEvenementLibelle}"
severity="#{evenement.typeEvenementSeverity}" />
</p:column>
<p:column headerText="Date" sortBy="#{evenement.dateDebut}">
<div>
<div class="font-medium">#{evenement.dateDebutFormatee}</div>
<div class="text-sm text-600">#{evenement.heureDebutFormatee} - #{evenement.heureFinFormatee}</div>
</div>
</p:column>
<p:column headerText="Lieu">
<div>
<div class="font-medium">#{evenement.lieu}</div>
<div class="text-sm text-600">#{evenement.ville}</div>
</div>
</p:column>
<p:column headerText="Statut" sortBy="#{evenement.statut}">
<p:tag value="#{evenement.statutLibelle}"
severity="#{evenement.statutSeverity}"
icon="#{evenement.statutIcon}" />
</p:column>
<p:column headerText="Priorité" sortBy="#{evenement.priorite}">
<p:tag value="#{evenement.prioriteLibelle}"
severity="#{evenement.prioriteSeverity}" />
</p:column>
<p:column headerText="Participants">
<div>
<div class="font-medium">#{evenement.participantsInscrits} / #{evenement.capaciteMax}</div>
<p:progressBar value="#{evenement.tauxRemplissage}"
styleClass="mt-1"
showValue="false" />
</div>
</p:column>
<p:column headerText="Actions" style="width: 200px;">
<div class="flex gap-1">
<p:commandButton icon="pi pi-eye"
title="Voir détails"
styleClass="p-button-text p-button-rounded"
action="#{evenementsBean.selectionnerEvenement(evenement)}"
update=":formEvenements:dlgDetails"
oncomplete="PF('dlgDetails').show();" />
<p:commandButton icon="pi pi-pencil"
title="Modifier"
styleClass="p-button-text p-button-rounded p-button-success"
action="#{evenementsBean.selectionnerEvenement(evenement)}"
update=":formEvenements:dlgModifier"
oncomplete="PF('dlgModifier').show();" />
<p:commandButton icon="pi pi-trash"
title="Supprimer"
styleClass="p-button-text p-button-rounded p-button-danger"
action="#{evenementsBean.supprimerEvenement}"
update="@form"
onclick="return confirm('Êtes-vous sûr de vouloir supprimer cet événement ?');" />
</div>
</p:column>
</p:dataTable>
</h:form>
</div>
<!-- Dialog Nouvel Événement -->
<h:form id="formNouvelEvenement">
<p:dialog id="dlgNouvelEvenement" header="Nouvel Événement"
widgetVar="dlgNouvelEvenement"
modal="true"
resizable="false"
style="width: 90vw; max-width: 800px;"
rendered="#{evenementsBean.nouvelEvenement != null}">
<ui:include src="/templates/components/forms/form-section.xhtml">
<ui:define name="content">
<div class="grid">
<div class="col-12">
<ui:include src="/templates/components/forms/form-field-text.xhtml">
<ui:param name="id" value="titre" />
<ui:param name="label" value="Titre *" />
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.titre}" />
<ui:param name="required" value="true" />
</ui:include>
</div>
<div class="col-12">
<ui:include src="/templates/components/forms/form-field-textarea.xhtml">
<ui:param name="id" value="description" />
<ui:param name="label" value="Description" />
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.description}" />
<ui:param name="rows" value="3" />
</ui:include>
</div>
<div class="col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-select.xhtml">
<ui:param name="id" value="typeEvenement" />
<ui:param name="label" value="Type d'événement *" />
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.typeEvenement}" />
<ui:param name="required" value="true" />
<ui:define name="items">
<f:selectItem itemLabel="Assemblée Générale" itemValue="ASSEMBLEE_GENERALE" />
<f:selectItem itemLabel="Formation" itemValue="FORMATION" />
<f:selectItem itemLabel="Activité Sociale" itemValue="ACTIVITE_SOCIALE" />
<f:selectItem itemLabel="Action Caritative" itemValue="ACTION_CARITATIVE" />
<f:selectItem itemLabel="Réunion de Bureau" itemValue="REUNION_BUREAU" />
<f:selectItem itemLabel="Conférence" itemValue="CONFERENCE" />
<f:selectItem itemLabel="Atelier" itemValue="ATELIER" />
<f:selectItem itemLabel="Cérémonie" itemValue="CEREMONIE" />
<f:selectItem itemLabel="Autre" itemValue="AUTRE" />
</ui:define>
</ui:include>
</div>
<div class="col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-select.xhtml">
<ui:param name="id" value="priorite" />
<ui:param name="label" value="Priorité" />
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.priorite}" />
<ui:define name="items">
<f:selectItem itemLabel="Critique" itemValue="CRITIQUE" />
<f:selectItem itemLabel="Haute" itemValue="HAUTE" />
<f:selectItem itemLabel="Normale" itemValue="NORMALE" />
<f:selectItem itemLabel="Basse" itemValue="BASSE" />
</ui:define>
</ui:include>
</div>
<div class="col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-calendar.xhtml">
<ui:param name="id" value="dateDebut" />
<ui:param name="label" value="Date de début *" />
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.dateDebut}" />
<ui:param name="required" value="true" />
</ui:include>
</div>
<div class="col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-calendar.xhtml">
<ui:param name="id" value="dateFin" />
<ui:param name="label" value="Date de fin" />
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.dateFin}" />
</ui:include>
</div>
<div class="col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-text.xhtml">
<ui:param name="id" value="lieu" />
<ui:param name="label" value="Lieu *" />
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.lieu}" />
<ui:param name="required" value="true" />
</ui:include>
</div>
<div class="col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-number.xhtml">
<ui:param name="id" value="capaciteMax" />
<ui:param name="label" value="Capacité maximale" />
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.capaciteMax}" />
<ui:param name="min" value="1" />
</ui:include>
</div>
<div class="col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-number.xhtml">
<ui:param name="id" value="budget" />
<ui:param name="label" value="Budget prévu" />
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.budget}" />
<ui:param name="min" value="0" />
<ui:param name="suffix" value=" FCFA" />
</ui:include>
</div>
<div class="col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-text.xhtml">
<ui:param name="id" value="organisateur" />
<ui:param name="label" value="Organisateur" />
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.organisateur}" />
</ui:include>
</div>
</div>
</ui:define>
</ui:include>
<f:facet name="footer">
<div class="flex justify-content-end gap-2" rendered="#{evenementsBean.nouvelEvenement != null}">
<p:commandButton value="Annuler"
icon="pi pi-times"
onclick="PF('dlgNouvelEvenement').hide();"
styleClass="p-button-outlined" />
<p:commandButton value="Créer"
icon="pi pi-check"
action="#{evenementsBean.creerEvenement}"
update="@form"
oncomplete="if(!args.validationFailed) { PF('dlgNouvelEvenement').hide(); }" />
</div>
</f:facet>
</p:dialog>
</h:form>
<!-- Dialog Détails -->
<h:form id="formDetails">
<p:dialog id="dlgDetails" header="Détails de l'Événement"
widgetVar="dlgDetails"
modal="true"
resizable="false"
style="width: 90vw; max-width: 700px;">
<div class="grid" rendered="#{evenementsBean.evenementSelectionne != null}">
<div class="col-12">
<h4>#{evenementsBean.evenementSelectionne.titre}</h4>
<p class="text-600">#{evenementsBean.evenementSelectionne.description}</p>
</div>
<div class="col-12 md:col-6">
<div class="field">
<label class="font-semibold">Type</label>
<p:tag value="#{evenementsBean.evenementSelectionne.typeEvenementLibelle}"
severity="#{evenementsBean.evenementSelectionne.typeEvenementSeverity}" />
</div>
</div>
<div class="col-12 md:col-6">
<div class="field">
<label class="font-semibold">Statut</label>
<p:tag value="#{evenementsBean.evenementSelectionne.statutLibelle}"
severity="#{evenementsBean.evenementSelectionne.statutSeverity}" />
</div>
</div>
<div class="col-12 md:col-6">
<div class="field">
<label class="font-semibold">Date de début</label>
<div>#{evenementsBean.evenementSelectionne.dateDebutFormatee}</div>
<div class="text-sm text-600">#{evenementsBean.evenementSelectionne.heureDebutFormatee}</div>
</div>
</div>
<div class="col-12 md:col-6">
<div class="field">
<label class="font-semibold">Lieu</label>
<div>#{evenementsBean.evenementSelectionne.lieu}</div>
<div class="text-sm text-600">#{evenementsBean.evenementSelectionne.adresseComplete}</div>
</div>
</div>
<div class="col-12 md:col-6">
<div class="field">
<label class="font-semibold">Participants</label>
<div>#{evenementsBean.evenementSelectionne.participantsInscrits} / #{evenementsBean.evenementSelectionne.capaciteMax}</div>
<p:progressBar value="#{evenementsBean.evenementSelectionne.tauxRemplissage}"
showValue="true" />
</div>
</div>
<div class="col-12 md:col-6">
<div class="field">
<label class="font-semibold">Budget</label>
<div>#{evenementsBean.evenementSelectionne.budgetFormate}</div>
</div>
</div>
</div>
<f:facet name="footer">
<p:commandButton value="Fermer"
icon="pi pi-times"
onclick="PF('dlgDetails').hide();"
styleClass="p-button-outlined" />
</f:facet>
</p:dialog>
</h:form>
<!-- Dialog Modifier -->
<h:form id="formModifier">
<p:dialog id="dlgModifier" header="Modifier l'Événement"
widgetVar="dlgModifier"
modal="true"
resizable="false"
style="width: 90vw; max-width: 800px;">
<div class="grid" rendered="#{evenementsBean.evenementSelectionne != null}">
<div class="col-12">
<ui:include src="/templates/components/forms/form-field-text.xhtml">
<ui:param name="id" value="titreModif" />
<ui:param name="label" value="Titre *" />
<ui:param name="value" value="#{evenementsBean.evenementSelectionne.titre}" />
<ui:param name="required" value="true" />
</ui:include>
</div>
<div class="col-12">
<ui:include src="/templates/components/forms/form-field-textarea.xhtml">
<ui:param name="id" value="descriptionModif" />
<ui:param name="label" value="Description" />
<ui:param name="value" value="#{evenementsBean.evenementSelectionne.description}" />
<ui:param name="rows" value="3" />
</ui:include>
</div>
<div class="col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-select.xhtml">
<ui:param name="id" value="statutModif" />
<ui:param name="label" value="Statut" />
<ui:param name="value" value="#{evenementsBean.evenementSelectionne.statut}" />
<ui:define name="items">
<f:selectItem itemLabel="Planifié" itemValue="PLANIFIE" />
<f:selectItem itemLabel="Confirmé" itemValue="CONFIRME" />
<f:selectItem itemLabel="En cours" itemValue="EN_COURS" />
<f:selectItem itemLabel="Terminé" itemValue="TERMINE" />
<f:selectItem itemLabel="Annulé" itemValue="ANNULE" />
<f:selectItem itemLabel="Reporté" itemValue="REPORTE" />
</ui:define>
</ui:include>
</div>
<div class="col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-calendar.xhtml">
<ui:param name="id" value="dateDebutModif" />
<ui:param name="label" value="Date de début *" />
<ui:param name="value" value="#{evenementsBean.evenementSelectionne.dateDebut}" />
<ui:param name="required" value="true" />
</ui:include>
</div>
</div>
<f:facet name="footer">
<div class="flex justify-content-end gap-2">
<p:commandButton value="Annuler"
icon="pi pi-times"
onclick="PF('dlgModifier').hide();"
styleClass="p-button-outlined" />
<p:commandButton value="Enregistrer"
icon="pi pi-check"
action="#{evenementsBean.modifierEvenement}"
update="@form"
oncomplete="if(!args.validationFailed) { PF('dlgModifier').hide(); }" />
</div>
</f:facet>
</p:dialog>
</h:form>
</ui:define>
</ui:composition>