Configure Maven repository for unionflow-server-api dependency
This commit is contained in:
@@ -0,0 +1,198 @@
|
||||
<!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">Bilan 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-chart-bar text-green-500" />
|
||||
<ui:param name="title" value="Bilan des Événements" />
|
||||
<ui:param name="description" value="Analysez les performances et les résultats de vos événements" />
|
||||
<ui:define name="actions">
|
||||
<h:form id="formActionsBilan">
|
||||
<div class="flex gap-2">
|
||||
<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 globales -->
|
||||
<div class="grid mb-3">
|
||||
<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.participantsTotal}" />
|
||||
<ui:param name="label" value="Total participants" />
|
||||
<ui:param name="icon" value="pi pi-users" />
|
||||
<ui:param name="bgColor" value="green" />
|
||||
</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>
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="0%" />
|
||||
<ui:param name="label" value="Taux de participation moyen" />
|
||||
<ui:param name="icon" value="pi pi-percentage" />
|
||||
<ui:param name="bgColor" value="orange" />
|
||||
</ui:include>
|
||||
</div>
|
||||
|
||||
<!-- 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-3">
|
||||
<div class="field">
|
||||
<p:outputLabel for="searchBilan" value="Rechercher" />
|
||||
<span class="p-input-icon-left w-full">
|
||||
<i class="pi pi-search"></i>
|
||||
<p:inputText id="searchBilan"
|
||||
placeholder="Titre événement..."
|
||||
styleClass="w-full">
|
||||
<p:ajax event="keyup" delay="500"/>
|
||||
</p:inputText>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 md:col-2">
|
||||
<div class="field">
|
||||
<p:outputLabel for="filtrePeriode" value="Période" />
|
||||
<p:selectOneMenu id="filtrePeriode" styleClass="w-full">
|
||||
<f:selectItem itemLabel="Toutes périodes" itemValue="" />
|
||||
<f:selectItem itemLabel="Ce mois" itemValue="MOIS" />
|
||||
<f:selectItem itemLabel="Ce trimestre" itemValue="TRIMESTRE" />
|
||||
<f:selectItem itemLabel="Cette année" itemValue="ANNEE" />
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 md:col-2">
|
||||
<div class="field">
|
||||
<p:outputLabel for="filtreType" value="Type" />
|
||||
<p:selectOneMenu id="filtreType" styleClass="w-full">
|
||||
<f:selectItem itemLabel="Tous 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" />
|
||||
</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"
|
||||
styleClass="ui-button-secondary w-full" />
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:decorate>
|
||||
|
||||
<!-- Tableau de bord des bilans -->
|
||||
<div class="grid">
|
||||
<!-- Liste des événements avec bilans -->
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<h:form id="formBilans">
|
||||
<h5>Bilans par Événement</h5>
|
||||
|
||||
<p:dataTable id="dtBilans"
|
||||
value="#{evenementsBean.evenementsFiltres}"
|
||||
var="evenement"
|
||||
paginator="true"
|
||||
rows="20"
|
||||
rowsPerPageTemplate="10,20,50,100"
|
||||
emptyMessage="Aucun bilan trouvé"
|
||||
styleClass="table-responsive">
|
||||
|
||||
<p:column headerText="Événement" sortBy="#{evenement.titre}">
|
||||
<div>
|
||||
<span class="font-semibold">#{evenement.titre}</span>
|
||||
<br/>
|
||||
<span class="text-sm text-600">#{evenement.typeEvenementLibelle}</span>
|
||||
</div>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Date">
|
||||
<span>#{evenement.dateDebutFormatee}</span>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Participants">
|
||||
<div>
|
||||
<span class="font-medium">0</span>
|
||||
<span class="text-sm text-600"> / 0 prévus</span>
|
||||
</div>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Budget">
|
||||
<div>
|
||||
<span class="font-medium">0 XOF</span>
|
||||
<br/>
|
||||
<span class="text-sm text-600">0 XOF prévu</span>
|
||||
</div>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Taux participation">
|
||||
<p:tag value="0%" severity="info" />
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Actions" style="width: 150px;">
|
||||
<p:commandButton value="Voir bilan"
|
||||
icon="pi pi-chart-bar"
|
||||
styleClass="ui-button-rounded ui-button-text ui-button-secondary"
|
||||
outcome="/pages/secure/evenement/bilan-detail" />
|
||||
</p:column>
|
||||
</p:dataTable>
|
||||
</h:form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Graphiques et analyses -->
|
||||
<div class="grid mt-3">
|
||||
<div class="col-12 md:col-6">
|
||||
<div class="card">
|
||||
<h5>Évolution des participations</h5>
|
||||
<p class="text-600">Graphique en développement</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 md:col-6">
|
||||
<div class="card">
|
||||
<h5>Répartition par type</h5>
|
||||
<p class="text-600">Graphique en développement</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:composition>
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
<!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">Calendrier des Événements - UnionFlow</ui:define>
|
||||
<ui:define name="content">
|
||||
<!-- Redirection vers calendrier.xhtml (WOU/DRY - réutiliser la même page) -->
|
||||
<h:form>
|
||||
<p:commandButton value="Voir le calendrier"
|
||||
action="evenementCalendrierPage?faces-redirect=true"
|
||||
styleClass="ui-button-primary"/>
|
||||
</h:form>
|
||||
</ui:define>
|
||||
</ui:composition>
|
||||
@@ -0,0 +1,183 @@
|
||||
<!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">Calendrier 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-plus text-blue-500" />
|
||||
<ui:param name="title" value="Calendrier des Événements" />
|
||||
<ui:param name="description" value="Vue calendrier de tous les événements de l'organisation" />
|
||||
<ui:define name="actions">
|
||||
<h:form id="formActionsCalendrier">
|
||||
<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="outcome" value="/pages/secure/evenement/creation.xhtml" />
|
||||
</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>
|
||||
|
||||
<!-- Calendrier -->
|
||||
<div class="card">
|
||||
<h:form id="formCalendrier">
|
||||
<h5>Calendrier</h5>
|
||||
|
||||
<div class="text-center p-4">
|
||||
<i class="pi pi-calendar text-4xl text-blue-500 mb-3"></i>
|
||||
<h5>Calendrier des Événements</h5>
|
||||
<p class="text-600">La vue calendrier interactive sera disponible prochainement</p>
|
||||
<p class="text-600 mt-2">En attendant, utilisez la liste des événements à venir ci-dessous</p>
|
||||
</div>
|
||||
</h:form>
|
||||
</div>
|
||||
|
||||
<!-- Liste des événements à venir -->
|
||||
<div class="card">
|
||||
<h:form id="formListeProchains">
|
||||
<h5>Événements à Venir</h5>
|
||||
|
||||
<p:dataTable id="dtProchains"
|
||||
value="#{evenementsBean.evenementsProchains}"
|
||||
var="evenement"
|
||||
paginator="false"
|
||||
emptyMessage="Aucun événement à venir"
|
||||
rowKey="#{evenement.id}">
|
||||
|
||||
<p:column headerText="Date">
|
||||
<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="Événement">
|
||||
<div class="flex align-items-center gap-2">
|
||||
<i class="#{evenement.typeEvenementIcon} text-#{evenement.typeEvenementSeverity}"></i>
|
||||
<div>
|
||||
<div class="font-semibold">#{evenement.titre}</div>
|
||||
<div class="text-sm text-600">#{evenement.lieu}</div>
|
||||
</div>
|
||||
</div>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Statut">
|
||||
<p:tag value="#{evenement.statutLibelle}"
|
||||
severity="#{evenement.statutSeverity}"
|
||||
icon="#{evenement.statutIcon}" />
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Participants">
|
||||
<div>#{evenement.participantsInscrits} / #{evenement.capaciteMax}</div>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Actions">
|
||||
<p:commandButton icon="pi pi-eye"
|
||||
title="Voir détails"
|
||||
styleClass="p-button-text p-button-rounded"
|
||||
action="#{evenementsBean.selectionnerEvenement(evenement)}"
|
||||
update=":formCalendrier:dlgDetails"
|
||||
oncomplete="PF('dlgDetails').show();" />
|
||||
</p:column>
|
||||
</p:dataTable>
|
||||
</h:form>
|
||||
</div>
|
||||
|
||||
<!-- 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">
|
||||
<div class="flex gap-2">
|
||||
<p:commandButton value="Voir détails"
|
||||
icon="pi pi-eye"
|
||||
outcome="/pages/secure/evenement/gestion.xhtml"
|
||||
styleClass="p-button-outlined" />
|
||||
<p:commandButton value="Fermer"
|
||||
icon="pi pi-times"
|
||||
onclick="PF('dlgDetails').hide();"
|
||||
styleClass="p-button-secondary p-button-outlined" />
|
||||
</div>
|
||||
</f:facet>
|
||||
</p:dialog>
|
||||
</h:form>
|
||||
</ui:define>
|
||||
|
||||
</ui:composition>
|
||||
@@ -0,0 +1,18 @@
|
||||
<!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">Créer un Événement - UnionFlow</ui:define>
|
||||
<ui:define name="content">
|
||||
<!-- Redirection vers creation.xhtml (WOU/DRY - réutiliser la même page) -->
|
||||
<h:form>
|
||||
<p:commandButton value="Créer un événement"
|
||||
action="evenementCreationPage?faces-redirect=true"
|
||||
styleClass="ui-button-primary"/>
|
||||
</h:form>
|
||||
</ui:define>
|
||||
</ui:composition>
|
||||
@@ -0,0 +1,268 @@
|
||||
<!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">Création d'Événement - 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-plus-circle text-green-500" />
|
||||
<ui:param name="title" value="Créer un Nouvel Événement" />
|
||||
<ui:param name="description" value="Remplissez le formulaire pour créer un nouvel événement" />
|
||||
<ui:define name="actions">
|
||||
<h:form id="formActionsCreation">
|
||||
<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="outcome" value="/pages/secure/evenement/gestion.xhtml" />
|
||||
<ui:param name="outlined" value="true" />
|
||||
</ui:include>
|
||||
</div>
|
||||
</h:form>
|
||||
</ui:define>
|
||||
</ui:include>
|
||||
|
||||
<!-- Formulaire de création -->
|
||||
<div class="card">
|
||||
<h:form id="formCreation">
|
||||
<ui:include src="/templates/components/forms/form-section.xhtml">
|
||||
<ui:define name="title">Informations Générales</ui:define>
|
||||
<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 de l'événement *" />
|
||||
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.titre}" />
|
||||
<ui:param name="required" value="true" />
|
||||
<ui:param name="placeholder" value="Ex: Assemblée Générale Annuelle 2025" />
|
||||
</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="4" />
|
||||
<ui:param name="placeholder" value="Description détaillée de l'événement..." />
|
||||
</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="Sélectionner un type" 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" />
|
||||
</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="Normale" itemValue="NORMALE" />
|
||||
<f:selectItem itemLabel="Haute" itemValue="HAUTE" />
|
||||
<f:selectItem itemLabel="Critique" itemValue="CRITIQUE" />
|
||||
<f:selectItem itemLabel="Basse" itemValue="BASSE" />
|
||||
</ui:define>
|
||||
</ui:include>
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:include>
|
||||
|
||||
<ui:include src="/templates/components/forms/form-section.xhtml">
|
||||
<ui:define name="title">Dates et Horaires</ui:define>
|
||||
<ui:define name="content">
|
||||
<div class="grid">
|
||||
<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">
|
||||
<div class="field">
|
||||
<p:outputLabel for="heureDebut" value="Heure de début" />
|
||||
<p:inputMask id="heureDebut"
|
||||
value="#{evenementsBean.nouvelEvenement.heureDebut}"
|
||||
mask="99:99"
|
||||
placeholder="HH:mm" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 md:col-6">
|
||||
<div class="field">
|
||||
<p:outputLabel for="heureFin" value="Heure de fin" />
|
||||
<p:inputMask id="heureFin"
|
||||
value="#{evenementsBean.nouvelEvenement.heureFin}"
|
||||
mask="99:99"
|
||||
placeholder="HH:mm" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:include>
|
||||
|
||||
<ui:include src="/templates/components/forms/form-section.xhtml">
|
||||
<ui:define name="title">Localisation</ui:define>
|
||||
<ui:define name="content">
|
||||
<div class="grid">
|
||||
<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:param name="placeholder" value="Ex: Salle de conférence" />
|
||||
</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="adresse" />
|
||||
<ui:param name="label" value="Adresse" />
|
||||
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.adresse}" />
|
||||
<ui:param name="placeholder" value="Adresse complète" />
|
||||
</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="ville" />
|
||||
<ui:param name="label" value="Ville" />
|
||||
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.ville}" />
|
||||
</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="region" />
|
||||
<ui:param name="label" value="Région" />
|
||||
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.region}" />
|
||||
</ui:include>
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:include>
|
||||
|
||||
<ui:include src="/templates/components/forms/form-section.xhtml">
|
||||
<ui:define name="title">Organisation et Participants</ui:define>
|
||||
<ui:define name="content">
|
||||
<div class="grid">
|
||||
<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 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-calendar.xhtml">
|
||||
<ui:param name="id" value="dateLimiteInscription" />
|
||||
<ui:param name="label" value="Date limite d'inscription" />
|
||||
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.dateLimiteInscription}" />
|
||||
</ui:include>
|
||||
</div>
|
||||
|
||||
<div class="col-12 md:col-6">
|
||||
<ui:include src="/templates/components/forms/form-field-boolean.xhtml">
|
||||
<ui:param name="id" value="inscriptionObligatoire" />
|
||||
<ui:param name="label" value="Inscription obligatoire" />
|
||||
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.inscriptionObligatoire}" />
|
||||
</ui:include>
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:include>
|
||||
|
||||
<ui:include src="/templates/components/forms/form-section.xhtml">
|
||||
<ui:define name="title">Budget</ui:define>
|
||||
<ui:define name="content">
|
||||
<div class="grid">
|
||||
<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="codeDevise" />
|
||||
<ui:param name="label" value="Devise" />
|
||||
<ui:param name="value" value="#{evenementsBean.nouvelEvenement.codeDevise}" />
|
||||
<ui:param name="placeholder" value="XOF" />
|
||||
</ui:include>
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:include>
|
||||
|
||||
<!-- Actions -->
|
||||
<div class="flex justify-content-end gap-2 mt-4">
|
||||
<ui:include src="/templates/components/buttons/button-secondary.xhtml">
|
||||
<ui:param name="value" value="Annuler" />
|
||||
<ui:param name="icon" value="pi pi-times" />
|
||||
<ui:param name="outcome" value="/pages/secure/evenement/gestion.xhtml" />
|
||||
<ui:param name="outlined" value="true" />
|
||||
</ui:include>
|
||||
<ui:include src="/templates/components/buttons/button-success.xhtml">
|
||||
<ui:param name="value" value="Créer l'événement" />
|
||||
<ui:param name="icon" value="pi pi-check" />
|
||||
<ui:param name="action" value="#{evenementsBean.creerEvenement}" />
|
||||
<ui:param name="update" value="@form" />
|
||||
</ui:include>
|
||||
</div>
|
||||
</h:form>
|
||||
</div>
|
||||
</ui:define>
|
||||
|
||||
</ui:composition>
|
||||
@@ -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>
|
||||
@@ -0,0 +1,180 @@
|
||||
<!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">Logistique 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-truck text-purple-500" />
|
||||
<ui:param name="title" value="Logistique des Événements" />
|
||||
<ui:param name="description" value="Gérez le matériel, les équipements et les ressources nécessaires pour vos événements" />
|
||||
<ui:define name="actions">
|
||||
<h:form id="formActionsLogistique">
|
||||
<div class="flex gap-2">
|
||||
<ui:include src="/templates/components/buttons/button-success.xhtml">
|
||||
<ui:param name="value" value="Nouvelle demande" />
|
||||
<ui:param name="icon" value="pi pi-plus" />
|
||||
<ui:param name="onclick" value="PF('dlgNouvelleDemande').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="#{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 mb-3">
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="0" />
|
||||
<ui:param name="label" value="Demandes actives" />
|
||||
<ui:param name="icon" value="pi pi-shopping-cart" />
|
||||
<ui:param name="bgColor" value="blue" />
|
||||
</ui:include>
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="0" />
|
||||
<ui:param name="label" value="Matériel disponible" />
|
||||
<ui:param name="icon" value="pi pi-box" />
|
||||
<ui:param name="bgColor" value="green" />
|
||||
</ui:include>
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="0" />
|
||||
<ui:param name="label" value="En attente livraison" />
|
||||
<ui:param name="icon" value="pi pi-hourglass" />
|
||||
<ui:param name="bgColor" value="orange" />
|
||||
</ui:include>
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="0" />
|
||||
<ui:param name="label" value="Fournisseurs" />
|
||||
<ui:param name="icon" value="pi pi-building" />
|
||||
<ui:param name="bgColor" value="purple" />
|
||||
</ui:include>
|
||||
</div>
|
||||
|
||||
<!-- 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="searchLogistique" value="Rechercher" />
|
||||
<span class="p-input-icon-left w-full">
|
||||
<i class="pi pi-search"></i>
|
||||
<p:inputText id="searchLogistique"
|
||||
placeholder="Événement, matériel..."
|
||||
styleClass="w-full">
|
||||
<p:ajax event="keyup" delay="500"/>
|
||||
</p:inputText>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 md:col-2">
|
||||
<div class="field">
|
||||
<p:outputLabel for="filtreTypeMateriel" value="Type matériel" />
|
||||
<p:selectOneMenu id="filtreTypeMateriel" styleClass="w-full">
|
||||
<f:selectItem itemLabel="Tous types" itemValue="" />
|
||||
<f:selectItem itemLabel="Sonorisation" itemValue="SONO" />
|
||||
<f:selectItem itemLabel="Éclairage" itemValue="ECLAIRAGE" />
|
||||
<f:selectItem itemLabel="Mobilier" itemValue="MOBILIER" />
|
||||
<f:selectItem itemLabel="Catering" itemValue="CATERING" />
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 md:col-2">
|
||||
<div class="field">
|
||||
<p:outputLabel for="filtreStatut" value="Statut" />
|
||||
<p:selectOneMenu id="filtreStatut" styleClass="w-full">
|
||||
<f:selectItem itemLabel="Tous les statuts" itemValue="" />
|
||||
<f:selectItem itemLabel="En attente" itemValue="EN_ATTENTE" />
|
||||
<f:selectItem itemLabel="Validé" itemValue="VALIDE" />
|
||||
<f:selectItem itemLabel="Livré" itemValue="LIVRE" />
|
||||
</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"
|
||||
styleClass="ui-button-secondary w-full" />
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:decorate>
|
||||
|
||||
<!-- Liste des demandes logistiques -->
|
||||
<div class="card">
|
||||
<h:form id="formLogistique">
|
||||
<h5>Demandes Logistiques</h5>
|
||||
|
||||
<p:dataTable id="dtLogistique"
|
||||
value="#{evenementsBean.evenementsFiltres}"
|
||||
var="evenement"
|
||||
paginator="true"
|
||||
rows="20"
|
||||
rowsPerPageTemplate="10,20,50,100"
|
||||
emptyMessage="Aucune demande logistique trouvée"
|
||||
styleClass="table-responsive">
|
||||
|
||||
<p:column headerText="Événement" sortBy="#{evenement.titre}">
|
||||
<span class="font-semibold">#{evenement.titre}</span>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Type matériel">
|
||||
<p:tag value="À définir" severity="info" />
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Quantité">
|
||||
<span>0</span>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Date livraison">
|
||||
<span class="text-600">À planifier</span>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Statut">
|
||||
<p:tag value="En attente" severity="warning" />
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Actions" style="width: 200px;">
|
||||
<p:commandButton icon="pi pi-eye"
|
||||
title="Voir détails"
|
||||
styleClass="ui-button-rounded ui-button-text ui-button-secondary mr-2" />
|
||||
<p:commandButton icon="pi pi-pencil"
|
||||
title="Modifier"
|
||||
styleClass="ui-button-rounded ui-button-text ui-button-secondary mr-2" />
|
||||
</p:column>
|
||||
</p:dataTable>
|
||||
</h:form>
|
||||
</div>
|
||||
|
||||
<!-- Message d'information -->
|
||||
<div class="card">
|
||||
<div class="flex align-items-center gap-3 p-3">
|
||||
<i class="pi pi-info-circle text-blue-500 text-2xl"></i>
|
||||
<div>
|
||||
<h6 class="m-0">Fonctionnalité en développement</h6>
|
||||
<p class="m-0 text-600">La gestion logistique complète des événements sera disponible prochainement.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:composition>
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
<!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 Participants - 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-green-500" />
|
||||
<ui:param name="title" value="Gestion des Participants" />
|
||||
<ui:param name="description" value="Gérer les participants et les inscriptions aux événements" />
|
||||
<ui:define name="actions">
|
||||
<h:form id="formActionsParticipants">
|
||||
<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="outcome" value="/pages/secure/evenement/gestion.xhtml" />
|
||||
<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>
|
||||
|
||||
<!-- Sélection d'événement -->
|
||||
<div class="card">
|
||||
<h:form id="formSelection">
|
||||
<h5>Sélectionner un Événement</h5>
|
||||
<div class="grid">
|
||||
<div class="col-12 md:col-6">
|
||||
<p:selectOneMenu value="#{evenementsBean.evenementSelectionne}"
|
||||
styleClass="w-full"
|
||||
filter="true"
|
||||
filterMatchMode="contains"
|
||||
placeholder="Sélectionner un événement...">
|
||||
<f:selectItem itemLabel="Sélectionner un événement" itemValue="#{null}" />
|
||||
<f:selectItems value="#{evenementsBean.tousLesEvenements}"
|
||||
var="evt"
|
||||
itemLabel="#{evt.titre} - #{evt.dateDebutFormatee}"
|
||||
itemValue="#{evt}" />
|
||||
<p:ajax event="change" update=":formParticipants" />
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
</div>
|
||||
</h:form>
|
||||
</div>
|
||||
|
||||
<!-- Liste des participants -->
|
||||
<div class="card" rendered="#{evenementsBean.evenementSelectionne != null}">
|
||||
<h:form id="formParticipants">
|
||||
<h5>Participants - #{evenementsBean.evenementSelectionne.titre}</h5>
|
||||
|
||||
<div class="grid mb-3">
|
||||
<div class="col-12 md:col-4">
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="#{evenementsBean.evenementSelectionne.participantsInscrits}" />
|
||||
<ui:param name="label" value="Inscrits" />
|
||||
<ui:param name="icon" value="pi pi-user-plus" />
|
||||
<ui:param name="bgColor" value="blue" />
|
||||
</ui:include>
|
||||
</div>
|
||||
|
||||
<div class="col-12 md:col-4">
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="#{evenementsBean.evenementSelectionne.participantsPresents}" />
|
||||
<ui:param name="label" value="Présents" />
|
||||
<ui:param name="icon" value="pi pi-check-circle" />
|
||||
<ui:param name="bgColor" value="green" />
|
||||
</ui:include>
|
||||
</div>
|
||||
|
||||
<div class="col-12 md:col-4">
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="#{evenementsBean.evenementSelectionne.placesDisponibles}" />
|
||||
<ui:param name="label" value="Places disponibles" />
|
||||
<ui:param name="icon" value="pi pi-ticket" />
|
||||
<ui:param name="bgColor" value="orange" />
|
||||
</ui:include>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center p-4">
|
||||
<i class="pi pi-info-circle text-4xl text-blue-500 mb-3"></i>
|
||||
<h5>Gestion des Participants</h5>
|
||||
<p class="text-600">La gestion détaillée des participants sera disponible prochainement</p>
|
||||
<p class="text-600 mt-2">
|
||||
Participants inscrits: <strong>#{evenementsBean.evenementSelectionne.participantsInscrits}</strong> /
|
||||
Capacité: <strong>#{evenementsBean.evenementSelectionne.capaciteMax}</strong>
|
||||
</p>
|
||||
</div>
|
||||
</h:form>
|
||||
</div>
|
||||
|
||||
<!-- Message si aucun événement sélectionné -->
|
||||
<div class="card" rendered="#{evenementsBean.evenementSelectionne == null}">
|
||||
<div class="text-center p-4">
|
||||
<i class="pi pi-info-circle text-4xl text-blue-500 mb-3"></i>
|
||||
<h5>Sélectionnez un événement</h5>
|
||||
<p class="text-600">Veuillez sélectionner un événement pour voir ses participants</p>
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
|
||||
</ui:composition>
|
||||
@@ -0,0 +1,255 @@
|
||||
<!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">Participation aux É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-check text-purple-500" />
|
||||
<ui:param name="title" value="Participation aux Événements" />
|
||||
<ui:param name="description" value="Consultez et inscrivez-vous aux événements disponibles" />
|
||||
<ui:define name="actions">
|
||||
<h:form id="formActionsParticipation">
|
||||
<div class="flex gap-2">
|
||||
<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>
|
||||
|
||||
<!-- Filtres -->
|
||||
<div class="card">
|
||||
<h:form id="formFiltres">
|
||||
<h5>Filtres</h5>
|
||||
<div class="grid">
|
||||
<div class="col-12 md:col-4">
|
||||
<p:selectOneMenu 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" />
|
||||
<p:ajax event="change" update=":formListe" />
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
|
||||
<div class="col-12 md:col-4">
|
||||
<p:selectOneMenu 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" />
|
||||
<p:ajax event="change" update=":formListe" />
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
|
||||
<div class="col-12 md:col-4">
|
||||
<div class="flex gap-2">
|
||||
<p:commandButton value="Rechercher"
|
||||
icon="pi pi-search"
|
||||
action="#{evenementsBean.rechercher}"
|
||||
update=":formListe"
|
||||
styleClass="p-button-primary" />
|
||||
<p:commandButton value="Réinitialiser"
|
||||
icon="pi pi-filter-slash"
|
||||
action="#{evenementsBean.reinitialiserFiltres}"
|
||||
update="@form :formListe"
|
||||
styleClass="p-button-outlined" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</h:form>
|
||||
</div>
|
||||
|
||||
<!-- Liste des événements disponibles -->
|
||||
<div class="card">
|
||||
<h:form id="formListe">
|
||||
<h5>Événements Disponibles</h5>
|
||||
|
||||
<p:dataTable id="dtEvenements"
|
||||
value="#{evenementsBean.evenementsFiltres}"
|
||||
var="evenement"
|
||||
paginator="true"
|
||||
rows="10"
|
||||
emptyMessage="Aucun événement disponible"
|
||||
rowKey="#{evenement.id}">
|
||||
|
||||
<p:column headerText="Événement" style="width: 40%;">
|
||||
<div class="flex align-items-center gap-2">
|
||||
<i class="#{evenement.typeEvenementIcon} text-2xl text-#{evenement.typeEvenementSeverity}"></i>
|
||||
<div>
|
||||
<div class="font-semibold text-lg">#{evenement.titre}</div>
|
||||
<div class="text-sm text-600">#{evenement.description}</div>
|
||||
</div>
|
||||
</div>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Date et Heure">
|
||||
<div>
|
||||
<div class="font-medium">#{evenement.dateDebutFormatee}</div>
|
||||
<div class="text-sm text-600">
|
||||
<i class="pi pi-clock"></i> #{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="Places">
|
||||
<div>
|
||||
<div class="font-medium">#{evenement.participantsInscrits} / #{evenement.capaciteMax}</div>
|
||||
<p:progressBar value="#{evenement.tauxRemplissage}"
|
||||
showValue="true"
|
||||
styleClass="mt-1" />
|
||||
</div>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Statut">
|
||||
<p:tag value="#{evenement.statutLibelle}"
|
||||
severity="#{evenement.statutSeverity}"
|
||||
icon="#{evenement.statutIcon}" />
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Actions" style="width: 150px;">
|
||||
<div class="flex gap-1">
|
||||
<p:commandButton value="Voir détails"
|
||||
icon="pi pi-eye"
|
||||
styleClass="p-button-text p-button-sm"
|
||||
action="#{evenementsBean.selectionnerEvenement(evenement)}"
|
||||
update=":formDetails:dlgDetails"
|
||||
oncomplete="PF('dlgDetails').show();" />
|
||||
|
||||
<p:commandButton value="S'inscrire"
|
||||
icon="pi pi-check"
|
||||
styleClass="p-button-success p-button-sm"
|
||||
rendered="#{evenement.sontInscriptionsOuvertes()}"
|
||||
action="#{evenementsBean.sinscrireEvenement(evenement)}"
|
||||
update="@form"
|
||||
onclick="return confirm('Confirmer votre inscription à cet événement ?');" />
|
||||
|
||||
<p:tag value="Complet"
|
||||
severity="error"
|
||||
rendered="#{evenement.isComplet()}" />
|
||||
</div>
|
||||
</p:column>
|
||||
</p:dataTable>
|
||||
</h:form>
|
||||
</div>
|
||||
|
||||
<!-- 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: 800px;">
|
||||
<div class="grid" rendered="#{evenementsBean.evenementSelectionne != null}">
|
||||
<div class="col-12">
|
||||
<h3>#{evenementsBean.evenementSelectionne.titre}</h3>
|
||||
<p class="text-600 mt-2">#{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">Date de fin</label>
|
||||
<div>#{evenementsBean.evenementSelectionne.dateFinFormatee}</div>
|
||||
<div class="text-sm text-600">#{evenementsBean.evenementSelectionne.heureFinFormatee}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="field">
|
||||
<label class="font-semibold">Lieu</label>
|
||||
<div>#{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">Organisateur</label>
|
||||
<div>#{evenementsBean.evenementSelectionne.organisateur}</div>
|
||||
<div class="text-sm text-600">#{evenementsBean.evenementSelectionne.emailOrganisateur}</div>
|
||||
<div class="text-sm text-600">#{evenementsBean.evenementSelectionne.telephoneOrganisateur}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12" rendered="#{evenementsBean.evenementSelectionne.instructions != null}">
|
||||
<div class="field">
|
||||
<label class="font-semibold">Instructions</label>
|
||||
<div class="surface-50 p-3 border-round">#{evenementsBean.evenementSelectionne.instructions}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<f:facet name="footer">
|
||||
<div class="flex gap-2">
|
||||
<p:commandButton value="S'inscrire"
|
||||
icon="pi pi-check"
|
||||
rendered="#{evenementsBean.evenementSelectionne != null and evenementsBean.evenementSelectionne.sontInscriptionsOuvertes()}"
|
||||
action="#{evenementsBean.sinscrireEvenement(evenementsBean.evenementSelectionne)}"
|
||||
update="@form"
|
||||
onclick="PF('dlgDetails').hide(); return confirm('Confirmer votre inscription ?');" />
|
||||
<p:commandButton value="Fermer"
|
||||
icon="pi pi-times"
|
||||
onclick="PF('dlgDetails').hide();"
|
||||
styleClass="p-button-secondary p-button-outlined" />
|
||||
</div>
|
||||
</f:facet>
|
||||
</p:dialog>
|
||||
</h:form>
|
||||
</ui:define>
|
||||
|
||||
</ui:composition>
|
||||
@@ -0,0 +1,179 @@
|
||||
<!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">Planification 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-clock text-orange-500" />
|
||||
<ui:param name="title" value="Planification des Événements" />
|
||||
<ui:param name="description" value="Planifiez et organisez vos événements à l'avance" />
|
||||
<ui:define name="actions">
|
||||
<h:form id="formActionsPlanification">
|
||||
<div class="flex gap-2">
|
||||
<ui:include src="/templates/components/buttons/button-success.xhtml">
|
||||
<ui:param name="value" value="Nouvelle planification" />
|
||||
<ui:param name="icon" value="pi pi-plus" />
|
||||
<ui:param name="onclick" value="PF('dlgNouvellePlanification').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="#{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 mb-3">
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="0" />
|
||||
<ui:param name="label" value="Événements planifiés" />
|
||||
<ui:param name="icon" value="pi pi-calendar-check" />
|
||||
<ui:param name="bgColor" value="blue" />
|
||||
</ui:include>
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="0" />
|
||||
<ui:param name="label" value="À venir (7 jours)" />
|
||||
<ui:param name="icon" value="pi pi-clock" />
|
||||
<ui:param name="bgColor" value="orange" />
|
||||
</ui:include>
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="0" />
|
||||
<ui:param name="label" value="En attente validation" />
|
||||
<ui:param name="icon" value="pi pi-hourglass" />
|
||||
<ui:param name="bgColor" value="yellow" />
|
||||
</ui:include>
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="0" />
|
||||
<ui:param name="label" value="Taux de réalisation" />
|
||||
<ui:param name="icon" value="pi pi-percentage" />
|
||||
<ui:param name="bgColor" value="green" />
|
||||
</ui:include>
|
||||
</div>
|
||||
|
||||
<!-- 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="searchPlanification" value="Rechercher" />
|
||||
<span class="p-input-icon-left w-full">
|
||||
<i class="pi pi-search"></i>
|
||||
<p:inputText id="searchPlanification"
|
||||
placeholder="Titre, description..."
|
||||
styleClass="w-full">
|
||||
<p:ajax event="keyup" delay="500"/>
|
||||
</p:inputText>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 md:col-2">
|
||||
<div class="field">
|
||||
<p:outputLabel for="filtrePeriode" value="Période" />
|
||||
<p:selectOneMenu id="filtrePeriode" styleClass="w-full">
|
||||
<f:selectItem itemLabel="Toutes périodes" itemValue="" />
|
||||
<f:selectItem itemLabel="Cette semaine" itemValue="SEMAINE" />
|
||||
<f:selectItem itemLabel="Ce mois" itemValue="MOIS" />
|
||||
<f:selectItem itemLabel="Ce trimestre" itemValue="TRIMESTRE" />
|
||||
<f:selectItem itemLabel="Cette année" itemValue="ANNEE" />
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 md:col-2">
|
||||
<div class="field">
|
||||
<p:outputLabel for="filtreStatut" value="Statut" />
|
||||
<p:selectOneMenu id="filtreStatut" 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 attente" itemValue="EN_ATTENTE" />
|
||||
</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"
|
||||
styleClass="ui-button-secondary w-full" />
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:decorate>
|
||||
|
||||
<!-- Liste des planifications -->
|
||||
<div class="card">
|
||||
<h:form id="formPlanifications">
|
||||
<h5>Planifications</h5>
|
||||
|
||||
<p:dataTable id="dtPlanifications"
|
||||
value="#{evenementsBean.evenementsFiltres}"
|
||||
var="evenement"
|
||||
paginator="true"
|
||||
rows="20"
|
||||
rowsPerPageTemplate="10,20,50,100"
|
||||
emptyMessage="Aucune planification trouvée"
|
||||
styleClass="table-responsive">
|
||||
|
||||
<p:column headerText="Titre" sortBy="#{evenement.titre}">
|
||||
<span class="font-semibold">#{evenement.titre}</span>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Date prévue">
|
||||
<div>
|
||||
<div class="font-medium">Date à définir</div>
|
||||
<div class="text-sm text-600">Période: À planifier</div>
|
||||
</div>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Statut">
|
||||
<p:tag value="Planifié" severity="info" />
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Priorité">
|
||||
<p:tag value="Normale" severity="info" />
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Actions" style="width: 200px;">
|
||||
<p:commandButton icon="pi pi-pencil"
|
||||
title="Modifier"
|
||||
styleClass="ui-button-rounded ui-button-text ui-button-secondary mr-2" />
|
||||
<p:commandButton icon="pi pi-trash"
|
||||
title="Supprimer"
|
||||
styleClass="ui-button-rounded ui-button-text ui-button-danger" />
|
||||
</p:column>
|
||||
</p:dataTable>
|
||||
</h:form>
|
||||
</div>
|
||||
|
||||
<!-- Message d'information -->
|
||||
<div class="card">
|
||||
<div class="flex align-items-center gap-3 p-3">
|
||||
<i class="pi pi-info-circle text-blue-500 text-2xl"></i>
|
||||
<div>
|
||||
<h6 class="m-0">Fonctionnalité en développement</h6>
|
||||
<p class="m-0 text-600">La planification avancée des événements sera disponible prochainement.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:composition>
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
<!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">Réservations d'É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-ticket text-cyan-500" />
|
||||
<ui:param name="title" value="Réservations d'Événements" />
|
||||
<ui:param name="description" value="Gérez les réservations et inscriptions aux événements" />
|
||||
<ui:define name="actions">
|
||||
<h:form id="formActionsReservations">
|
||||
<div class="flex gap-2">
|
||||
<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 mb-3">
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="0" />
|
||||
<ui:param name="label" value="Réservations totales" />
|
||||
<ui:param name="icon" value="pi pi-ticket" />
|
||||
<ui:param name="bgColor" value="blue" />
|
||||
</ui:include>
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="0" />
|
||||
<ui:param name="label" value="En attente" />
|
||||
<ui:param name="icon" value="pi pi-hourglass" />
|
||||
<ui:param name="bgColor" value="orange" />
|
||||
</ui:include>
|
||||
<ui:include src="/templates/components/cards/stat-card.xhtml">
|
||||
<ui:param name="value" value="0" />
|
||||
<ui:param name="label" value="Confirmées" />
|
||||
<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="0" />
|
||||
<ui:param name="label" value="Annulées" />
|
||||
<ui:param name="icon" value="pi pi-times-circle" />
|
||||
<ui:param name="bgColor" value="red" />
|
||||
</ui:include>
|
||||
</div>
|
||||
|
||||
<!-- 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="searchReservation" value="Rechercher" />
|
||||
<span class="p-input-icon-left w-full">
|
||||
<i class="pi pi-search"></i>
|
||||
<p:inputText id="searchReservation"
|
||||
placeholder="Membre, événement..."
|
||||
styleClass="w-full">
|
||||
<p:ajax event="keyup" delay="500"/>
|
||||
</p:inputText>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 md:col-2">
|
||||
<div class="field">
|
||||
<p:outputLabel for="filtreStatut" value="Statut" />
|
||||
<p:selectOneMenu id="filtreStatut" styleClass="w-full">
|
||||
<f:selectItem itemLabel="Tous les statuts" itemValue="" />
|
||||
<f:selectItem itemLabel="En attente" itemValue="EN_ATTENTE" />
|
||||
<f:selectItem itemLabel="Confirmée" itemValue="CONFIRMEE" />
|
||||
<f:selectItem itemLabel="Annulée" itemValue="ANNULEE" />
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 md:col-2">
|
||||
<div class="field">
|
||||
<p:outputLabel for="filtreEvenement" value="Événement" />
|
||||
<p:selectOneMenu id="filtreEvenement" styleClass="w-full">
|
||||
<f:selectItem itemLabel="Tous événements" itemValue="" />
|
||||
</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"
|
||||
styleClass="ui-button-secondary w-full" />
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:decorate>
|
||||
|
||||
<!-- Liste des réservations -->
|
||||
<div class="card">
|
||||
<h:form id="formReservations">
|
||||
<h5>Réservations</h5>
|
||||
|
||||
<p:dataTable id="dtReservations"
|
||||
value="#{evenementsBean.evenementsFiltres}"
|
||||
var="evenement"
|
||||
paginator="true"
|
||||
rows="20"
|
||||
rowsPerPageTemplate="10,20,50,100"
|
||||
emptyMessage="Aucune réservation trouvée"
|
||||
styleClass="table-responsive">
|
||||
|
||||
<p:column headerText="Membre">
|
||||
<div>
|
||||
<span class="font-semibold">Nom du membre</span>
|
||||
<br/>
|
||||
<span class="text-sm text-600">email@example.com</span>
|
||||
</div>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Événement" sortBy="#{evenement.titre}">
|
||||
<span class="font-semibold">#{evenement.titre}</span>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Date réservation">
|
||||
<span>À définir</span>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Nombre places">
|
||||
<span class="font-medium">1</span>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Montant">
|
||||
<span class="font-medium">0 XOF</span>
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Statut">
|
||||
<p:tag value="En attente" severity="warning" />
|
||||
</p:column>
|
||||
|
||||
<p:column headerText="Actions" style="width: 250px;">
|
||||
<p:commandButton icon="pi pi-check"
|
||||
title="Confirmer"
|
||||
styleClass="ui-button-rounded ui-button-text ui-button-success mr-2" />
|
||||
<p:commandButton icon="pi pi-times"
|
||||
title="Annuler"
|
||||
styleClass="ui-button-rounded ui-button-text ui-button-danger mr-2" />
|
||||
<p:commandButton icon="pi pi-eye"
|
||||
title="Voir détails"
|
||||
styleClass="ui-button-rounded ui-button-text ui-button-secondary" />
|
||||
</p:column>
|
||||
</p:dataTable>
|
||||
</h:form>
|
||||
</div>
|
||||
|
||||
<!-- Message d'information -->
|
||||
<div class="card">
|
||||
<div class="flex align-items-center gap-3 p-3">
|
||||
<i class="pi pi-info-circle text-blue-500 text-2xl"></i>
|
||||
<div>
|
||||
<h6 class="m-0">Fonctionnalité en développement</h6>
|
||||
<p class="m-0 text-600">Le système de réservations complet sera disponible prochainement.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:composition>
|
||||
|
||||
Reference in New Issue
Block a user