Files
btpxpress-frontend/target/classes/META-INF/resources/clients/details.xhtml
dahoud b749f2df37 feat: Migration complète vers Quarkus PrimeFaces Freya
Migration du frontend React/Next.js vers Quarkus + PrimeFaces Freya 5.0.0

Dashboard:
- Extension de BtpXpressApiClient avec tous les endpoints dashboard
- Création de DashboardService pour récupérer les données API
- Refactorisation DashboardView : uniquement données réelles de l'API
- Restructuration dashboard.xhtml avec tous les aspects métiers BTP
- Suppression complète de toutes les données fictives

Topbar:
- Amélioration du menu profil utilisateur avec header professionnel
- Ajout UserSessionBean pour gérer les informations utilisateur
- Styles CSS personnalisés pour une disposition raffinée
- Badges de notifications conditionnels

Configuration:
- Intégration du thème Freya 5.0.0-jakarta
- Configuration OIDC pour Keycloak (security.lions.dev)
- Gestion des erreurs HTTP 431 (headers size)
- Support du format Fcfa avec séparateurs d'espaces

Converters:
- Création de FcfaConverter pour formater les montants en Fcfa avec espaces (x xxx xxx format)

Code Quality:
- Code entièrement documenté en français avec Javadoc exemplaire
- Respect du principe Java 'Write once, use many times'
- Logging complet pour le débogage
- Gestion d'erreurs robuste
2025-11-01 19:55:30 +00:00

86 lines
4.9 KiB
HTML

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/WEB-INF/template.xhtml">
<ui:define name="title">Détails du client - BTP Xpress</ui:define>
<f:metadata>
<f:viewParam name="id" value="#{clientsView.clientId}"/>
<f:event type="preRenderView" listener="#{clientsView.loadClientById()}"/>
</f:metadata>
<ui:define name="content">
<div class="layout-dashboard">
<div class="grid">
<div class="col-12">
<div class="card">
<div class="flex align-items-center justify-content-between mb-3">
<h1>Détails du client</h1>
<p:commandButton value="Retour" icon="pi pi-arrow-left"
outcome="/clients"
styleClass="ui-button-secondary"/>
</div>
<h:form id="detailsClientForm">
<div class="grid" rendered="#{not empty clientsView.selectedItem}">
<div class="col-12">
<p:panel header="Informations générales">
<div class="grid">
<div class="col-12 md:col-6">
<p><strong>Raison sociale :</strong> #{clientsView.selectedItem.raisonSociale}</p>
</div>
<div class="col-12 md:col-6">
<p><strong>Nom du contact :</strong> #{clientsView.selectedItem.nomContact}</p>
</div>
<div class="col-12 md:col-6">
<p><strong>Email :</strong> #{clientsView.selectedItem.email}</p>
</div>
<div class="col-12 md:col-6">
<p><strong>Téléphone :</strong> #{clientsView.selectedItem.telephone}</p>
</div>
</div>
</p:panel>
</div>
<div class="col-12 md:col-6">
<p:panel header="Adresse">
<p><strong>Adresse :</strong> #{clientsView.selectedItem.adresse}</p>
<p><strong>Ville :</strong> #{clientsView.selectedItem.ville}</p>
<p><strong>Code postal :</strong> #{clientsView.selectedItem.codePostal}</p>
<p><strong>Pays :</strong> #{clientsView.selectedItem.pays}</p>
</p:panel>
</div>
<div class="col-12 md:col-6">
<p:panel header="Statistiques">
<p><strong>Nombre de chantiers :</strong>
<p:tag value="#{clientsView.selectedItem.nombreChantiers}" severity="info"/>
</p>
<p><strong>Chiffre d'affaires total :</strong>
<h:outputText value="#{clientsView.selectedItem.chiffreAffairesTotal}">
<f:converter converterId="fcfaConverter"/>
</h:outputText>
<h:outputText value=" Fcfa"/>
</p>
<p><strong>Date de création :</strong>
<h:outputText value="#{clientsView.selectedItem.dateCreation}">
<f:convertDateTime pattern="dd/MM/yyyy HH:mm"/>
</h:outputText>
</p>
</p:panel>
</div>
</div>
<p:message rendered="#{empty clientsView.selectedItem}" severity="warn"
summary="Client introuvable"/>
</h:form>
</div>
</div>
</div>
</div>
</ui:define>
</ui:composition>