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
This commit is contained in:
103
target/classes/META-INF/resources/chantiers.xhtml
Normal file
103
target/classes/META-INF/resources/chantiers.xhtml
Normal file
@@ -0,0 +1,103 @@
|
||||
<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">Chantiers - BTP Xpress</ui:define>
|
||||
|
||||
<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>Gestion des Chantiers</h1>
|
||||
<p:commandButton value="Nouveau chantier" icon="pi pi-plus"
|
||||
action="#{chantiersView.createNew()}"
|
||||
styleClass="ui-button-primary"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<ui:include src="/WEB-INF/components/liste-filters.xhtml">
|
||||
<ui:param name="formId" value="filtresForm"/>
|
||||
<ui:param name="viewBean" value="#{chantiersView}"/>
|
||||
<ui:param name="tableId" value="chantiersTable"/>
|
||||
<ui:define name="filter-fields">
|
||||
<div class="grid">
|
||||
<div class="col-12 md:col-4">
|
||||
<h:outputLabel for="filtreNom" value="Nom du chantier"/>
|
||||
<p:inputText id="filtreNom" value="#{chantiersView.filtreNom}"
|
||||
placeholder="Rechercher par nom..." style="width: 100%;"/>
|
||||
</div>
|
||||
<div class="col-12 md:col-4">
|
||||
<h:outputLabel for="filtreClient" value="Client"/>
|
||||
<p:inputText id="filtreClient" value="#{chantiersView.filtreClient}"
|
||||
placeholder="Rechercher par client..." style="width: 100%;"/>
|
||||
</div>
|
||||
<div class="col-12 md:col-4">
|
||||
<h:outputLabel for="filtreStatut" value="Statut"/>
|
||||
<p:selectOneMenu id="filtreStatut" value="#{chantiersView.filtreStatut}" style="width: 100%;">
|
||||
<f:selectItem itemLabel="Tous" itemValue="TOUS"/>
|
||||
<f:selectItem itemLabel="En cours" itemValue="EN_COURS"/>
|
||||
<f:selectItem itemLabel="Terminés" itemValue="TERMINE"/>
|
||||
<f:selectItem itemLabel="Planifiés" itemValue="PLANIFIE"/>
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:include>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<ui:include src="/WEB-INF/components/liste-table.xhtml">
|
||||
<ui:param name="formId" value="chantiersForm"/>
|
||||
<ui:param name="tableId" value="chantiersTable"/>
|
||||
<ui:param name="viewBean" value="#{chantiersView}"/>
|
||||
<ui:param name="var" value="chantier"/>
|
||||
<ui:param name="title" value="Liste des chantiers"/>
|
||||
<ui:param name="createPath" value="/chantiers/nouveau"/>
|
||||
<ui:define name="columns">
|
||||
<p:column headerText="Nom" sortBy="#{chantier.nom}">
|
||||
<h:outputText value="#{chantier.nom}"/>
|
||||
</p:column>
|
||||
<p:column headerText="Client" sortBy="#{chantier.client}">
|
||||
<h:outputText value="#{chantier.client}"/>
|
||||
</p:column>
|
||||
<p:column headerText="Adresse">
|
||||
<h:outputText value="#{chantier.adresse}"/>
|
||||
</p:column>
|
||||
<p:column headerText="Date début" sortBy="#{chantier.dateDebut}">
|
||||
<h:outputText value="#{chantier.dateDebut}">
|
||||
<f:convertDateTime pattern="dd/MM/yyyy"/>
|
||||
</h:outputText>
|
||||
</p:column>
|
||||
<p:column headerText="Statut" sortBy="#{chantier.statut}">
|
||||
<p:tag value="#{chantier.statut}"
|
||||
severity="#{chantier.statut == 'TERMINE' ? 'success' : (chantier.statut == 'EN_COURS' ? 'info' : 'warning')}"/>
|
||||
</p:column>
|
||||
<p:column headerText="Avancement">
|
||||
<p:progressBar value="#{chantier.avancement}" showValue="true"
|
||||
styleClass="ui-progressbar-success"/>
|
||||
</p:column>
|
||||
<p:column headerText="Budget">
|
||||
<h:outputText value="#{chantier.budget}">
|
||||
<f:converter converterId="fcfaConverter"/>
|
||||
</h:outputText>
|
||||
<h:outputText value=" Fcfa" style="margin-left: 4px;"/>
|
||||
</p:column>
|
||||
<p:column headerText="Actions" style="width: 150px;">
|
||||
<p:commandButton icon="pi pi-eye" title="Voir les détails"
|
||||
styleClass="ui-button-text"
|
||||
action="#{chantiersView.viewDetails(chantier.id)}"/>
|
||||
</p:column>
|
||||
</ui:define>
|
||||
</ui:include>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ui:define>
|
||||
</ui:composition>
|
||||
Reference in New Issue
Block a user