Refactoring

This commit is contained in:
dahoud
2026-03-01 22:00:28 +00:00
parent c0e2c4da45
commit 6b28cf751e
469 changed files with 26866 additions and 14768 deletions

View File

@@ -6,7 +6,7 @@
xmlns:p="http://primefaces.org/ui"
template="/templates/main-template.xhtml">
<ui:param name="page" value="#{demandesAideBean}"/>
<ui:param name="page" value="#{ticketBean}"/>
<ui:define name="title">Mes Tickets Support - UnionFlow</ui:define>
<ui:define name="content">
@@ -30,7 +30,8 @@
<p:commandButton value="Nouveau Ticket"
styleClass="p-button-primary"
icon="pi pi-plus"
onclick="PF('nouveauTicketDialog').show()" />
action="#{ticketBean.ouvrirDialogNouveauTicket}"
update="@form" />
<p:commandButton value="FAQ"
styleClass="p-button-outlined"
icon="pi pi-question-circle" />
@@ -41,28 +42,28 @@
<div class="grid">
<div class="col-12 lg:col-3">
<div class="surface-100 border-round p-4 text-center" style="min-height: 9rem">
<div class="text-2xl font-bold text-blue-500 mb-2">12</div>
<div class="text-2xl font-bold text-blue-500 mb-2">#{ticketBean.totalTickets}</div>
<div class="text-900 font-semibold mb-1">Tickets Créés</div>
<div class="text-600 text-sm">Au total</div>
</div>
</div>
<div class="col-12 lg:col-3">
<div class="surface-100 border-round p-4 text-center" style="min-height: 9rem">
<div class="text-2xl font-bold text-orange-500 mb-2">3</div>
<div class="text-2xl font-bold text-orange-500 mb-2">#{ticketBean.ticketsEnAttente}</div>
<div class="text-900 font-semibold mb-1">En Attente</div>
<div class="text-600 text-sm">Réponse support</div>
</div>
</div>
<div class="col-12 lg:col-3">
<div class="surface-100 border-round p-4 text-center" style="min-height: 9rem">
<div class="text-2xl font-bold text-green-500 mb-2">8</div>
<div class="text-2xl font-bold text-green-500 mb-2">#{ticketBean.ticketsResolus}</div>
<div class="text-900 font-semibold mb-1">Résolus</div>
<div class="text-600 text-sm">Avec succès</div>
</div>
</div>
<div class="col-12 lg:col-3">
<div class="surface-100 border-round p-4 text-center" style="min-height: 9rem">
<div class="text-2xl font-bold text-red-500 mb-2">1</div>
<div class="text-2xl font-bold text-red-500 mb-2">#{ticketBean.ticketsFermes}</div>
<div class="text-900 font-semibold mb-1">Fermé</div>
<div class="text-600 text-sm">Sans résolution</div>
</div>
@@ -130,191 +131,84 @@
Historique de vos Tickets
</h4>
<!-- Ticket 1 - En cours -->
<div class="surface-100 hover:surface-200 border-round p-4 mb-3 cursor-pointer transition-duration-200">
<ui:repeat value="#{ticketBean.tickets}" var="ticket">
<!-- Ticket dynamique -->
<div class="surface-100 hover:surface-200 border-round p-4 mb-3 cursor-pointer transition-duration-200 #{ticket.statut == 'FERME' ? 'opacity-70' : ''}">
<div class="flex align-items-center justify-content-between mb-3">
<div class="flex align-items-center gap-3">
<div class="w-3rem h-3rem border-circle bg-orange-100 flex align-items-center justify-content-center">
<i class="pi pi-clock text-orange-600 text-xl"></i>
<div class="w-3rem h-3rem border-circle #{ticket.statut == 'RESOLU' ? 'bg-green-100' : (ticket.statut == 'EN_ATTENTE' ? 'bg-blue-100' : (ticket.statut == 'FERME' ? 'bg-red-100' : 'bg-orange-100'))} flex align-items-center justify-content-center">
<i class="pi #{ticket.statut == 'RESOLU' ? 'pi-check' : (ticket.statut == 'EN_ATTENTE' ? 'pi-pause' : (ticket.statut == 'FERME' ? 'pi-times' : 'pi-clock'))} #{ticket.statut == 'RESOLU' ? 'text-green-600' : (ticket.statut == 'EN_ATTENTE' ? 'text-blue-600' : (ticket.statut == 'FERME' ? 'text-red-600' : 'text-orange-600'))} text-xl"></i>
</div>
<div>
<h6 class="text-900 font-semibold mb-1">#TK-2024-0157 - Problème d'export Excel</h6>
<h6 class="text-900 font-semibold mb-1">#{ticket.numeroTicket} - #{ticket.sujet}</h6>
<div class="flex align-items-center gap-2 mb-1">
<p:tag value="EN COURS" severity="warning" styleClass="text-xs" />
<p:tag value="HAUTE" severity="danger" styleClass="text-xs" />
<p:tag value="TECHNIQUE" severity="info" styleClass="text-xs" />
<p:tag value="#{ticket.statut}"
severity="#{ticket.statut == 'RESOLU' ? 'success' : (ticket.statut == 'FERME' ? 'danger' : (ticket.statut == 'EN_ATTENTE' ? 'info' : 'warning'))}"
styleClass="text-xs" />
<p:tag value="#{ticket.priorite}"
severity="#{ticket.priorite == 'URGENTE' or ticket.priorite == 'HAUTE' ? 'danger' : (ticket.priorite == 'NORMALE' ? 'success' : 'secondary')}"
styleClass="text-xs" />
<p:tag value="#{ticket.categorie}"
severity="info"
styleClass="text-xs" />
</div>
<p class="text-600 text-sm mb-0">Créé le 15 janvier 2024 • Dernière réponse il y a 2h</p>
<p class="text-600 text-sm mb-0">
Créé le #{ticket.dateCreation != null ? ticket.dateCreation : 'N/A'}
#{ticket.dateDerniereReponse != null ? ' • Dernière réponse ' + ticket.dateDerniereReponse : ''}
</p>
</div>
</div>
<div class="text-right">
<div class="text-600 text-sm mb-2">Agent: Marie Dubois</div>
#{ticket.agentNom != null ? '<div class="text-600 text-sm mb-2">Agent: ' + ticket.agentNom + '</div>' : ''}
<p:commandButton value="Voir Détails"
styleClass="p-button-outlined p-button-sm"
icon="pi pi-eye" />
icon="pi pi-eye"
action="#{ticketBean.voirDetails}"
update="@form">
<f:setPropertyActionListener target="#{ticketBean.ticketSelectionne}" value="#{ticket}" />
</p:commandButton>
</div>
</div>
<p class="text-700 line-height-3 mb-3">
Impossible d'exporter la liste des membres en format Excel. Le fichier généré est corrompu
et ne s'ouvre pas dans Excel. Cela concerne tous les exports depuis la version 2.1.
#{ticket.description != null ? ticket.description : 'Aucune description'}
</p>
#{ticket.resolution != null ? '<div class="surface-green-50 border-left-3 border-green-500 p-3 mb-3"><p class="text-green-700 text-sm mb-0"><i class="pi pi-check-circle mr-2"></i><strong>Résolution:</strong> ' + ticket.resolution + '</p></div>' : ''}
<div class="flex align-items-center justify-content-between">
<div class="flex align-items-center gap-2">
<i class="pi pi-comments text-blue-500"></i>
<span class="text-600 text-sm">5 messages</span>
<i class="pi pi-paperclip text-600 ml-3"></i>
<span class="text-600 text-sm">2 fichiers</span>
</div>
<div class="flex align-items-center gap-2">
<i class="pi pi-clock text-600"></i>
<span class="text-600 text-sm">SLA: 4h restantes</span>
</div>
</div>
</div>
<!-- Ticket 2 - En attente -->
<div class="surface-100 hover:surface-200 border-round p-4 mb-3 cursor-pointer transition-duration-200">
<div class="flex align-items-center justify-content-between mb-3">
<div class="flex align-items-center gap-3">
<div class="w-3rem h-3rem border-circle bg-blue-100 flex align-items-center justify-content-center">
<i class="pi pi-pause text-blue-600 text-xl"></i>
</div>
<div>
<h6 class="text-900 font-semibold mb-1">#TK-2024-0143 - Demande de formation personnalisée</h6>
<div class="flex align-items-center gap-2 mb-1">
<p:tag value="EN ATTENTE" severity="info" styleClass="text-xs" />
<p:tag value="NORMALE" severity="success" styleClass="text-xs" />
<p:tag value="FONCTIONNALITÉ" severity="help" styleClass="text-xs" />
</div>
<p class="text-600 text-sm mb-0">Créé le 12 janvier 2024 • En attente de votre réponse</p>
</div>
</div>
<div class="text-right">
<div class="text-600 text-sm mb-2">Agent: Thomas Martin</div>
<p:commandButton value="Répondre"
styleClass="p-button-primary p-button-sm"
icon="pi pi-reply" />
</div>
</div>
<p class="text-700 line-height-3 mb-3">
Souhaitons organiser une formation sur mesure pour notre équipe administrative.
Besoin de devis pour 15 personnes sur 2 jours.
</p>
<div class="surface-blue-50 border-left-3 border-blue-500 p-3 mb-3">
<p class="text-blue-700 text-sm mb-0">
<i class="pi pi-info-circle mr-2"></i>
<strong>Action requise:</strong> Merci de préciser vos disponibilités pour les dates proposées.
</p>
</div>
<div class="flex align-items-center justify-content-between">
<div class="flex align-items-center gap-2">
<i class="pi pi-comments text-blue-500"></i>
<span class="text-600 text-sm">3 messages</span>
</div>
<div class="flex align-items-center gap-2">
<i class="pi pi-exclamation-triangle text-orange-500"></i>
<span class="text-orange-600 text-sm">Réponse attendue depuis 3 jours</span>
</div>
</div>
</div>
<!-- Ticket 3 - Résolu -->
<div class="surface-100 hover:surface-200 border-round p-4 mb-3 cursor-pointer transition-duration-200">
<div class="flex align-items-center justify-content-between mb-3">
<div class="flex align-items-center gap-3">
<div class="w-3rem h-3rem border-circle bg-green-100 flex align-items-center justify-content-center">
<i class="pi pi-check text-green-600 text-xl"></i>
</div>
<div>
<h6 class="text-900 font-semibold mb-1">#TK-2024-0128 - Problème de connexion mobile</h6>
<div class="flex align-items-center gap-2 mb-1">
<p:tag value="RÉSOLU" severity="success" styleClass="text-xs" />
<p:tag value="BASSE" severity="secondary" styleClass="text-xs" />
<p:tag value="TECHNIQUE" severity="info" styleClass="text-xs" />
</div>
<p class="text-600 text-sm mb-0">Créé le 8 janvier 2024 • Résolu le 10 janvier 2024</p>
</div>
</div>
<div class="text-right">
<div class="text-600 text-sm mb-2">Agent: Sophie Leroy</div>
<div class="flex gap-2">
<p:commandButton value="Noter"
styleClass="p-button-outlined p-button-sm"
icon="pi pi-star" />
<p:commandButton value="Détails"
styleClass="p-button-outlined p-button-sm"
icon="pi pi-eye" />
</div>
</div>
</div>
<p class="text-700 line-height-3 mb-3">
Application ne se charge pas sur smartphone Android. Écran blanc après connexion.
</p>
<div class="surface-green-50 border-left-3 border-green-500 p-3 mb-3">
<p class="text-green-700 text-sm mb-0">
<i class="pi pi-check-circle mr-2"></i>
<strong>Résolution:</strong> Problème résolu en vidant le cache de l'application mobile.
</p>
</div>
<div class="flex align-items-center justify-content-between">
<div class="flex align-items-center gap-2">
<i class="pi pi-comments text-blue-500"></i>
<span class="text-600 text-sm">6 messages</span>
<i class="pi pi-clock text-600 ml-3"></i>
<span class="text-600 text-sm">Résolu en 2 jours</span>
</div>
<div class="flex align-items-center gap-1">
<i class="pi pi-star-fill text-yellow-400"></i>
<span class="text-600 text-sm">Note: 5/5</span>
</div>
</div>
</div>
<!-- Ticket 4 - Fermé -->
<div class="surface-100 hover:surface-200 border-round p-4 cursor-pointer transition-duration-200 opacity-70">
<div class="flex align-items-center justify-content-between mb-3">
<div class="flex align-items-center gap-3">
<div class="w-3rem h-3rem border-circle bg-red-100 flex align-items-center justify-content-center">
<i class="pi pi-times text-red-600 text-xl"></i>
</div>
<div>
<h6 class="text-900 font-semibold mb-1">#TK-2024-0095 - Demande modification base</h6>
<div class="flex align-items-center gap-2 mb-1">
<p:tag value="FERMÉ" severity="danger" styleClass="text-xs" />
<p:tag value="HAUTE" severity="danger" styleClass="text-xs" />
<p:tag value="FONCTIONNALITÉ" severity="help" styleClass="text-xs" />
</div>
<p class="text-600 text-sm mb-0">Créé le 28 décembre 2023 • Fermé le 5 janvier 2024</p>
</div>
</div>
<div class="text-right">
<div class="text-600 text-sm mb-2">Agent: Marc Durand</div>
<p:commandButton value="Rouvrir"
styleClass="p-button-outlined p-button-sm"
icon="pi pi-replay" />
</div>
</div>
<p class="text-700 line-height-3 mb-3">
Demande de modification des champs de la base de données membres pour ajouter
des informations métier spécifiques.
</p>
<div class="surface-red-50 border-left-3 border-red-500 p-3 mb-3">
<p class="text-red-700 text-sm mb-0">
<i class="pi pi-times-circle mr-2"></i>
<strong>Fermé:</strong> Demande non compatible avec l'architecture actuelle.
</p>
</div>
<div class="flex align-items-center justify-content-between">
<div class="flex align-items-center gap-2">
<i class="pi pi-comments text-blue-500"></i>
<span class="text-600 text-sm">8 messages</span>
</div>
<div class="flex align-items-center gap-2">
<i class="pi pi-ban text-red-500"></i>
<span class="text-red-600 text-sm">Non résolu</span>
<span class="text-600 text-sm">#{ticket.nbMessages != null ? ticket.nbMessages : 0} message#{ticket.nbMessages != null and ticket.nbMessages > 1 ? 's' : ''}</span>
#{ticket.nbFichiers != null and ticket.nbFichiers > 0 ? '<i class="pi pi-paperclip text-600 ml-3"></i><span class="text-600 text-sm">' + ticket.nbFichiers + ' fichier' + (ticket.nbFichiers > 1 ? 's' : '') + '</span>' : ''}
</div>
#{ticket.noteSatisfaction != null ? '<div class="flex align-items-center gap-1"><i class="pi pi-star-fill text-yellow-400"></i><span class="text-600 text-sm">Note: ' + ticket.noteSatisfaction + '/5</span></div>' : ''}
</div>
</div>
</ui:repeat>
<p:dataTable value="#{ticketBean.tickets}"
var="ticket"
emptyMessage="Aucun ticket trouvé"
rendered="#{empty ticketBean.tickets}">
<p:column headerText="Numéro">#{ticket.numeroTicket}</p:column>
<p:column headerText="Sujet">#{ticket.sujet}</p:column>
<p:column headerText="Statut">
<p:tag value="#{ticket.statut}"
severity="#{ticket.statut == 'RESOLU' ? 'success' : (ticket.statut == 'FERME' ? 'danger' : (ticket.statut == 'EN_ATTENTE' ? 'info' : 'warning'))}" />
</p:column>
<p:column headerText="Priorité">
<p:tag value="#{ticket.priorite}"
severity="#{ticket.priorite == 'URGENTE' or ticket.priorite == 'HAUTE' ? 'danger' : (ticket.priorite == 'NORMALE' ? 'success' : 'secondary')}" />
</p:column>
<p:column headerText="Date Création">#{ticket.dateCreation}</p:column>
<p:column headerText="Actions">
<p:commandButton icon="pi pi-eye"
styleClass="p-button-text p-button-sm"
title="Voir détails"
action="#{ticketBean.voirDetails}"
update="@form">
<f:setPropertyActionListener target="#{ticketBean.ticketSelectionne}" value="#{ticket}" />
</p:commandButton>
</p:column>
</p:dataTable>
</div>
</div>
</div>
@@ -371,7 +265,8 @@
header="Créer un Nouveau Ticket"
modal="true"
width="800"
styleClass="surface-0">
styleClass="surface-0"
visible="#{ticketBean.afficherDialogNouveauTicket}">
<h:form id="nouveauTicketForm">
<div class="ui-fluid">
<div class="formgrid grid">
@@ -421,11 +316,14 @@
<div class="flex justify-content-end gap-2 mt-4">
<p:commandButton value="Annuler"
styleClass="p-button-outlined"
onclick="PF('nouveauTicketDialog').hide()"
action="#{ticketBean.fermerDialogNouveauTicket}"
update="@form"
type="button" />
<p:commandButton value="Créer le Ticket"
styleClass="p-button-primary"
icon="pi pi-send" />
icon="pi pi-send"
action="#{ticketBean.creerTicket}"
update="@form" />
</div>
</div>
</h:form>