Configure Maven repository for unionflow-server-api dependency

This commit is contained in:
dahoud
2025-12-10 01:12:54 +00:00
commit 2910809949
1173 changed files with 435718 additions and 0 deletions

View File

@@ -0,0 +1,558 @@
<!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 Demandes d'Aide - 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-heart text-red-500 mr-2"></i>
Gestion des Demandes d'Aide
</h3>
<p class="text-600 m-0">Traitement et suivi des demandes d'assistance</p>
</div>
<h:form id="formActionsEntete">
<div class="flex gap-2">
<p:commandButton value="Nouvelle demande"
icon="pi pi-plus"
styleClass="ui-button-success"
onclick="PF('dlgNouvelleDemande').show();" />
<p:commandButton value="Import demandes"
icon="pi pi-upload"
styleClass="ui-button-outlined ui-button-info"
onclick="PF('dlgImportDemandes').show();" />
<p:commandButton value="Exporter"
icon="pi pi-download"
styleClass="ui-button-outlined ui-button-secondary"
action="#{demandesAideBean.exporterDemandes}" />
</div>
</h:form>
</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-xl">#{demandesAideBean.statistiques.totalDemandes}</div>
<div class="text-blue-700">Total Demandes</div>
</div>
<div class="bg-blue-500 text-white border-round text-center"
style="width: 2.5rem; height: 2.5rem; line-height: 2.5rem;">
<i class="pi pi-list text-lg"></i>
</div>
</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-xl">#{demandesAideBean.statistiques.demandesEnAttente}</div>
<div class="text-orange-700">En Attente</div>
</div>
<div class="bg-orange-500 text-white border-round text-center"
style="width: 2.5rem; height: 2.5rem; line-height: 2.5rem;">
<i class="pi pi-clock text-lg"></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-xl">#{demandesAideBean.statistiques.demandesApprouvees}</div>
<div class="text-green-700">Approuvées</div>
</div>
<div class="bg-green-500 text-white border-round text-center"
style="width: 2.5rem; height: 2.5rem; line-height: 2.5rem;">
<i class="pi pi-check text-lg"></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-xl">#{demandesAideBean.statistiques.montantTotalAide}</div>
<div class="text-purple-700">Aide Accordée</div>
</div>
<div class="bg-purple-500 text-white border-round text-center"
style="width: 2.5rem; height: 2.5rem; line-height: 2.5rem;">
<i class="pi pi-dollar text-lg"></i>
</div>
</div>
</div>
</div>
</div>
<!-- Demandes prioritaires -->
<div class="card">
<h5>🚨 Demandes Prioritaires</h5>
<div class="grid">
<ui:repeat value="#{demandesAideBean.demandesPrioritaires}" var="demande" varStatus="status">
<div class="col-12 md:col-6 lg:col-4">
<div class="card border-left-3 border-#{demande.urgenceSeverity} hover:surface-50 transition-colors transition-duration-150">
<div class="flex align-items-start justify-content-between mb-3">
<div class="flex align-items-center">
<div class="bg-#{demande.urgenceSeverity} text-white border-round flex align-items-center justify-content-center mr-3"
style="width: 2.5rem; height: 2.5rem;">
<i class="pi #{demande.typeIcon}"></i>
</div>
<div>
<h6 class="text-900 m-0 mb-1">#{demande.demandeur}</h6>
<p:tag value="#{demande.typeLibelle}" severity="#{demande.typeSeverity}" />
</div>
</div>
<p:tag value="#{demande.urgence}" severity="#{demande.urgenceSeverity}" />
</div>
<div class="text-600 mb-3">
<div class="flex align-items-center mb-2">
<i class="pi pi-calendar mr-2"></i>
<span>#{demande.dateDemandeFormatee}</span>
</div>
<div class="flex align-items-center mb-2">
<i class="pi pi-map-marker mr-2"></i>
<span>#{demande.localisation}</span>
</div>
<div class="flex align-items-center">
<i class="pi pi-dollar mr-2"></i>
<span>#{demande.montantDemandeFormatte}</span>
</div>
</div>
<div class="text-sm text-600 mb-3">
#{demande.motif}
</div>
<div class="flex justify-content-between align-items-center">
<span class="text-600 text-sm">#{demande.joursDepuisDemande} jours</span>
<h:form>
<div class="flex gap-1">
<p:commandButton icon="pi pi-eye"
styleClass="ui-button-rounded ui-button-text ui-button-info"
title="Voir détails">
<f:setPropertyActionListener target="#{demandesAideBean.demandeSelectionnee}" value="#{demande}" />
</p:commandButton>
<p:commandButton icon="pi pi-check"
styleClass="ui-button-rounded ui-button-text ui-button-success"
title="Approuver"
action="#{demandesAideBean.approuverDemande}">
<f:setPropertyActionListener target="#{demandesAideBean.demandeSelectionnee}" value="#{demande}" />
</p:commandButton>
</div>
</h:form>
</div>
</div>
</div>
</ui:repeat>
</div>
</div>
<!-- Workflow des demandes -->
<div class="card">
<h5>📋 Workflow de Traitement</h5>
<div class="grid">
<ui:repeat value="#{demandesAideBean.etapesWorkflow}" var="etape" varStatus="status">
<div class="col-12 md:col-2">
<div class="text-center p-3">
<div class="bg-#{etape.couleur} text-white border-round flex align-items-center justify-content-center mx-auto mb-3"
style="width: 3rem; height: 3rem;">
<i class="pi #{etape.icon} text-xl"></i>
</div>
<h6 class="text-900 mb-2">#{etape.libelle}</h6>
<div class="text-2xl font-bold text-#{etape.couleur} mb-1">#{etape.nombre}</div>
<div class="text-600 text-sm">demandes</div>
</div>
<div class="text-center" rendered="#{status.index lt demandesAideBean.etapesWorkflow.size() - 1}">
<i class="pi pi-arrow-right text-300"></i>
</div>
</div>
</ui:repeat>
</div>
</div>
<!-- Filtres et recherche -->
<div class="card">
<h5>Filtres et Recherche</h5>
<h:form id="formFiltres">
<div class="ui-fluid">
<div class="grid">
<div class="col-12 md:col-3">
<div class="field">
<p:outputLabel for="searchDemandeur" value="Demandeur" />
<p:inputText id="searchDemandeur" value="#{demandesAideBean.filtres.demandeur}"
placeholder="Rechercher par nom...">
<p:ajax event="keyup" update="dtDemandes @(.stats-summary)" />
</p:inputText>
</div>
</div>
<div class="col-12 md:col-3">
<div class="field">
<p:outputLabel for="filterType" value="Type d'aide" />
<p:selectOneMenu id="filterType" value="#{demandesAideBean.filtres.type}">
<f:selectItem itemLabel="Tous les types" itemValue="" />
<f:selectItem itemLabel="Aide Médicale" itemValue="AIDE_MEDICALE" />
<f:selectItem itemLabel="Aide Alimentaire" itemValue="AIDE_ALIMENTAIRE" />
<f:selectItem itemLabel="Aide Éducative" itemValue="AIDE_EDUCATIVE" />
<f:selectItem itemLabel="Aide Logement" itemValue="AIDE_LOGEMENT" />
<f:selectItem itemLabel="Aide d'Urgence" itemValue="AIDE_URGENCE" />
<p:ajax update="dtDemandes @(.stats-summary)" />
</p:selectOneMenu>
</div>
</div>
<div class="col-12 md:col-3">
<div class="field">
<p:outputLabel for="filterStatut" value="Statut" />
<p:selectOneMenu id="filterStatut" value="#{demandesAideBean.filtres.statut}">
<f:selectItem itemLabel="Tous les statuts" itemValue="" />
<f:selectItem itemLabel="En attente" itemValue="EN_ATTENTE" />
<f:selectItem itemLabel="En évaluation" itemValue="EN_EVALUATION" />
<f:selectItem itemLabel="Approuvée" itemValue="APPROUVEE" />
<f:selectItem itemLabel="Rejetée" itemValue="REJETEE" />
<f:selectItem itemLabel="En cours" itemValue="EN_COURS" />
<f:selectItem itemLabel="Terminée" itemValue="TERMINEE" />
<p:ajax update="dtDemandes @(.stats-summary)" />
</p:selectOneMenu>
</div>
</div>
<div class="col-12 md:col-3">
<div class="field">
<p:outputLabel for="filterUrgence" value="Urgence" />
<p:selectOneMenu id="filterUrgence" value="#{demandesAideBean.filtres.urgence}">
<f:selectItem itemLabel="Toutes les urgences" itemValue="" />
<f:selectItem itemLabel="Faible" itemValue="FAIBLE" />
<f:selectItem itemLabel="Normale" itemValue="NORMALE" />
<f:selectItem itemLabel="Élevée" itemValue="ELEVEE" />
<f:selectItem itemLabel="Critique" itemValue="CRITIQUE" />
<p:ajax update="dtDemandes @(.stats-summary)" />
</p:selectOneMenu>
</div>
</div>
</div>
<div class="grid">
<div class="col-12 md:col-4">
<div class="field">
<p:outputLabel for="filterDateDebut" value="Date début" />
<p:datePicker id="filterDateDebut" value="#{demandesAideBean.filtres.dateDebut}"
placeholder="Sélectionner une date">
<p:ajax update="dtDemandes @(.stats-summary)" />
</p:datePicker>
</div>
</div>
<div class="col-12 md:col-4">
<div class="field">
<p:outputLabel for="filterDateFin" value="Date fin" />
<p:datePicker id="filterDateFin" value="#{demandesAideBean.filtres.dateFin}"
placeholder="Sélectionner une date">
<p:ajax update="dtDemandes @(.stats-summary)" />
</p:datePicker>
</div>
</div>
<div class="col-12 md:col-4">
<div class="field">
<p:outputLabel for="filterLocalisation" value="Localisation" />
<p:inputText id="filterLocalisation" value="#{demandesAideBean.filtres.localisation}"
placeholder="Filtrer par zone...">
<p:ajax event="keyup" update="dtDemandes @(.stats-summary)" />
</p:inputText>
</div>
</div>
</div>
<div class="flex gap-2 mt-3">
<p:commandButton value="Rechercher"
icon="pi pi-search"
styleClass="ui-button-primary"
action="#{demandesAideBean.rechercher}"
update="dtDemandes @(.stats-summary)" />
<p:commandButton value="Réinitialiser"
icon="pi pi-refresh"
styleClass="ui-button-outlined ui-button-secondary"
action="#{demandesAideBean.reinitialiserFiltres}"
update="@form dtDemandes @(.stats-summary)" />
</div>
</div>
</h:form>
</div>
<!-- Liste des demandes -->
<div class="card">
<div class="flex align-items-center justify-content-between mb-3">
<h5 class="m-0">Demandes d'Aide (#{demandesAideBean.demandesFiltrees.size()})</h5>
<div class="flex align-items-center gap-2">
<h:form id="formActionsGroupees">
<p:commandButton value="Actions groupées"
icon="pi pi-cog"
styleClass="ui-button-outlined ui-button-warning"
onclick="PF('dlgActionsGroupees').show();"
disabled="#{empty demandesAideBean.demandesSelectionnees}" />
</h:form>
<span class="text-600 text-sm stats-summary">
#{demandesAideBean.demandesFiltrees.size()} sur #{demandesAideBean.toutesLesDemandes.size()} demandes
</span>
</div>
</div>
<p:dataTable id="dtDemandes"
value="#{demandesAideBean.demandesFiltrees}"
var="demande"
selection="#{demandesAideBean.demandesSelectionnees}"
rowKey="#{demande.id}"
paginator="true"
rows="15"
paginatorPosition="both"
sortMode="single"
styleClass="p-datatable-sm"
emptyMessage="Aucune demande trouvée">
<p:column selectionMode="multiple" width="40" />
<p:column headerText="Demandeur" sortBy="#{demande.demandeur}" width="200">
<div class="flex align-items-center">
<div class="border-circle bg-primary text-white flex align-items-center justify-content-center mr-3"
style="width: 32px; height: 32px;">
<i class="pi pi-user"></i>
</div>
<div>
<div class="text-900 font-medium">#{demande.demandeur}</div>
<div class="text-600 text-sm">#{demande.telephone}</div>
</div>
</div>
</p:column>
<p:column headerText="Type d'aide" sortBy="#{demande.type}" width="130">
<p:tag value="#{demande.typeLibelle}"
severity="#{demande.typeSeverity}"
icon="pi #{demande.typeIcon}" />
</p:column>
<p:column headerText="Motif" width="250">
<div class="text-900 text-sm">#{demande.motif}</div>
<div class="text-600 text-xs" rendered="#{demande.description != null and demande.description.length() > 0}">
#{demande.description.length() > 50 ? demande.description.substring(0, 50) + '...' : demande.description}
</div>
</p:column>
<p:column headerText="Montant" sortBy="#{demande.montantDemande}" width="100">
<div class="text-900 text-sm text-right font-bold">#{demande.montantDemandeFormatte}</div>
<div class="text-600 text-xs text-right" rendered="#{demande.montantAccorde != null}">
Accordé: #{demande.montantAccordeFormatte}
</div>
</p:column>
<p:column headerText="Date demande" sortBy="#{demande.dateDemande}" width="100">
<div class="text-900 text-sm">#{demande.dateDemandeFormatee}</div>
<div class="text-600 text-xs">#{demande.joursDepuisDemande} jours</div>
</p:column>
<p:column headerText="Localisation" width="120">
<div class="text-900 text-sm">#{demande.localisation}</div>
</p:column>
<p:column headerText="Urgence" sortBy="#{demande.urgence}" width="80">
<p:tag value="#{demande.urgence}"
severity="#{demande.urgenceSeverity}" />
</p:column>
<p:column headerText="Statut" sortBy="#{demande.statut}" width="100">
<p:tag value="#{demande.statutLibelle}"
severity="#{demande.statutSeverity}"
icon="pi #{demande.statutIcon}" />
</p:column>
<p:column headerText="Actions" width="150">
<h:form id="formActions#{demande.id}">
<div class="flex gap-1">
<p:commandButton icon="pi pi-eye"
styleClass="ui-button-rounded ui-button-text ui-button-info"
onclick="PF('dlgDetailsDemande').show();"
title="Voir détails">
<f:setPropertyActionListener target="#{demandesAideBean.demandeSelectionnee}" value="#{demande}" />
</p:commandButton>
<p:commandButton icon="pi pi-check"
styleClass="ui-button-rounded ui-button-text ui-button-success"
title="Approuver"
action="#{demandesAideBean.approuverDemande}"
rendered="#{demande.statut == 'EN_ATTENTE' or demande.statut == 'EN_EVALUATION'}">
<f:setPropertyActionListener target="#{demandesAideBean.demandeSelectionnee}" value="#{demande}" />
</p:commandButton>
<p:commandButton icon="pi pi-times"
styleClass="ui-button-rounded ui-button-text ui-button-danger"
title="Rejeter"
onclick="return confirm('Êtes-vous sûr de vouloir rejeter cette demande ?');"
action="#{demandesAideBean.rejeterDemande}"
rendered="#{demande.statut == 'EN_ATTENTE' or demande.statut == 'EN_EVALUATION'}">
<f:setPropertyActionListener target="#{demandesAideBean.demandeSelectionnee}" value="#{demande}" />
</p:commandButton>
<p:commandButton icon="pi pi-cog"
styleClass="ui-button-rounded ui-button-text ui-button-secondary"
onclick="PF('dlgActionsDemande').show();"
title="Actions">
<f:setPropertyActionListener target="#{demandesAideBean.demandeSelectionnee}" value="#{demande}" />
</p:commandButton>
</div>
</h:form>
</p:column>
</p:dataTable>
</div>
<!-- Dialog Nouvelle Demande -->
<p:dialog header="Créer une Nouvelle Demande" widgetVar="dlgNouvelleDemande" modal="true" width="900">
<h:form id="formNouvelleDemande">
<div class="ui-fluid">
<div class="grid">
<div class="col-12 md:col-6">
<div class="field">
<p:outputLabel for="newDemandeur" value="Nom du demandeur" />
<p:inputText id="newDemandeur" value="#{demandesAideBean.nouvelleDemande.demandeur}" required="true" />
</div>
<div class="field">
<p:outputLabel for="newTelephone" value="Téléphone" />
<p:inputText id="newTelephone" value="#{demandesAideBean.nouvelleDemande.telephone}" required="true" />
</div>
<div class="field">
<p:outputLabel for="newEmail" value="Email" />
<p:inputText id="newEmail" value="#{demandesAideBean.nouvelleDemande.email}" />
</div>
<div class="field">
<p:outputLabel for="newType" value="Type d'aide" />
<p:selectOneMenu id="newType" value="#{demandesAideBean.nouvelleDemande.type}" required="true">
<f:selectItem itemLabel="Sélectionner un type" itemValue="" />
<f:selectItem itemLabel="Aide Médicale" itemValue="AIDE_MEDICALE" />
<f:selectItem itemLabel="Aide Alimentaire" itemValue="AIDE_ALIMENTAIRE" />
<f:selectItem itemLabel="Aide Éducative" itemValue="AIDE_EDUCATIVE" />
<f:selectItem itemLabel="Aide Logement" itemValue="AIDE_LOGEMENT" />
<f:selectItem itemLabel="Aide d'Urgence" itemValue="AIDE_URGENCE" />
</p:selectOneMenu>
</div>
</div>
<div class="col-12 md:col-6">
<div class="field">
<p:outputLabel for="newLocalisation" value="Localisation" />
<p:inputText id="newLocalisation" value="#{demandesAideBean.nouvelleDemande.localisation}" required="true" />
</div>
<div class="field">
<p:outputLabel for="newMontant" value="Montant demandé" />
<p:inputNumber id="newMontant" value="#{demandesAideBean.nouvelleDemande.montantDemande}"
mode="currency" currency="XOF" locale="fr-CI" required="true" />
</div>
<div class="field">
<p:outputLabel for="newUrgence" value="Niveau d'urgence" />
<p:selectOneMenu id="newUrgence" value="#{demandesAideBean.nouvelleDemande.urgence}">
<f:selectItem itemLabel="Normale" itemValue="NORMALE" />
<f:selectItem itemLabel="Faible" itemValue="FAIBLE" />
<f:selectItem itemLabel="Élevée" itemValue="ELEVEE" />
<f:selectItem itemLabel="Critique" itemValue="CRITIQUE" />
</p:selectOneMenu>
</div>
<div class="field">
<p:outputLabel for="newDateLimite" value="Date limite souhaitée" />
<p:datePicker id="newDateLimite" value="#{demandesAideBean.nouvelleDemande.dateLimite}" />
</div>
</div>
<div class="col-12">
<div class="field">
<p:outputLabel for="newMotif" value="Motif de la demande" />
<p:inputText id="newMotif" value="#{demandesAideBean.nouvelleDemande.motif}" required="true" />
</div>
</div>
<div class="col-12">
<div class="field">
<p:outputLabel for="newDescription" value="Description détaillée" />
<p:inputTextarea id="newDescription" value="#{demandesAideBean.nouvelleDemande.description}" rows="4" />
</div>
</div>
</div>
</div>
<div class="flex gap-2 mt-3">
<p:commandButton value="Créer" icon="pi pi-check"
styleClass="ui-button-success"
action="#{demandesAideBean.creerDemande}"
update="@form dtDemandes @(.stats-summary)"
oncomplete="if(!args.validationFailed) PF('dlgNouvelleDemande').hide();" />
<p:commandButton value="Annuler" icon="pi pi-times"
styleClass="ui-button-secondary"
onclick="PF('dlgNouvelleDemande').hide();" type="button" />
</div>
</h:form>
</p:dialog>
<!-- Dialog Actions Demande -->
<p:dialog header="Actions sur la Demande" widgetVar="dlgActionsDemande" modal="true" width="400">
<h:form id="formActionsDemande">
<div class="grid">
<div class="col-12">
<p:commandButton value="Assigner à un responsable"
icon="pi pi-user-plus"
styleClass="ui-button-outlined ui-button-info w-full mb-2"
onclick="PF('dlgAssignerResponsable').show();" />
<p:commandButton value="Programmer une visite"
icon="pi pi-calendar-plus"
styleClass="ui-button-outlined ui-button-success w-full mb-2"
onclick="PF('dlgProgrammerVisite').show();" />
<p:commandButton value="Ajouter des documents"
icon="pi pi-file-plus"
styleClass="ui-button-outlined ui-button-warning w-full mb-2"
onclick="PF('dlgAjouterDocuments').show();" />
<p:commandButton value="Historique du traitement"
icon="pi pi-history"
styleClass="ui-button-outlined ui-button-secondary w-full mb-2"
action="#{demandesAideBean.voirHistorique}" />
<p:commandButton value="Envoyer notification"
icon="pi pi-send"
styleClass="ui-button-outlined ui-button-primary w-full mb-2"
action="#{demandesAideBean.envoyerNotification}" />
<p:commandButton value="Dupliquer la demande"
icon="pi pi-copy"
styleClass="ui-button-outlined ui-button-help w-full"
action="#{demandesAideBean.dupliquerDemande}" />
</div>
</div>
<div class="flex justify-content-end mt-3">
<p:commandButton value="Fermer" icon="pi pi-times"
styleClass="ui-button-secondary"
onclick="PF('dlgActionsDemande').hide();" type="button" />
</div>
</h:form>
</p:dialog>
</ui:define>
</ui:composition>

View File

@@ -0,0 +1,561 @@
<!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 Demandes d'Aide - 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-heart text-red-500 mr-2"></i>
Gestion des Demandes d'Aide
</h3>
<p class="text-600 m-0">Traitement et suivi des demandes d'assistance</p>
</div>
<h:form id="formActionsEntete">
<div class="flex gap-2">
<p:commandButton value="Nouvelle demande"
icon="pi pi-plus"
styleClass="ui-button-success"
onclick="PF('dlgNouvelleDemande').show();" />
<p:commandButton value="Import demandes"
icon="pi pi-upload"
styleClass="ui-button-outlined ui-button-info"
onclick="PF('dlgImportDemandes').show();" />
<p:commandButton value="Exporter"
icon="pi pi-download"
styleClass="ui-button-outlined ui-button-secondary"
action="#{demandesBean.exporterDemandes}" />
</div>
</h:form>
</div>
</div>
</div>
</div>
<!-- Statistiques -->
<div class="grid">
<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">#{demandeBean.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-red-100 border-left-3 border-red-500">
<div class="flex justify-content-between">
<div>
<div class="text-red-900 font-bold text-2xl">#{demandeBean.urgentes}</div>
<div class="text-red-700">Urgentes</div>
</div>
<div class="bg-red-500 text-white border-round text-center"
style="width: 3rem; height: 3rem; line-height: 3rem;">
<i class="pi pi-exclamation-triangle 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">#{demandeBean.traitees}</div>
<div class="text-green-700">Traitées</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-check text-xl"></i>
</div>
</div>
</div>
</div>
<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">#{demandeBean.delaiMoyenTraitement}</div>
<div class="text-blue-700">Délai Moyen (jours)</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-calendar text-xl"></i>
</div>
</div>
</div>
</div>
</div>
<!-- Demandes urgentes et récentes -->
<div class="grid">
<div class="col-12 md:col-6">
<div class="card">
<h5>
<i class="pi pi-exclamation-triangle text-red-500 mr-2"></i>
Demandes Urgentes
</h5>
<ui:repeat value="#{demandeBean.demandesUrgentes}" var="demande" varStatus="status">
<div class="flex align-items-start p-3 mb-2 border-round border-left-3 border-red-500"
style="background: var(--red-50);">
<div class="flex-1">
<div class="flex align-items-center justify-content-between mb-2">
<span class="font-medium text-900">#{demande.objet}</span>
<p:tag value="#{demande.type}" severity="danger" />
</div>
<div class="text-600 mb-2">
<i class="pi pi-user mr-1"></i>
#{demande.demandeur} • #{demande.numeroMembre}
</div>
<div class="text-sm text-600">
Déposée #{demande.dateDepotRelative} • Échéance: #{demande.dateEcheance}
</div>
</div>
<h:form id="formActionsUrgentes">
<div class="flex gap-1 ml-3">
<p:commandButton icon="pi pi-eye"
styleClass="ui-button-rounded ui-button-text ui-button-info"
action="#{demandeBean.voirDemande(demande)}" />
<p:commandButton icon="pi pi-check"
styleClass="ui-button-rounded ui-button-text ui-button-success"
action="#{demandeBean.traiterDemande(demande)}" />
</div>
</h:form>
</div>
</ui:repeat>
<h:form id="formVoirUrgentes">
<p:commandButton value="Voir toutes les urgentes"
icon="pi pi-arrow-right"
styleClass="ui-button-outlined ui-button-danger w-full mt-2"
action="#{demandeBean.filtrerUrgentes}" />
</h:form>
</div>
</div>
<div class="col-12 md:col-6">
<div class="card">
<h5>
<i class="pi pi-clock text-blue-500 mr-2"></i>
Dernières Demandes
</h5>
<ui:repeat value="#{demandeBean.dernieresDemandes}" var="demande" varStatus="status">
<div class="flex align-items-start p-3 mb-2 border-round"
style="background: var(--surface-50);">
<div class="border-round p-2 mr-3 #{demande.typeColorClass}">
<i class="pi #{demande.typeIcon} text-white"></i>
</div>
<div class="flex-1">
<div class="flex align-items-center justify-content-between mb-1">
<span class="font-medium text-900">#{demande.objet}</span>
<small class="text-600">#{demande.dateDepotRelative}</small>
</div>
<div class="text-600 text-sm mb-1">
#{demande.demandeur} • #{demande.numeroMembre}
</div>
<p:tag value="#{demande.statut}" severity="#{demande.statutSeverity}" />
</div>
<h:form id="formActionsRecentes">
<div class="flex gap-1 ml-2">
<p:commandButton icon="pi pi-eye"
styleClass="ui-button-rounded ui-button-text ui-button-sm"
action="#{demandeBean.voirDemande(demande)}" />
</div>
</h:form>
</div>
</ui:repeat>
</div>
</div>
</div>
<!-- Graphiques -->
<div class="grid">
<div class="col-12 md:col-8">
<div class="card">
<h5>Évolution des Demandes</h5>
<div class="surface-100 p-4 border-round text-center"><div class="text-2xl font-bold text-primary mb-2">📊</div><div class="text-600">Graphique temporaire</div></div><!--chart
-->
</div>
</div>
<div class="col-12 md:col-4">
<div class="card">
<h5>Répartition par Type</h5>
<div class="surface-100 p-4 border-round text-center"><div class="text-2xl font-bold text-primary mb-2">📊</div><div class="text-600">Graphique temporaire</div></div><!--chart
-->
</div>
</div>
</div>
<!-- Liste complète des demandes -->
<div class="card">
<h:form id="formDemandes">
<h5>Toutes les Demandes</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="#{demandeBean.searchFilter}">
<p:ajax event="keyup" update="dtDemandes" />
</p:inputText>
</span>
<p:selectOneMenu value="#{demandeBean.statutFilter}">
<f:selectItem itemLabel="Tous les statuts" itemValue="" />
<f:selectItem itemLabel="En attente" itemValue="EN_ATTENTE" />
<f:selectItem itemLabel="En cours" itemValue="EN_COURS" />
<f:selectItem itemLabel="Approuvée" itemValue="APPROUVEE" />
<f:selectItem itemLabel="Rejetée" itemValue="REJETEE" />
<f:selectItem itemLabel="Annulée" itemValue="ANNULEE" />
<p:ajax update="dtDemandes" />
</p:selectOneMenu>
<p:selectOneMenu value="#{demandeBean.typeFilter}">
<f:selectItem itemLabel="Tous les types" itemValue="" />
<f:selectItem itemLabel="Adhésion" itemValue="ADHESION" />
<f:selectItem itemLabel="Aide financière" itemValue="AIDE_FINANCIERE" />
<f:selectItem itemLabel="Certificat" itemValue="CERTIFICAT" />
<f:selectItem itemLabel="Mutation" itemValue="MUTATION" />
<f:selectItem itemLabel="Réclamation" itemValue="RECLAMATION" />
<f:selectItem itemLabel="Autre" itemValue="AUTRE" />
<p:ajax update="dtDemandes" />
</p:selectOneMenu>
<p:selectOneMenu value="#{demandeBean.prioriteFilter}">
<f:selectItem itemLabel="Toutes priorités" itemValue="" />
<f:selectItem itemLabel="Urgente" itemValue="URGENTE" />
<f:selectItem itemLabel="Haute" itemValue="HAUTE" />
<f:selectItem itemLabel="Normale" itemValue="NORMALE" />
<f:selectItem itemLabel="Basse" itemValue="BASSE" />
<p:ajax update="dtDemandes" />
</p:selectOneMenu>
<p:calendar value="#{demandeBean.dateFilter}"
pattern="dd/MM/yyyy" showIcon="true"
placeholder="Filtrer par date">
<p:ajax event="dateSelect" update="dtDemandes" />
</p:calendar>
</div>
</p:toolbarGroup>
<p:toolbarGroup align="right">
<p:commandButton icon="pi pi-refresh"
styleClass="ui-button-outlined ui-button-secondary"
action="#{demandeBean.actualiser}"
update="@form"
title="Actualiser" />
</p:toolbarGroup>
</p:toolbar>
<!-- DataTable -->
<p:dataTable id="dtDemandes"
var="demande"
value="#{demandeBean.demandes}"
paginator="true"
rows="15"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="10,15,25,50"
currentPageReportTemplate="Affichage {startRecord}-{endRecord} sur {totalRecords}"
selection="#{demandeBean.selectedDemandes}"
rowKey="#{demande.id}"
selectionMode="multiple"
styleClass="mt-3">
<p:column selectionMode="multiple" style="width:50px" />
<p:column headerText="Référence" sortBy="#{demande.reference}" style="width:120px">
<h:outputText value="#{demande.reference}" styleClass="font-mono font-bold" />
</p:column>
<p:column headerText="Demandeur" sortBy="#{demande.nomDemandeur}">
<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;">#{demande.initialesDemandeur}</span>
</div>
<div>
<div class="font-medium text-900">#{demande.nomCompletDemandeur}</div>
<small class="text-600">#{demande.numeroMembre} • #{demande.telephoneDemandeur}</small>
</div>
</div>
</p:column>
<p:column headerText="Type" sortBy="#{demande.type}" style="width:140px">
<div class="flex align-items-center">
<div class="border-round p-2 mr-2 #{demande.typeColorClass}">
<i class="pi #{demande.typeIcon} text-white text-sm"></i>
</div>
<span>#{demande.type}</span>
</div>
</p:column>
<p:column headerText="Objet" sortBy="#{demande.objet}">
<h:outputText value="#{demande.objet}" />
</p:column>
<p:column headerText="Priorité" sortBy="#{demande.priorite}" style="width:100px">
<p:tag value="#{demande.priorite}"
severity="#{demande.prioriteSeverity}"
icon="pi #{demande.prioriteIcon}" />
</p:column>
<p:column headerText="Statut" sortBy="#{demande.statut}" style="width:120px">
<p:tag value="#{demande.statut}"
severity="#{demande.statutSeverity}"
icon="pi #{demande.statutIcon}" />
</p:column>
<p:column headerText="Date dépôt" sortBy="#{demande.dateDepot}" style="width:120px">
<div>
<div class="font-medium">#{demande.dateDepot}</div>
<small class="text-600">#{demande.heureDepot}</small>
</div>
</p:column>
<p:column headerText="Échéance" sortBy="#{demande.dateEcheance}" style="width:120px">
<h:outputText value="#{demande.dateEcheance}"
styleClass="#{demande.echeanceClass}">
<f:convertDateTime pattern="dd/MM/yyyy" type="localDate" />
</h:outputText>
</p:column>
<p:column headerText="Assignée à" sortBy="#{demande.assigneA}" style="width:120px">
<h:outputText value="#{demande.assigneA}" rendered="#{demande.assigneA != null}" />
<span class="text-400" rendered="#{demande.assigneA == null}">Non assignée</span>
</p:column>
<p:column headerText="Actions" style="width:200px">
<div class="flex gap-1">
<p:commandButton icon="pi pi-eye"
styleClass="ui-button-rounded ui-button-text ui-button-info"
action="#{demandeBean.voirDemande(demande)}"
title="Voir détails" />
<p:commandButton icon="pi pi-user"
styleClass="ui-button-rounded ui-button-text ui-button-secondary"
action="#{demandeBean.assignerDemande(demande)}"
title="Assigner"
rendered="#{demande.assigneA == null}" />
<p:commandButton icon="pi pi-cog"
styleClass="ui-button-rounded ui-button-text ui-button-warning"
action="#{demandeBean.traiterDemande(demande)}"
title="Traiter"
rendered="#{demande.statut == 'EN_ATTENTE' or demande.statut == 'EN_COURS'}" />
<p:commandButton icon="pi pi-check"
styleClass="ui-button-rounded ui-button-text ui-button-success"
action="#{demandeBean.approuverDemande(demande)}"
title="Approuver"
rendered="#{demande.statut == 'EN_COURS'}" />
<p:commandButton icon="pi pi-times"
styleClass="ui-button-rounded ui-button-text ui-button-danger"
action="#{demandeBean.rejeterDemande(demande)}"
onclick="return confirm('Êtes-vous sûr de vouloir rejeter cette demande ?');"
title="Rejeter"
rendered="#{demande.statut == 'EN_COURS'}" />
<p:commandButton icon="pi pi-file"
styleClass="ui-button-rounded ui-button-text ui-button-secondary"
action="#{demandeBean.voirPiecesJointes(demande)}"
title="Pièces jointes"
rendered="#{demande.hasPiecesJointes}" />
</div>
</p:column>
</p:dataTable>
<!-- Actions groupées -->
<div class="mt-3 flex justify-content-between align-items-center">
<div>
<span class="text-600">#{demandeBean.selectedDemandes.size()} demande(s) sélectionnée(s)</span>
</div>
<div class="flex gap-2">
<p:commandButton value="Assigner en lot"
icon="pi pi-users"
styleClass="ui-button-outlined ui-button-secondary"
onclick="PF('dlgAssignationLot').show();"
disabled="#{empty demandeBean.selectedDemandes}" />
<p:commandButton value="Marquer traitées"
icon="pi pi-check-circle"
styleClass="ui-button-outlined ui-button-success"
action="#{demandeBean.marquerTraitees}"
disabled="#{empty demandeBean.selectedDemandes}" />
<p:commandButton value="Exporter sélection"
icon="pi pi-file-excel"
styleClass="ui-button-outlined ui-button-info"
action="#{demandeBean.exporterSelection}"
disabled="#{empty demandeBean.selectedDemandes}" />
</div>
</div>
</h:form>
</div>
<!-- Dialog Nouvelle Demande -->
<p:dialog header="Nouvelle Demande" widgetVar="dlgNouvelleDemande" modal="true" width="700">
<h:form id="formNouvelleDemande">
<div class="ui-fluid">
<div class="grid">
<div class="col-12 md:col-6">
<div class="field">
<p:outputLabel for="demandeurSelect" value="Demandeur" />
<p:autoComplete id="demandeurSelect"
value="#{demandeBean.membreDemandeur}"
completeMethod="#{demandeBean.rechercherMembres}"
var="membre" itemLabel="#{membre.nomComplet}" itemValue="#{membre}"
converter="membreConverter"
placeholder="Rechercher un membre...">
<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}</small>
</div>
</div>
</p:column>
</p:autoComplete>
</div>
<div class="field">
<p:outputLabel for="typeDemande" value="Type de demande" />
<p:selectOneMenu id="typeDemande" value="#{demandeBean.nouvelleDemande.type}" required="true">
<f:selectItem itemLabel="Sélectionner..." itemValue="" />
<f:selectItem itemLabel="📋 Adhésion" itemValue="ADHESION" />
<f:selectItem itemLabel="💰 Aide financière" itemValue="AIDE_FINANCIERE" />
<f:selectItem itemLabel="📄 Certificat" itemValue="CERTIFICAT" />
<f:selectItem itemLabel="🔄 Mutation" itemValue="MUTATION" />
<f:selectItem itemLabel="⚠️ Réclamation" itemValue="RECLAMATION" />
<f:selectItem itemLabel="🔧 Autre" itemValue="AUTRE" />
</p:selectOneMenu>
</div>
<div class="field">
<p:outputLabel for="prioriteDemande" value="Priorité" />
<p:selectOneMenu id="prioriteDemande" value="#{demandeBean.nouvelleDemande.priorite}">
<f:selectItem itemLabel="🔴 Urgente" itemValue="URGENTE" />
<f:selectItem itemLabel="🟡 Haute" itemValue="HAUTE" />
<f:selectItem itemLabel="🟢 Normale" itemValue="NORMALE" />
<f:selectItem itemLabel="⚪ Basse" itemValue="BASSE" />
</p:selectOneMenu>
</div>
</div>
<div class="col-12 md:col-6">
<div class="field">
<p:outputLabel for="objetDemande" value="Objet" />
<p:inputText id="objetDemande" value="#{demandeBean.nouvelleDemande.objet}"
required="true" placeholder="Résumé de la demande" />
</div>
<div class="field">
<p:outputLabel for="dateEcheanceDemande" value="Date d'échéance" />
<p:calendar id="dateEcheanceDemande" value="#{demandeBean.nouvelleDemande.dateEcheance}"
pattern="dd/MM/yyyy" showIcon="true" />
</div>
<div class="field">
<p:outputLabel for="assignerA" value="Assigner à" />
<p:selectOneMenu id="assignerA" value="#{demandeBean.nouvelleDemande.assigneA}">
<f:selectItem itemLabel="Non assigné" itemValue="" />
<f:selectItems value="#{demandeBean.gestionnairesDisponibles}"
var="gestionnaire"
itemLabel="#{gestionnaire.nom}"
itemValue="#{gestionnaire.id}" />
</p:selectOneMenu>
</div>
</div>
<div class="col-12">
<div class="field">
<p:outputLabel for="descriptionDemande" value="Description détaillée" />
<p:inputTextarea id="descriptionDemande" value="#{demandeBean.nouvelleDemande.description}"
rows="4" placeholder="Décrivez la demande en détail..." />
</div>
<div class="field">
<p:outputLabel for="piecesJointes" value="Pièces jointes" />
<p:fileUpload id="piecesJointes" mode="advanced"
multiple="true" dragDropSupport="true"
uploadLabel="Télécharger" cancelLabel="Annuler" chooseLabel="Sélectionner"
sizeLimit="5000000" fileLimit="5" />
</div>
</div>
</div>
</div>
<div class="flex gap-2 mt-3">
<p:commandButton value="Créer la demande" icon="pi pi-check"
styleClass="ui-button-success"
action="#{demandeBean.creerDemande}"
update="@form :formDemandes"
oncomplete="if(!args.validationFailed) PF('dlgNouvelleDemande').hide();" />
<p:commandButton value="Annuler" icon="pi pi-times"
styleClass="ui-button-secondary"
onclick="PF('dlgNouvelleDemande').hide();" type="button" />
</div>
</h:form>
</p:dialog>
<!-- Dialog Assignation en Lot -->
<p:dialog header="Assignation en Lot" widgetVar="dlgAssignationLot" modal="true" width="400">
<h:form id="formAssignationLot">
<div class="ui-fluid">
<div class="field">
<p:outputLabel for="gestionnaireAssignation" value="Assigner à" />
<p:selectOneMenu id="gestionnaireAssignation" value="#{demandeBean.gestionnaireAssignation}" required="true">
<f:selectItem itemLabel="Sélectionner..." itemValue="" />
<f:selectItems value="#{demandeBean.gestionnairesDisponibles}"
var="gestionnaire"
itemLabel="#{gestionnaire.nom}"
itemValue="#{gestionnaire.id}" />
</p:selectOneMenu>
</div>
<div class="field">
<p:outputLabel for="commentaireAssignation" value="Commentaire" />
<p:inputTextarea id="commentaireAssignation" value="#{demandeBean.commentaireAssignation}"
rows="3" placeholder="Commentaire optionnel..." />
</div>
<div class="surface-50 p-3 border-round">
<div class="font-medium mb-2">Demandes sélectionnées :</div>
<div class="text-600">#{demandeBean.selectedDemandes.size()} demande(s) seront assignées</div>
</div>
</div>
<div class="flex gap-2 mt-3">
<p:commandButton value="Assigner" icon="pi pi-check"
styleClass="ui-button-warning"
action="#{demandeBean.effectuerAssignationLot}"
update="@form :formDemandes"
oncomplete="if(!args.validationFailed) PF('dlgAssignationLot').hide();" />
<p:commandButton value="Annuler" icon="pi pi-times"
styleClass="ui-button-secondary"
onclick="PF('dlgAssignationLot').hide();" type="button" />
</div>
</h:form>
</p:dialog>
</ui:define>
</ui:composition>

View File

@@ -0,0 +1,714 @@
<!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 Demandes d'Aide - UnionFlow</ui:define>
<ui:define name="content">
<div class="ui-fluid">
<!-- En-tête principal avec composant réutilisable -->
<ui:include src="/templates/components/layout/page-header.xhtml">
<ui:param name="icon" value="pi pi-heart text-red-500" />
<ui:param name="title" value="Gestion des Demandes d'Aide" />
<ui:param name="description" value="Traitement et suivi des demandes d'assistance • #{demandeBean.demandes.size()} demandes • #{demandeBean.enAttente} en attente" />
<ui:define name="actions">
<h:form id="formActionsEntete">
<ui:include src="/templates/components/buttons/button-success.xhtml">
<ui:param name="value" value="" />
<ui:param name="icon" value="pi pi-plus" />
<ui:param name="title" value="Nouvelle demande" />
<ui:param name="onclick" value="PF('dlgNouvelleDemande').show();" />
<ui:param name="styleClass" value="ui-button-sm mr-3" />
</ui:include>
<ui:include src="/templates/components/buttons/button-info.xhtml">
<ui:param name="value" value="" />
<ui:param name="icon" value="pi pi-upload" />
<ui:param name="title" value="Import demandes" />
<ui:param name="onclick" value="PF('dlgImportDemandes').show();" />
<ui:param name="outlined" value="true" />
<ui:param name="styleClass" value="ui-button-sm mr-3" />
</ui:include>
<ui:include src="/templates/components/buttons/button-secondary.xhtml">
<ui:param name="value" value="" />
<ui:param name="icon" value="pi pi-download" />
<ui:param name="title" value="Exporter" />
<ui:param name="action" value="#{demandeBean.exporterDemandes}" />
<ui:param name="update" value="none" />
<ui:param name="outlined" value="true" />
<ui:param name="styleClass" value="ui-button-sm" />
</ui:include>
</h:form>
</ui:define>
</ui:include>
<!-- KPIs avec composant réutilisable -->
<div class="formgrid grid">
<!-- KPI 1: En Attente -->
<ui:include src="/templates/components/cards/kpi-card.xhtml">
<ui:param name="title" value="En Attente" />
<ui:param name="value" value="#{demandeBean.enAttente}" />
<ui:param name="icon" value="pi-clock" />
<ui:param name="iconColor" value="orange-600" />
<ui:param name="showGrowth" value="false" />
<ui:param name="showProgress" value="false" />
<ui:param name="colSize" value="col-12 md:col-6 lg:col-3" />
</ui:include>
<!-- KPI 2: Demandes Urgentes -->
<ui:include src="/templates/components/cards/kpi-card.xhtml">
<ui:param name="title" value="Urgentes" />
<ui:param name="value" value="#{demandeBean.urgentes}" />
<ui:param name="icon" value="pi-exclamation-triangle" />
<ui:param name="iconColor" value="red-600" />
<ui:param name="showGrowth" value="false" />
<ui:param name="showProgress" value="false" />
<ui:param name="colSize" value="col-12 md:col-6 lg:col-3" />
</ui:include>
<!-- KPI 3: Traitées -->
<ui:include src="/templates/components/cards/kpi-card.xhtml">
<ui:param name="title" value="Traitées" />
<ui:param name="value" value="#{demandeBean.traitees}" />
<ui:param name="icon" value="pi-check" />
<ui:param name="iconColor" value="green-600" />
<ui:param name="showGrowth" value="false" />
<ui:param name="showProgress" value="false" />
<ui:param name="colSize" value="col-12 md:col-6 lg:col-3" />
</ui:include>
<!-- KPI 4: Délai Moyen -->
<ui:include src="/templates/components/cards/kpi-card.xhtml">
<ui:param name="title" value="Délai Moyen" />
<ui:param name="value" value="#{demandeBean.delaiMoyenTraitement} jours" />
<ui:param name="icon" value="pi-calendar" />
<ui:param name="iconColor" value="blue-600" />
<ui:param name="showGrowth" value="false" />
<ui:param name="showProgress" value="false" />
<ui:param name="colSize" value="col-12 md:col-6 lg:col-3" />
</ui:include>
</div>
<!-- Demandes urgentes et récentes -->
<div class="formgrid grid">
<div class="field col-12 md:col-8">
<div class="card surface-0 hover:surface-100 border-round-lg transition-all transition-duration-200">
<div class="p-3">
<h5 class="text-900 font-bold mb-3">
<i class="pi pi-exclamation-triangle text-red-500 mr-2"></i>
Demandes Urgentes
</h5>
<ui:repeat value="#{demandeBean.demandesUrgentes}" var="demande" varStatus="status">
<div class="surface-100 border-round-lg p-3 mb-3 border-left-3 border-red-500 hover:surface-200 transition-colors transition-duration-150">
<div class="flex align-items-start justify-content-between">
<div class="flex align-items-start">
<div class="flex align-items-center justify-content-center surface-100 border-round-lg mr-3"
style="width: 2.5rem; height: 2.5rem;">
<i class="pi #{demande.typeIcon} text-red-600"></i>
</div>
<div class="flex-1">
<div class="flex align-items-center justify-content-between mb-2">
<h6 class="text-900 font-medium m-0">#{demande.objet}</h6>
<p:tag value="#{demande.priorite}"
severity="#{demande.prioriteSeverity}"
styleClass="text-xs" />
</div>
<div class="text-600 mb-2 text-sm">
<i class="pi pi-user mr-2"></i>
<span class="font-medium">#{demande.demandeur}</span> • #{demande.numeroMembre}
</div>
<div class="flex align-items-center text-xs text-500">
<i class="pi pi-clock mr-1"></i>
<span>Déposée #{demande.dateDepotRelative}</span>
<span class="mx-2"></span>
<i class="pi pi-calendar mr-1"></i>
<span>Échéance: #{demande.dateEcheance}</span>
</div>
</div>
</div>
<h:form>
<div class="flex gap-2">
<ui:include src="/templates/components/buttons/button-info.xhtml">
<ui:param name="value" value="" />
<ui:param name="icon" value="pi pi-eye" />
<ui:param name="title" value="Voir détails" />
<ui:param name="action" value="#{demandeBean.voirDemande(demande)}" />
<ui:param name="update" value="none" />
<ui:param name="styleClass" value="ui-button-rounded ui-button-text ui-button-sm" />
</ui:include>
<ui:include src="/templates/components/buttons/button-success.xhtml">
<ui:param name="value" value="" />
<ui:param name="icon" value="pi pi-check" />
<ui:param name="title" value="Traiter" />
<ui:param name="action" value="#{demandeBean.traiterDemande(demande)}" />
<ui:param name="update" value=":formDemandes:dtDemandes" />
<ui:param name="styleClass" value="ui-button-rounded ui-button-text ui-button-sm" />
</ui:include>
</div>
</h:form>
</div>
</div>
</ui:repeat>
<div class="mt-3">
<h:form>
<ui:include src="/templates/components/buttons/button-secondary.xhtml">
<ui:param name="value" value="Voir toutes les urgentes" />
<ui:param name="icon" value="pi pi-arrow-right" />
<ui:param name="action" value="#{demandeBean.filtrerUrgentes}" />
<ui:param name="update" value="none" />
<ui:param name="outlined" value="true" />
<ui:param name="styleClass" value="ui-button-danger ui-button-sm w-full" />
</ui:include>
</h:form>
</div>
</div>
</div>
</div>
<div class="field col-12 md:col-4">
<div class="card surface-0 hover:surface-100 border-round-lg transition-all transition-duration-200">
<div class="p-3">
<h5 class="text-900 font-bold mb-3">
<i class="pi pi-clock text-blue-500 mr-2"></i>
Dernières Demandes
</h5>
<ui:repeat value="#{demandeBean.dernieresDemandes}" var="demande" varStatus="status">
<div class="surface-100 border-round-lg p-3 mb-3 hover:surface-200 transition-colors transition-duration-150">
<div class="flex align-items-start justify-content-between">
<div class="flex align-items-start">
<div class="flex align-items-center justify-content-center border-round-lg mr-3 #{demande.typeColorClass}"
style="width: 2.5rem; height: 2.5rem;">
<i class="pi #{demande.typeIcon} text-white"></i>
</div>
<div class="flex-1">
<div class="flex align-items-center justify-content-between mb-2">
<h6 class="text-900 font-medium m-0">#{demande.objet}</h6>
<small class="text-500 text-xs">#{demande.dateDepotRelative}</small>
</div>
<div class="text-600 mb-2 text-sm">
<i class="pi pi-user mr-2"></i>
<span class="font-medium">#{demande.demandeur}</span> • #{demande.numeroMembre}
</div>
<p:tag value="#{demande.statut}"
severity="#{demande.statutSeverity}"
icon="pi #{demande.statutIcon}"
styleClass="text-xs" />
</div>
</div>
<h:form>
<div class="flex gap-2">
<ui:include src="/templates/components/buttons/button-info.xhtml">
<ui:param name="value" value="" />
<ui:param name="icon" value="pi pi-eye" />
<ui:param name="title" value="Voir détails" />
<ui:param name="action" value="#{demandeBean.voirDemande(demande)}" />
<ui:param name="update" value="none" />
<ui:param name="styleClass" value="ui-button-rounded ui-button-text ui-button-sm" />
</ui:include>
</div>
</h:form>
</div>
</div>
</ui:repeat>
</div>
</div>
</div>
</div>
<!-- Section Filtres avec composant réutilisable -->
<ui:decorate template="/templates/components/cards/filter-bar.xhtml">
<ui:param name="title" value="Filtres et Recherche" />
<ui:define name="filters">
<h:form id="formFiltres">
<div class="formgrid grid">
<div class="field col-12 md:col-6 lg:col-3">
<ui:include src="/templates/components/forms/form-field-search-text.xhtml">
<ui:param name="id" value="searchFilter" />
<ui:param name="label" value="Rechercher" />
<ui:param name="value" value="#{demandeBean.searchFilter}" />
<ui:param name="placeholder" value="Rechercher..." />
<ui:param name="update" value=":formDemandes:dtDemandes" />
<ui:param name="event" value="keyup" />
</ui:include>
</div>
<div class="field col-12 md:col-6 lg:col-3">
<ui:include src="/templates/components/forms/form-field-select.xhtml">
<ui:param name="id" value="statutFilter" />
<ui:param name="label" value="Statut" />
<ui:param name="value" value="#{demandeBean.statutFilter}" />
<ui:define name="items">
<f:selectItem itemLabel="Tous les statuts" itemValue="" />
<f:selectItem itemLabel="En attente" itemValue="EN_ATTENTE" />
<f:selectItem itemLabel="En cours" itemValue="EN_COURS" />
<f:selectItem itemLabel="Approuvée" itemValue="APPROUVEE" />
<f:selectItem itemLabel="Rejetée" itemValue="REJETEE" />
<f:selectItem itemLabel="Annulée" itemValue="ANNULEE" />
</ui:define>
<ui:define name="ajax">
<p:ajax update=":formDemandes:dtDemandes" />
</ui:define>
</ui:include>
</div>
<div class="field col-12 md:col-6 lg:col-3">
<ui:include src="/templates/components/forms/form-field-select.xhtml">
<ui:param name="id" value="typeFilter" />
<ui:param name="label" value="Type" />
<ui:param name="value" value="#{demandeBean.typeFilter}" />
<ui:define name="items">
<f:selectItem itemLabel="Tous les types" itemValue="" />
<f:selectItem itemLabel="Adhésion" itemValue="ADHESION" />
<f:selectItem itemLabel="Aide financière" itemValue="AIDE_FINANCIERE" />
<f:selectItem itemLabel="Certificat" itemValue="CERTIFICAT" />
<f:selectItem itemLabel="Mutation" itemValue="MUTATION" />
<f:selectItem itemLabel="Réclamation" itemValue="RECLAMATION" />
<f:selectItem itemLabel="Autre" itemValue="AUTRE" />
</ui:define>
<ui:define name="ajax">
<p:ajax update=":formDemandes:dtDemandes" />
</ui:define>
</ui:include>
</div>
<div class="field col-12 md:col-6 lg:col-3">
<ui:include src="/templates/components/forms/form-field-select.xhtml">
<ui:param name="id" value="prioriteFilter" />
<ui:param name="label" value="Priorité" />
<ui:param name="value" value="#{demandeBean.prioriteFilter}" />
<ui:define name="items">
<f:selectItem itemLabel="Toutes priorités" itemValue="" />
<f:selectItem itemLabel="Urgente" itemValue="URGENTE" />
<f:selectItem itemLabel="Haute" itemValue="HAUTE" />
<f:selectItem itemLabel="Normale" itemValue="NORMALE" />
<f:selectItem itemLabel="Basse" itemValue="BASSE" />
</ui:define>
<ui:define name="ajax">
<p:ajax update=":formDemandes:dtDemandes" />
</ui:define>
</ui:include>
</div>
<div class="field col-12 md:col-6 lg:col-4">
<ui:include src="/templates/components/forms/form-field-calendar.xhtml">
<ui:param name="id" value="dateFilter" />
<ui:param name="label" value="Date" />
<ui:param name="value" value="#{demandeBean.dateFilter}" />
<ui:param name="update" value=":formDemandes:dtDemandes" />
</ui:include>
</div>
</div>
</h:form>
</ui:define>
<ui:define name="actions">
<div class="field col-12 md:col-6 lg:col-8">
<h:form id="formActionsFiltres">
<ui:include src="/templates/components/buttons/button-secondary.xhtml">
<ui:param name="value" value="Réinitialiser" />
<ui:param name="icon" value="pi pi-refresh" />
<ui:param name="action" value="#{demandeBean.actualiser}" />
<ui:param name="update" value=":formFiltres :formDemandes:dtDemandes" />
<ui:param name="outlined" value="true" />
<ui:param name="styleClass" value="ui-button-sm" />
</ui:include>
</h:form>
</div>
</ui:define>
</ui:decorate>
<!-- Liste complète des demandes -->
<div class="card surface-0 hover:surface-100 border-round-lg transition-all transition-duration-200">
<div class="p-4">
<h:form id="formDemandes">
<div class="flex align-items-center justify-content-between mb-4">
<h5 class="m-0">
<i class="pi pi-list text-primary mr-2"></i>
Toutes les Demandes
</h5>
<div class="flex gap-3 align-items-center">
<ui:include src="/templates/components/buttons/button-secondary.xhtml">
<ui:param name="value" value="Assigner en lot" />
<ui:param name="icon" value="pi pi-users" />
<ui:param name="onclick" value="PF('dlgAssignationLot').show();" />
<ui:param name="disabled" value="#{empty demandeBean.selectedDemandes}" />
<ui:param name="outlined" value="true" />
<ui:param name="styleClass" value="ui-button-sm" />
</ui:include>
<ui:include src="/templates/components/buttons/button-success.xhtml">
<ui:param name="value" value="Marquer traitées" />
<ui:param name="icon" value="pi pi-check-circle" />
<ui:param name="action" value="#{demandeBean.marquerTraitees}" />
<ui:param name="update" value=":formDemandes:dtDemandes" />
<ui:param name="disabled" value="#{empty demandeBean.selectedDemandes}" />
<ui:param name="outlined" value="true" />
<ui:param name="styleClass" value="ui-button-sm" />
</ui:include>
<ui:include src="/templates/components/buttons/button-info.xhtml">
<ui:param name="value" value="Exporter sélection" />
<ui:param name="icon" value="pi pi-file-excel" />
<ui:param name="action" value="#{demandeBean.exporterSelection}" />
<ui:param name="update" value="none" />
<ui:param name="disabled" value="#{empty demandeBean.selectedDemandes}" />
<ui:param name="outlined" value="true" />
<ui:param name="styleClass" value="ui-button-sm" />
</ui:include>
</div>
</div>
<!-- DataTable -->
<p:dataTable id="dtDemandes"
var="demande"
value="#{demandeBean.demandes}"
paginator="true"
rows="15"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="10,15,25,50"
currentPageReportTemplate="Affichage {startRecord}-{endRecord} sur {totalRecords}"
selection="#{demandeBean.selectedDemandes}"
rowKey="#{demande.id}"
styleClass="p-datatable-sm p-datatable-gridlines p-datatable-striped"
emptyMessage="Aucune demande trouvée">
<p:column selectionMode="multiple" style="width:3rem" exportable="false"/>
<p:column headerText="Référence" sortBy="#{demande.reference}" style="width:120px">
<h:outputText value="#{demande.reference}" styleClass="font-mono font-bold" />
</p:column>
<p:column headerText="Demandeur" sortBy="#{demande.nomDemandeur}">
<div class="flex align-items-center">
<div class="border-circle bg-primary text-white flex align-items-center justify-content-center mr-2 flex-shrink-0"
style="width: 2.5rem; height: 2.5rem; min-width: 2.5rem;">
<span class="text-sm font-semibold">#{demande.initialesDemandeur}</span>
</div>
<div>
<div class="font-medium text-900">#{demande.nomCompletDemandeur}</div>
<small class="text-600">#{demande.numeroMembre} • #{demande.telephoneDemandeur}</small>
</div>
</div>
</p:column>
<p:column headerText="Type" sortBy="#{demande.type}" style="width:140px">
<div class="flex align-items-center">
<div class="border-round-lg flex align-items-center justify-content-center mr-2 flex-shrink-0 #{demande.typeColorClass}"
style="width: 2.5rem; height: 2.5rem; min-width: 2.5rem;">
<i class="pi #{demande.typeIcon} text-white"></i>
</div>
<span class="text-sm font-medium">#{demande.type}</span>
</div>
</p:column>
<p:column headerText="Objet" sortBy="#{demande.objet}">
<h:outputText value="#{demande.objet}" />
</p:column>
<p:column headerText="Priorité" sortBy="#{demande.priorite}" style="width:100px">
<p:tag value="#{demande.priorite}"
severity="#{demande.prioriteSeverity}"
icon="pi #{demande.prioriteIcon}" />
</p:column>
<p:column headerText="Statut" sortBy="#{demande.statut}" style="width:120px">
<p:tag value="#{demande.statut}"
severity="#{demande.statutSeverity}"
icon="pi #{demande.statutIcon}" />
</p:column>
<p:column headerText="Date dépôt" sortBy="#{demande.dateDepot}" style="width:120px">
<div class="text-center">
<div class="font-medium text-900 text-sm">
<h:outputText value="#{demande.dateDepot}">
<f:convertDateTime pattern="dd/MM/yyyy" type="localDate" />
</h:outputText>
</div>
<small class="text-600">#{demande.heureDepot}</small>
</div>
</p:column>
<p:column headerText="Échéance" sortBy="#{demande.dateEcheance}" style="width:120px">
<div class="text-center">
<div class="font-medium text-sm #{demande.echeanceClass}">
<h:outputText value="#{demande.dateEcheance}">
<f:convertDateTime pattern="dd/MM/yyyy" type="localDate" />
</h:outputText>
</div>
<small class="text-500 text-xs">#{demande.dateDepotRelative}</small>
</div>
</p:column>
<p:column headerText="Assignée à" sortBy="#{demande.assigneA}" style="width:120px">
<h:outputText value="#{demande.assigneA}" rendered="#{demande.assigneA != null}" />
<span class="text-400" rendered="#{demande.assigneA == null}">Non assignée</span>
</p:column>
<!-- Colonne Actions -->
<p:column headerText="Actions" style="width:200px" exportable="false">
<div class="flex gap-1 justify-content-center">
<ui:include src="/templates/components/buttons/button-info.xhtml">
<ui:param name="value" value="" />
<ui:param name="icon" value="pi pi-eye" />
<ui:param name="title" value="Voir détails" />
<ui:param name="action" value="#{demandeBean.voirDemande(demande)}" />
<ui:param name="update" value="none" />
<ui:param name="styleClass" value="ui-button-rounded ui-button-text ui-button-sm" />
</ui:include>
<ui:include src="/templates/components/buttons/button-secondary.xhtml">
<ui:param name="value" value="" />
<ui:param name="icon" value="pi pi-user" />
<ui:param name="title" value="Assigner" />
<ui:param name="action" value="#{demandeBean.assignerDemande(demande)}" />
<ui:param name="update" value=":formDemandes:dtDemandes" />
<ui:param name="rendered" value="#{demande.assigneA == null}" />
<ui:param name="styleClass" value="ui-button-rounded ui-button-text ui-button-sm" />
</ui:include>
<ui:include src="/templates/components/buttons/button-warning.xhtml">
<ui:param name="value" value="" />
<ui:param name="icon" value="pi pi-cog" />
<ui:param name="title" value="Traiter" />
<ui:param name="action" value="#{demandeBean.traiterDemande(demande)}" />
<ui:param name="update" value=":formDemandes:dtDemandes" />
<ui:param name="rendered" value="#{demande.statut == 'EN_ATTENTE' or demande.statut == 'EN_COURS'}" />
<ui:param name="styleClass" value="ui-button-rounded ui-button-text ui-button-sm" />
</ui:include>
<ui:include src="/templates/components/buttons/button-success.xhtml">
<ui:param name="value" value="" />
<ui:param name="icon" value="pi pi-check" />
<ui:param name="title" value="Approuver" />
<ui:param name="action" value="#{demandeBean.approuverDemande(demande)}" />
<ui:param name="update" value=":formDemandes:dtDemandes" />
<ui:param name="rendered" value="#{demande.statut == 'EN_COURS'}" />
<ui:param name="styleClass" value="ui-button-rounded ui-button-text ui-button-sm" />
</ui:include>
<ui:include src="/templates/components/buttons/button-secondary.xhtml">
<ui:param name="value" value="" />
<ui:param name="icon" value="pi pi-times" />
<ui:param name="title" value="Rejeter" />
<ui:param name="action" value="#{demandeBean.rejeterDemande(demande)}" />
<ui:param name="onclick" value="return confirm('Êtes-vous sûr de vouloir rejeter cette demande ?');" />
<ui:param name="update" value=":formDemandes:dtDemandes" />
<ui:param name="rendered" value="#{demande.statut == 'EN_COURS'}" />
<ui:param name="styleClass" value="ui-button-rounded ui-button-text ui-button-danger ui-button-sm" />
</ui:include>
<ui:include src="/templates/components/buttons/button-secondary.xhtml">
<ui:param name="value" value="" />
<ui:param name="icon" value="pi pi-file" />
<ui:param name="title" value="Pièces jointes" />
<ui:param name="action" value="#{demandeBean.voirPiecesJointes(demande)}" />
<ui:param name="update" value="none" />
<ui:param name="rendered" value="#{demande.hasPiecesJointes}" />
<ui:param name="styleClass" value="ui-button-rounded ui-button-text ui-button-sm" />
</ui:include>
</div>
</p:column>
</p:dataTable>
</h:form>
</div>
</div>
</div>
<!-- Dialog Nouvelle Demande avec composant réutilisable -->
<ui:decorate template="/templates/components/dialogs/form-dialog.xhtml">
<ui:param name="dialogId" value="dlgNouvelleDemande" />
<ui:param name="header" value="Nouvelle Demande" />
<ui:param name="widgetVar" value="dlgNouvelleDemande" />
<ui:param name="formId" value="formNouvelleDemande" />
<ui:param name="width" value="800" />
<ui:define name="content">
<div class="formgrid grid">
<div class="field col-12 md:col-6">
<label for="demandeurSelect" class="block text-900 font-medium mb-2">Demandeur *</label>
<p:autoComplete id="demandeurSelect"
value="#{demandeBean.membreDemandeur}"
completeMethod="#{demandeBean.rechercherMembres}"
var="membre" itemLabel="#{membre.nomComplet}" itemValue="#{membre}"
converter="membreConverter"
placeholder="Rechercher un membre..."
styleClass="w-full">
<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}</small>
</div>
</div>
</p:column>
</p:autoComplete>
</div>
<div class="field col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-select.xhtml">
<ui:param name="id" value="typeDemande" />
<ui:param name="label" value="Type de demande *" />
<ui:param name="value" value="#{demandeBean.nouvelleDemande.type}" />
<ui:param name="required" value="true" />
<ui:define name="items">
<f:selectItem itemLabel="Sélectionner..." itemValue="" />
<f:selectItem itemLabel="Adhésion" itemValue="ADHESION" />
<f:selectItem itemLabel="Aide financière" itemValue="AIDE_FINANCIERE" />
<f:selectItem itemLabel="Certificat" itemValue="CERTIFICAT" />
<f:selectItem itemLabel="Mutation" itemValue="MUTATION" />
<f:selectItem itemLabel="Réclamation" itemValue="RECLAMATION" />
<f:selectItem itemLabel="Autre" itemValue="AUTRE" />
</ui:define>
</ui:include>
</div>
<div class="field col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-text.xhtml">
<ui:param name="id" value="objetDemande" />
<ui:param name="label" value="Objet *" />
<ui:param name="value" value="#{demandeBean.nouvelleDemande.objet}" />
<ui:param name="required" value="true" />
<ui:param name="placeholder" value="Résumé de la demande" />
</ui:include>
</div>
<div class="field col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-select.xhtml">
<ui:param name="id" value="prioriteDemande" />
<ui:param name="label" value="Priorité" />
<ui:param name="value" value="#{demandeBean.nouvelleDemande.priorite}" />
<ui:define name="items">
<f:selectItem itemLabel="Urgente" itemValue="URGENTE" />
<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="field col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-calendar.xhtml">
<ui:param name="id" value="dateEcheanceDemande" />
<ui:param name="label" value="Date d'échéance" />
<ui:param name="value" value="#{demandeBean.nouvelleDemande.dateEcheance}" />
</ui:include>
</div>
<div class="field col-12 md:col-6">
<ui:include src="/templates/components/forms/form-field-select.xhtml">
<ui:param name="id" value="assignerA" />
<ui:param name="label" value="Assigner à" />
<ui:param name="value" value="#{demandeBean.nouvelleDemande.assigneA}" />
<ui:define name="items">
<f:selectItem itemLabel="Non assigné" itemValue="" />
<f:selectItems value="#{demandeBean.gestionnairesDisponibles}"
var="gestionnaire"
itemLabel="#{gestionnaire.nom}"
itemValue="#{gestionnaire.id}" />
</ui:define>
</ui:include>
</div>
<div class="field col-12">
<ui:include src="/templates/components/forms/form-field-textarea.xhtml">
<ui:param name="id" value="descriptionDemande" />
<ui:param name="label" value="Description détaillée" />
<ui:param name="value" value="#{demandeBean.nouvelleDemande.description}" />
<ui:param name="rows" value="4" />
<ui:param name="placeholder" value="Décrivez la demande en détail..." />
</ui:include>
</div>
<div class="field col-12">
<label for="piecesJointes" class="block text-900 font-medium mb-2">Pièces jointes</label>
<p:fileUpload id="piecesJointes" mode="advanced"
multiple="true" dragDropSupport="true"
uploadLabel="Télécharger" cancelLabel="Annuler" chooseLabel="Sélectionner"
sizeLimit="5000000" fileLimit="5" />
</div>
</div>
</ui:define>
<ui:define name="footer">
<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="onclick" value="PF('dlgNouvelleDemande').hide();" />
<ui:param name="outlined" value="true" />
<ui:param name="styleClass" value="ui-button-sm" />
</ui:include>
<ui:include src="/templates/components/buttons/button-success.xhtml">
<ui:param name="value" value="Créer la demande" />
<ui:param name="icon" value="pi pi-check" />
<ui:param name="action" value="#{demandeBean.creerDemande}" />
<ui:param name="update" value=":formNouvelleDemande :formDemandes" />
<ui:param name="oncomplete" value="if(!args.validationFailed) PF('dlgNouvelleDemande').hide();" />
<ui:param name="styleClass" value="ui-button-sm" />
</ui:include>
</ui:define>
</ui:decorate>
<!-- Dialog Assignation en Lot avec composant réutilisable -->
<ui:decorate template="/templates/components/dialogs/form-dialog.xhtml">
<ui:param name="dialogId" value="dlgAssignationLot" />
<ui:param name="header" value="Assignation en Lot" />
<ui:param name="widgetVar" value="dlgAssignationLot" />
<ui:param name="formId" value="formAssignationLot" />
<ui:param name="width" value="500" />
<ui:define name="content">
<div class="formgrid grid">
<div class="field col-12">
<ui:include src="/templates/components/forms/form-field-select.xhtml">
<ui:param name="id" value="gestionnaireAssignation" />
<ui:param name="label" value="Assigner à *" />
<ui:param name="value" value="#{demandeBean.gestionnaireAssignation}" />
<ui:param name="required" value="true" />
<ui:define name="items">
<f:selectItem itemLabel="Sélectionner..." itemValue="" />
<f:selectItems value="#{demandeBean.gestionnairesDisponibles}"
var="gestionnaire"
itemLabel="#{gestionnaire.nom}"
itemValue="#{gestionnaire.id}" />
</ui:define>
</ui:include>
</div>
<div class="field col-12">
<ui:include src="/templates/components/forms/form-field-textarea.xhtml">
<ui:param name="id" value="commentaireAssignation" />
<ui:param name="label" value="Commentaire" />
<ui:param name="value" value="#{demandeBean.commentaireAssignation}" />
<ui:param name="rows" value="3" />
<ui:param name="placeholder" value="Commentaire optionnel..." />
</ui:include>
</div>
<div class="field col-12">
<div class="surface-50 border-round-lg p-3">
<div class="font-medium mb-2">Demandes sélectionnées :</div>
<div class="text-600">#{demandeBean.selectedDemandes.size()} demande(s) seront assignées</div>
</div>
</div>
</div>
</ui:define>
<ui:define name="footer">
<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="onclick" value="PF('dlgAssignationLot').hide();" />
<ui:param name="outlined" value="true" />
<ui:param name="styleClass" value="ui-button-sm" />
</ui:include>
<ui:include src="/templates/components/buttons/button-warning.xhtml">
<ui:param name="value" value="Assigner" />
<ui:param name="icon" value="pi pi-check" />
<ui:param name="action" value="#{demandeBean.effectuerAssignationLot}" />
<ui:param name="update" value=":formAssignationLot :formDemandes" />
<ui:param name="oncomplete" value="if(!args.validationFailed) PF('dlgAssignationLot').hide();" />
<ui:param name="styleClass" value="ui-button-sm" />
</ui:include>
</ui:define>
</ui:decorate>
</ui:define>
</ui:composition>