517 lines
30 KiB
HTML
517 lines
30 KiB
HTML
<!DOCTYPE html>
|
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
|
xmlns:p="http://primefaces.org/ui"
|
|
template="/templates/main-template.xhtml">
|
|
|
|
<ui:define name="title">Gestion des Participants - UnionFlow</ui:define>
|
|
|
|
<ui:define name="content">
|
|
<!-- En-tête -->
|
|
<div class="grid">
|
|
<div class="col-12">
|
|
<div class="card">
|
|
<div class="flex align-items-center justify-content-between">
|
|
<div>
|
|
<h3 class="mb-2">
|
|
<i class="pi pi-users text-blue-500 mr-2"></i>
|
|
Gestion des Participants
|
|
</h3>
|
|
<p class="text-600 m-0">#{participantBean.evenement.titre} • #{participantBean.dateEvenement} • #{participantBean.nombreInscrits}/#{participantBean.placesMax} places</p>
|
|
</div>
|
|
<div class="flex gap-2">
|
|
<p:commandButton value="Inscrire membre"
|
|
icon="pi pi-user-plus"
|
|
styleClass="ui-button-success"
|
|
onclick="PF('dlgInscrireMembre').show();" />
|
|
<p:commandButton value="Liste d'attente"
|
|
icon="pi pi-clock"
|
|
styleClass="ui-button-outlined ui-button-warning"
|
|
action="#{participantBean.gererListeAttente}" />
|
|
<p:commandButton value="Retour à l'événement"
|
|
icon="pi pi-arrow-left"
|
|
styleClass="ui-button-outlined ui-button-secondary"
|
|
action="#{participantBean.retourEvenement}" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Statistiques -->
|
|
<div class="grid">
|
|
<div class="col-12 md:col-3">
|
|
<div class="card bg-blue-100 border-left-3 border-blue-500">
|
|
<div class="flex justify-content-between">
|
|
<div>
|
|
<div class="text-blue-900 font-bold text-2xl">#{participantBean.nombreInscrits}</div>
|
|
<div class="text-blue-700">Inscrits Confirmés</div>
|
|
</div>
|
|
<div class="bg-blue-500 text-white border-round text-center"
|
|
style="width: 3rem; height: 3rem; line-height: 3rem;">
|
|
<i class="pi pi-check text-xl"></i>
|
|
</div>
|
|
</div>
|
|
<div class="mt-2">
|
|
<p:progressBar value="#{participantBean.tauxRemplissage}"
|
|
labelTemplate=""
|
|
styleClass="h-1rem" />
|
|
<small class="text-600">#{participantBean.tauxRemplissage}% de remplissage</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-12 md:col-3">
|
|
<div class="card bg-orange-100 border-left-3 border-orange-500">
|
|
<div class="flex justify-content-between">
|
|
<div>
|
|
<div class="text-orange-900 font-bold text-2xl">#{participantBean.enAttente}</div>
|
|
<div class="text-orange-700">En Attente</div>
|
|
</div>
|
|
<div class="bg-orange-500 text-white border-round text-center"
|
|
style="width: 3rem; height: 3rem; line-height: 3rem;">
|
|
<i class="pi pi-clock text-xl"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-12 md:col-3">
|
|
<div class="card bg-green-100 border-left-3 border-green-500">
|
|
<div class="flex justify-content-between">
|
|
<div>
|
|
<div class="text-green-900 font-bold text-2xl">#{participantBean.montantCollecte}</div>
|
|
<div class="text-green-700">Collecté</div>
|
|
</div>
|
|
<div class="bg-green-500 text-white border-round text-center"
|
|
style="width: 3rem; height: 3rem; line-height: 3rem;">
|
|
<i class="pi pi-dollar text-xl"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-12 md:col-3">
|
|
<div class="card bg-purple-100 border-left-3 border-purple-500">
|
|
<div class="flex justify-content-between">
|
|
<div>
|
|
<div class="text-purple-900 font-bold text-2xl">#{participantBean.accompagnateurs}</div>
|
|
<div class="text-purple-700">Accompagnateurs</div>
|
|
</div>
|
|
<div class="bg-purple-500 text-white border-round text-center"
|
|
style="width: 3rem; height: 3rem; line-height: 3rem;">
|
|
<i class="pi pi-user-plus text-xl"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Actions rapides -->
|
|
<div class="card">
|
|
<h5>Actions Rapides</h5>
|
|
<div class="grid">
|
|
<div class="col-12 md:col-4">
|
|
<div class="surface-50 p-3 border-round text-center">
|
|
<i class="pi pi-envelope text-blue-500 text-2xl mb-2"></i>
|
|
<div class="font-medium mb-2">Notifications</div>
|
|
<p:commandButton value="Envoyer rappel général"
|
|
icon="pi pi-send"
|
|
styleClass="ui-button-outlined ui-button-info w-full mb-2"
|
|
action="#{participantBean.envoyerRappelGeneral}" />
|
|
<p:commandButton value="Info dernière minute"
|
|
icon="pi pi-exclamation-triangle"
|
|
styleClass="ui-button-outlined ui-button-warning w-full"
|
|
onclick="PF('dlgInfoDernierMinute').show();" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-12 md:col-4">
|
|
<div class="surface-50 p-3 border-round text-center">
|
|
<i class="pi pi-qrcode text-green-500 text-2xl mb-2"></i>
|
|
<div class="font-medium mb-2">Check-in</div>
|
|
<p:commandButton value="Scanner QR Code"
|
|
icon="pi pi-camera"
|
|
styleClass="ui-button-outlined ui-button-success w-full mb-2"
|
|
onclick="PF('dlgScannerQR').show();" />
|
|
<p:commandButton value="Check-in manuel"
|
|
icon="pi pi-check"
|
|
styleClass="ui-button-outlined ui-button-secondary w-full"
|
|
onclick="PF('dlgCheckinManuel').show();" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-12 md:col-4">
|
|
<div class="surface-50 p-3 border-round text-center">
|
|
<i class="pi pi-file text-purple-500 text-2xl mb-2"></i>
|
|
<div class="font-medium mb-2">Rapports</div>
|
|
<p:commandButton value="Feuille d'émargement"
|
|
icon="pi pi-file-pdf"
|
|
styleClass="ui-button-outlined ui-button-danger w-full mb-2"
|
|
action="#{participantBean.genererEmargement}" />
|
|
<p:commandButton value="Liste participants"
|
|
icon="pi pi-file-excel"
|
|
styleClass="ui-button-outlined ui-button-success w-full"
|
|
action="#{participantBean.exporterListe}" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Liste des participants -->
|
|
<div class="card">
|
|
<h:form id="formParticipants">
|
|
<h5>Liste des Participants</h5>
|
|
|
|
<!-- Filtres -->
|
|
<p:toolbar>
|
|
<p:toolbarGroup>
|
|
<div class="flex align-items-center gap-2">
|
|
<span class="p-input-icon-left">
|
|
<i class="pi pi-search"></i>
|
|
<p:inputText placeholder="Rechercher..."
|
|
value="#{participantBean.searchFilter}">
|
|
<p:ajax event="keyup" update="dtParticipants" />
|
|
</p:inputText>
|
|
</span>
|
|
|
|
<p:selectOneMenu value="#{participantBean.statutFilter}">
|
|
<f:selectItem itemLabel="Tous les statuts" itemValue="" />
|
|
<f:selectItem itemLabel="Confirmé" itemValue="CONFIRME" />
|
|
<f:selectItem itemLabel="En attente" itemValue="EN_ATTENTE" />
|
|
<f:selectItem itemLabel="Présent" itemValue="PRESENT" />
|
|
<f:selectItem itemLabel="Absent" itemValue="ABSENT" />
|
|
<f:selectItem itemLabel="Annulé" itemValue="ANNULE" />
|
|
<p:ajax update="dtParticipants" />
|
|
</p:selectOneMenu>
|
|
|
|
<p:selectOneMenu value="#{participantBean.typeFilter}">
|
|
<f:selectItem itemLabel="Tous les types" itemValue="" />
|
|
<f:selectItem itemLabel="Membres" itemValue="MEMBRE" />
|
|
<f:selectItem itemLabel="Accompagnateurs" itemValue="ACCOMPAGNATEUR" />
|
|
<f:selectItem itemLabel="Invités" itemValue="INVITE" />
|
|
<p:ajax update="dtParticipants" />
|
|
</p:selectOneMenu>
|
|
|
|
<p:selectOneMenu value="#{participantBean.paiementFilter}">
|
|
<f:selectItem itemLabel="Tous paiements" itemValue="" />
|
|
<f:selectItem itemLabel="Payé" itemValue="PAYE" />
|
|
<f:selectItem itemLabel="Non payé" itemValue="NON_PAYE" />
|
|
<f:selectItem itemLabel="Gratuit" itemValue="GRATUIT" />
|
|
<p:ajax update="dtParticipants" />
|
|
</p:selectOneMenu>
|
|
</div>
|
|
</p:toolbarGroup>
|
|
|
|
<p:toolbarGroup align="right">
|
|
<p:commandButton icon="pi pi-refresh"
|
|
styleClass="ui-button-outlined ui-button-secondary"
|
|
action="#{participantBean.actualiser}"
|
|
update="@form"
|
|
title="Actualiser" />
|
|
</p:toolbarGroup>
|
|
</p:toolbar>
|
|
|
|
<!-- DataTable -->
|
|
<p:dataTable id="dtParticipants"
|
|
var="participant"
|
|
value="#{participantBean.participants}"
|
|
paginator="true"
|
|
rows="15"
|
|
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
|
|
rowsPerPageTemplate="10,15,25,50"
|
|
currentPageReportTemplate="Affichage {startRecord}-{endRecord} sur {totalRecords}"
|
|
selection="#{participantBean.selectedParticipants}"
|
|
rowKey="#{participant.id}"
|
|
selectionMode="multiple"
|
|
styleClass="mt-3">
|
|
|
|
<p:column selectionMode="multiple" style="width:50px" />
|
|
|
|
<p:column headerText="Participant" sortBy="#{participant.nom}">
|
|
<div class="flex align-items-center">
|
|
<div class="border-circle overflow-hidden mr-3"
|
|
style="width: 40px; height: 40px;">
|
|
<h:graphicImage value="#{participant.photoUrl}"
|
|
style="width: 100%; height: 100%; object-fit: cover;"
|
|
rendered="#{participant.photoUrl != null}" />
|
|
<div class="bg-primary text-white flex align-items-center justify-content-center w-full h-full"
|
|
rendered="#{participant.photoUrl == null}">
|
|
<span style="font-size: 0.9rem;">#{participant.initiales}</span>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="font-medium text-900">#{participant.nomComplet}</div>
|
|
<div class="text-600 text-sm">
|
|
<span>#{participant.numeroMembre}</span>
|
|
<span class="mx-2">•</span>
|
|
<span>#{participant.telephone}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</p:column>
|
|
|
|
<p:column headerText="Type" sortBy="#{participant.type}" style="width:120px">
|
|
<p:tag value="#{participant.type}"
|
|
severity="#{participant.typeSeverity}"
|
|
icon="pi #{participant.typeIcon}" />
|
|
</p:column>
|
|
|
|
<p:column headerText="Statut" sortBy="#{participant.statut}" style="width:120px">
|
|
<p:tag value="#{participant.statut}"
|
|
severity="#{participant.statutSeverity}"
|
|
icon="pi #{participant.statutIcon}" />
|
|
</p:column>
|
|
|
|
<p:column headerText="Inscription" sortBy="#{participant.dateInscription}" style="width:140px">
|
|
<div>
|
|
<div class="font-medium">#{participant.dateInscription}</div>
|
|
<small class="text-600">#{participant.heureInscription}</small>
|
|
</div>
|
|
</p:column>
|
|
|
|
<p:column headerText="Paiement" style="width:120px">
|
|
<div class="text-center">
|
|
<div class="font-bold #{participant.paiementColor}">#{participant.montantPaye}</div>
|
|
<p:tag value="#{participant.statutPaiement}"
|
|
severity="#{participant.paiementSeverity}"
|
|
styleClass="text-xs" />
|
|
</div>
|
|
</p:column>
|
|
|
|
<p:column headerText="Accomp." style="width:80px; text-align: center;">
|
|
<span class="bg-purple-100 text-purple-800 border-round px-2 py-1 text-sm font-medium"
|
|
rendered="#{participant.nombreAccompagnateurs > 0}">
|
|
#{participant.nombreAccompagnateurs}
|
|
</span>
|
|
<span class="text-400" rendered="#{participant.nombreAccompagnateurs == 0}">-</span>
|
|
</p:column>
|
|
|
|
<p:column headerText="Check-in" style="width:100px; text-align: center;">
|
|
<i class="pi pi-check-circle text-green-500 text-xl"
|
|
rendered="#{participant.presente}"
|
|
title="Présent depuis #{participant.heureCheckin}" />
|
|
<i class="pi pi-times-circle text-red-400 text-xl"
|
|
rendered="#{!participant.presente and participant.statut == 'CONFIRME'}"
|
|
title="Pas encore arrivé" />
|
|
<span class="text-400" rendered="#{participant.statut != 'CONFIRME'}">-</span>
|
|
</p:column>
|
|
|
|
<p:column headerText="Actions" style="width:180px">
|
|
<div class="flex gap-1">
|
|
<p:commandButton icon="pi pi-check"
|
|
styleClass="ui-button-rounded ui-button-text ui-button-success"
|
|
action="#{participantBean.confirmerParticipant(participant)}"
|
|
title="Confirmer"
|
|
rendered="#{participant.statut == 'EN_ATTENTE'}" />
|
|
<p:commandButton icon="pi pi-qrcode"
|
|
styleClass="ui-button-rounded ui-button-text ui-button-info"
|
|
action="#{participantBean.checkinParticipant(participant)}"
|
|
title="Check-in"
|
|
rendered="#{!participant.presente and participant.statut == 'CONFIRME'}" />
|
|
<p:commandButton icon="pi pi-undo"
|
|
styleClass="ui-button-rounded ui-button-text ui-button-warning"
|
|
action="#{participantBean.annulerCheckin(participant)}"
|
|
title="Annuler check-in"
|
|
rendered="#{participant.presente}" />
|
|
<p:commandButton icon="pi pi-envelope"
|
|
styleClass="ui-button-rounded ui-button-text ui-button-secondary"
|
|
action="#{participantBean.envoyerNotification(participant)}"
|
|
title="Notifier" />
|
|
<p:commandButton icon="pi pi-pencil"
|
|
styleClass="ui-button-rounded ui-button-text ui-button-warning"
|
|
onclick="#{participantBean.preparerModification(participant)}; PF('dlgModifierParticipant').show();"
|
|
title="Modifier" />
|
|
<p:commandButton icon="pi pi-times"
|
|
styleClass="ui-button-rounded ui-button-text ui-button-danger"
|
|
action="#{participantBean.annulerInscription(participant)}"
|
|
onclick="return confirm('Êtes-vous sûr de vouloir annuler cette inscription ?');"
|
|
title="Annuler inscription" />
|
|
</div>
|
|
</p:column>
|
|
</p:dataTable>
|
|
|
|
<!-- Actions groupées -->
|
|
<div class="mt-3 flex justify-content-between align-items-center">
|
|
<div>
|
|
<span class="text-600">#{participantBean.selectedParticipants.size()} participant(s) sélectionné(s)</span>
|
|
</div>
|
|
<div class="flex gap-2">
|
|
<p:commandButton value="Check-in groupé"
|
|
icon="pi pi-check-circle"
|
|
styleClass="ui-button-outlined ui-button-success"
|
|
action="#{participantBean.checkinGroupe}"
|
|
disabled="#{empty participantBean.selectedParticipants}" />
|
|
<p:commandButton value="Notification groupée"
|
|
icon="pi pi-bell"
|
|
styleClass="ui-button-outlined ui-button-info"
|
|
onclick="PF('dlgNotificationGroupee').show();"
|
|
disabled="#{empty participantBean.selectedParticipants}" />
|
|
<p:commandButton value="Exporter sélection"
|
|
icon="pi pi-file-excel"
|
|
styleClass="ui-button-outlined ui-button-secondary"
|
|
action="#{participantBean.exporterSelection}"
|
|
disabled="#{empty participantBean.selectedParticipants}" />
|
|
</div>
|
|
</div>
|
|
</h:form>
|
|
</div>
|
|
|
|
<!-- Dialog Inscrire Membre -->
|
|
<p:dialog header="Inscrire un Membre" widgetVar="dlgInscrireMembre" modal="true" width="600">
|
|
<h:form id="formInscrireMembre">
|
|
<div class="ui-fluid">
|
|
<div class="field">
|
|
<p:outputLabel for="membreSelect" value="Sélectionner le membre" />
|
|
<p:autoComplete id="membreSelect"
|
|
value="#{participantBean.membreAInscrire}"
|
|
completeMethod="#{participantBean.rechercherMembres}"
|
|
var="membre" itemLabel="#{membre.nomComplet}" itemValue="#{membre}"
|
|
converter="membreConverter"
|
|
placeholder="Taper le nom du membre..."
|
|
scrollHeight="200">
|
|
<p:column>
|
|
<div class="flex align-items-center">
|
|
<div class="border-circle bg-primary text-white flex align-items-center justify-content-center mr-2"
|
|
style="width: 30px; height: 30px;">
|
|
<span style="font-size: 0.8rem;">#{membre.initiales}</span>
|
|
</div>
|
|
<div>
|
|
<div class="font-medium">#{membre.nomComplet}</div>
|
|
<small class="text-600">#{membre.numeroMembre} • #{membre.typeMembre}</small>
|
|
</div>
|
|
</div>
|
|
</p:column>
|
|
</p:autoComplete>
|
|
</div>
|
|
|
|
<div class="field">
|
|
<p:outputLabel for="accompagnateursNb" value="Nombre d'accompagnateurs" />
|
|
<p:inputNumber id="accompagnateursNb"
|
|
value="#{participantBean.nombreAccompagnateursInscription}"
|
|
symbol="" min="0" max="#{participantBean.maxAccompagnateurs}" />
|
|
</div>
|
|
|
|
<div class="field" rendered="#{participantBean.evenement.payant}">
|
|
<p:outputLabel value="Montant à payer" />
|
|
<div class="font-bold text-2xl text-green-500">#{participantBean.montantAPayer} FCFA</div>
|
|
<small class="text-600">#{participantBean.detailTarification}</small>
|
|
</div>
|
|
|
|
<div class="field">
|
|
<p:outputLabel for="commentaire" value="Commentaire" />
|
|
<p:inputTextarea id="commentaire"
|
|
value="#{participantBean.commentaireInscription}"
|
|
rows="3" placeholder="Commentaire optionnel..." />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex gap-2 mt-3">
|
|
<p:commandButton value="Inscrire" icon="pi pi-check"
|
|
styleClass="ui-button-success"
|
|
action="#{participantBean.inscrireMembre}"
|
|
update="@form :formParticipants"
|
|
oncomplete="if(!args.validationFailed) PF('dlgInscrireMembre').hide();" />
|
|
<p:commandButton value="Annuler" icon="pi pi-times"
|
|
styleClass="ui-button-secondary"
|
|
onclick="PF('dlgInscrireMembre').hide();" type="button" />
|
|
</div>
|
|
</h:form>
|
|
</p:dialog>
|
|
|
|
<!-- Dialog Check-in Manuel -->
|
|
<p:dialog header="Check-in Manuel" widgetVar="dlgCheckinManuel" modal="true" width="500">
|
|
<h:form id="formCheckinManuel">
|
|
<div class="ui-fluid">
|
|
<div class="field">
|
|
<p:outputLabel for="participantCheckin" value="Participant" />
|
|
<p:autoComplete id="participantCheckin"
|
|
value="#{participantBean.participantCheckin}"
|
|
completeMethod="#{participantBean.rechercherParticipants}"
|
|
var="p" itemLabel="#{p.nomComplet}" itemValue="#{p}"
|
|
converter="participantConverter"
|
|
placeholder="Taper le nom du participant...">
|
|
<p:column>
|
|
<div class="flex align-items-center">
|
|
<div class="border-circle bg-primary text-white flex align-items-center justify-content-center mr-2"
|
|
style="width: 30px; height: 30px;">
|
|
<span style="font-size: 0.8rem;">#{p.initiales}</span>
|
|
</div>
|
|
<div>
|
|
<div class="font-medium">#{p.nomComplet}</div>
|
|
<small class="text-600">#{p.numeroMembre}</small>
|
|
</div>
|
|
</div>
|
|
</p:column>
|
|
</p:autoComplete>
|
|
</div>
|
|
|
|
<div class="field">
|
|
<p:outputLabel for="heureArrivee" value="Heure d'arrivée" />
|
|
<p:calendar id="heureArrivee"
|
|
value="#{participantBean.heureCheckin}"
|
|
pattern="HH:mm" timeOnly="true" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex gap-2 mt-3">
|
|
<p:commandButton value="Confirmer" icon="pi pi-check"
|
|
styleClass="ui-button-success"
|
|
action="#{participantBean.effectuerCheckinManuel}"
|
|
update="@form :formParticipants"
|
|
oncomplete="if(!args.validationFailed) PF('dlgCheckinManuel').hide();" />
|
|
<p:commandButton value="Annuler" icon="pi pi-times"
|
|
styleClass="ui-button-secondary"
|
|
onclick="PF('dlgCheckinManuel').hide();" type="button" />
|
|
</div>
|
|
</h:form>
|
|
</p:dialog>
|
|
|
|
<!-- Dialog Info Dernière Minute -->
|
|
<p:dialog header="Information Dernière Minute" widgetVar="dlgInfoDernierMinute" modal="true" width="600">
|
|
<h:form id="formInfoDernierMinute">
|
|
<div class="ui-fluid">
|
|
<div class="field">
|
|
<p:outputLabel for="sujetInfo" value="Sujet" />
|
|
<p:inputText id="sujetInfo" value="#{participantBean.sujetInfo}"
|
|
placeholder="Ex: Changement de lieu, horaire..." />
|
|
</div>
|
|
|
|
<div class="field">
|
|
<p:outputLabel for="messageInfo" value="Message" />
|
|
<p:inputTextarea id="messageInfo" value="#{participantBean.messageInfo}"
|
|
rows="4" placeholder="Votre message d'information..." />
|
|
</div>
|
|
|
|
<div class="field">
|
|
<p:outputLabel for="prioriteInfo" value="Priorité" />
|
|
<p:selectOneMenu id="prioriteInfo" value="#{participantBean.prioriteInfo}">
|
|
<f:selectItem itemLabel="🔴 Urgente" itemValue="URGENTE" />
|
|
<f:selectItem itemLabel="🟡 Importante" itemValue="IMPORTANTE" />
|
|
<f:selectItem itemLabel="🟢 Normale" itemValue="NORMALE" />
|
|
</p:selectOneMenu>
|
|
</div>
|
|
|
|
<div class="field">
|
|
<p:selectBooleanCheckbox id="envoyerSMS" value="#{participantBean.envoyerSMS}" />
|
|
<p:outputLabel for="envoyerSMS" value=" Envoyer par SMS (recommandé pour urgent)" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex gap-2 mt-3">
|
|
<p:commandButton value="Envoyer" icon="pi pi-send"
|
|
styleClass="ui-button-warning"
|
|
action="#{participantBean.envoyerInfoDernierMinute}"
|
|
update="@form"
|
|
oncomplete="if(!args.validationFailed) PF('dlgInfoDernierMinute').hide();" />
|
|
<p:commandButton value="Annuler" icon="pi pi-times"
|
|
styleClass="ui-button-secondary"
|
|
onclick="PF('dlgInfoDernierMinute').hide();" type="button" />
|
|
</div>
|
|
</h:form>
|
|
</p:dialog>
|
|
</ui:define>
|
|
|
|
</ui:composition> |