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:
@@ -0,0 +1,33 @@
|
||||
<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">
|
||||
|
||||
<ui:param name="formId" value="filtresForm"/>
|
||||
<ui:param name="viewBean" value=""/>
|
||||
<ui:param name="tableId" value=""/>
|
||||
|
||||
<div class="card">
|
||||
<h5>Recherche et filtres</h5>
|
||||
<h:form id="#{formId}">
|
||||
<ui:insert name="filter-fields">
|
||||
<!-- Les champs de filtre spécifiques à chaque page -->
|
||||
</ui:insert>
|
||||
<div class="col-12">
|
||||
<p:commandButton value="Rechercher"
|
||||
icon="pi pi-search"
|
||||
action="#{viewBean.search()}"
|
||||
update="#{tableId}"
|
||||
styleClass="ui-button-primary"/>
|
||||
<p:commandButton value="Réinitialiser"
|
||||
icon="pi pi-refresh"
|
||||
action="#{viewBean.resetFilters()}"
|
||||
update="#{tableId} #{formId}"
|
||||
styleClass="ui-button-secondary"/>
|
||||
</div>
|
||||
</h:form>
|
||||
</div>
|
||||
|
||||
</ui:composition>
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
<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">
|
||||
|
||||
<div class="card">
|
||||
<div class="flex align-items-center justify-content-between mb-3">
|
||||
<h5>#{title}</h5>
|
||||
<p:commandButton value="Nouveau"
|
||||
icon="pi pi-plus"
|
||||
action="#{viewBean.createNew()}"
|
||||
styleClass="ui-button-primary"
|
||||
rendered="#{not empty createPath}"/>
|
||||
</div>
|
||||
<h:form id="#{formId}">
|
||||
<p:dataTable id="#{tableId}"
|
||||
value="#{viewBean.items}"
|
||||
var="#{var}"
|
||||
paginator="true"
|
||||
rows="10"
|
||||
rowsPerPageTemplate="10,20,50"
|
||||
emptyMessage="Aucun résultat trouvé"
|
||||
loading="#{viewBean.loading}"
|
||||
selection="#{viewBean.selectedItem}"
|
||||
selectionMode="single">
|
||||
<f:facet name="header">
|
||||
<div class="flex align-items-center justify-content-between">
|
||||
<span>Total : #{viewBean.items.size()} élément(s)</span>
|
||||
<p:commandButton icon="pi pi-trash"
|
||||
title="Supprimer"
|
||||
disabled="#{empty viewBean.selectedItem}"
|
||||
action="#{viewBean.delete()}"
|
||||
update="#{tableId}"
|
||||
styleClass="ui-button-danger ui-button-text"/>
|
||||
</div>
|
||||
</f:facet>
|
||||
<ui:insert name="columns"/>
|
||||
</p:dataTable>
|
||||
</h:form>
|
||||
</div>
|
||||
|
||||
</ui:composition>
|
||||
94
target/classes/META-INF/resources/WEB-INF/config.xhtml
Normal file
94
target/classes/META-INF/resources/WEB-INF/config.xhtml
Normal file
@@ -0,0 +1,94 @@
|
||||
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:f="http://java.sun.com/jsf/core"
|
||||
xmlns:h="http://java.sun.com/jsf/html"
|
||||
xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||
xmlns:p="http://primefaces.org/ui">
|
||||
|
||||
<a href="#" id="layout-config-button" class="layout-config-button">
|
||||
<i class="pi pi-cog"/>
|
||||
</a>
|
||||
|
||||
<div id="layout-config" class="layout-config">
|
||||
<h:form id="config-form" styleClass="layout-config-form">
|
||||
<h5 style="margin-top: 0">Type de Menu</h5>
|
||||
<p:selectOneRadio value="#{guestPreferences.menuMode}" layout="pageDirection"
|
||||
onchange="PrimeFaces.FreyaConfigurator.changeMenuMode(event.target.value)" >
|
||||
<f:selectItem itemLabel="Horizontal" itemValue="layout-horizontal" />
|
||||
<f:selectItem itemLabel="Sidebar" itemValue="layout-sidebar" />
|
||||
<f:selectItem itemLabel="Slim" itemValue="layout-slim" />
|
||||
<p:ajax listener="#{guestPreferences.onMenuTypeChange}" update="config-form" />
|
||||
</p:selectOneRadio>
|
||||
|
||||
<hr/>
|
||||
|
||||
<h5>Schéma de Couleurs</h5>
|
||||
<p:selectOneRadio value="#{guestPreferences.darkMode}" layout="pageDirection"
|
||||
onchange="PrimeFaces.FreyaConfigurator.changeLayout('#{guestPreferences.componentTheme}', event.target.value)" >
|
||||
<f:selectItem itemLabel="Clair" itemValue="light" />
|
||||
<f:selectItem itemLabel="Sombre" itemValue="dark" />
|
||||
<p:ajax onstart="PrimeFaces.FreyaConfigurator.beforeResourceChange()" update="config-form logolink"/>
|
||||
</p:selectOneRadio>
|
||||
|
||||
<p:outputPanel rendered="#{guestPreferences.menuMode eq 'layout-horizontal'}">
|
||||
<hr/>
|
||||
<h5>Mode Topbar et Menu</h5>
|
||||
<p:selectOneRadio value="#{guestPreferences.topbarTheme}" layout="pageDirection"
|
||||
onchange="PrimeFaces.FreyaConfigurator.changeSectionTheme(event.target.value , 'layout-topbar');PrimeFaces.FreyaConfigurator.changeSectionTheme(event.target.value , 'layout-menu')" >
|
||||
<f:selectItem itemLabel="Clair" itemValue="light" itemDisabled="#{guestPreferences.darkMode != 'light'}" />
|
||||
<f:selectItem itemLabel="Sombre" itemValue="dark" itemDisabled="#{guestPreferences.darkMode != 'light'}"/>
|
||||
<p:ajax update="logolink config-form"/>
|
||||
</p:selectOneRadio>
|
||||
</p:outputPanel>
|
||||
|
||||
<p:outputPanel rendered="#{guestPreferences.menuMode != 'layout-horizontal'}">
|
||||
<hr/>
|
||||
<h5>Mode Topbar</h5>
|
||||
<p:selectOneRadio value="#{guestPreferences.topbarTheme}" layout="pageDirection"
|
||||
onchange="PrimeFaces.FreyaConfigurator.changeSectionTheme(event.target.value , 'layout-topbar')" >
|
||||
<f:selectItem itemLabel="Clair" itemValue="light" itemDisabled="#{guestPreferences.darkMode != 'light'}" />
|
||||
<f:selectItem itemLabel="Sombre" itemValue="dark" itemDisabled="#{guestPreferences.darkMode != 'light'}"/>
|
||||
<p:ajax update="logolink config-form"/>
|
||||
</p:selectOneRadio>
|
||||
</p:outputPanel>
|
||||
|
||||
<p:outputPanel rendered="#{guestPreferences.menuMode != 'layout-horizontal'}">
|
||||
<hr/>
|
||||
<h5>Mode Menu</h5>
|
||||
<p:selectOneRadio value="#{guestPreferences.menuTheme}" layout="pageDirection"
|
||||
onchange="PrimeFaces.FreyaConfigurator.changeSectionTheme(event.target.value , 'layout-menu')" >
|
||||
<f:selectItem itemLabel="Clair" itemValue="light" itemDisabled="#{guestPreferences.darkMode != 'light'}" />
|
||||
<f:selectItem itemLabel="Sombre" itemValue="dark" itemDisabled="#{guestPreferences.darkMode != 'light'}"/>
|
||||
<p:ajax update="logolink config-form"/>
|
||||
</p:selectOneRadio>
|
||||
</p:outputPanel>
|
||||
|
||||
<hr/>
|
||||
|
||||
<h5>Style d'Input</h5>
|
||||
<p:selectOneRadio value="#{guestPreferences.inputStyle}" layout="pageDirection"
|
||||
onchange="PrimeFaces.FreyaConfigurator.updateInputStyle(event.target.value)">
|
||||
<f:selectItem itemLabel="Outlined" itemValue="outlined" />
|
||||
<f:selectItem itemLabel="Filled" itemValue="filled" />
|
||||
<p:ajax />
|
||||
</p:selectOneRadio>
|
||||
|
||||
<hr/>
|
||||
|
||||
<h5>Couleurs du Thème</h5>
|
||||
<div class="layout-themes">
|
||||
<ui:repeat value="#{guestPreferences.componentThemes}" var="componentTheme">
|
||||
<div>
|
||||
<p:commandLink actionListener="#{guestPreferences.setComponentTheme(componentTheme.file)}"
|
||||
style="background-color: #{componentTheme.color};" title="#{componentTheme.name}"
|
||||
process="@this"
|
||||
update="config-form"
|
||||
onstart="PrimeFaces.FreyaConfigurator.beforeResourceChange()"
|
||||
oncomplete="PrimeFaces.FreyaConfigurator.changeComponentsTheme('#{componentTheme.file}', '#{guestPreferences.darkMode}')">
|
||||
</p:commandLink>
|
||||
</div>
|
||||
</ui:repeat>
|
||||
</div>
|
||||
</h:form>
|
||||
</div>
|
||||
</ui:composition>
|
||||
|
||||
58
target/classes/META-INF/resources/WEB-INF/footer.xhtml
Normal file
58
target/classes/META-INF/resources/WEB-INF/footer.xhtml
Normal file
@@ -0,0 +1,58 @@
|
||||
<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">
|
||||
|
||||
<div class="layout-footer">
|
||||
<div class="grid">
|
||||
<div class="col-12 lg:col-4">
|
||||
<div class="grid">
|
||||
<div class="col-6">
|
||||
<span class="footer-menutitle">PLAN DU SITE</span>
|
||||
<ul>
|
||||
<li><a href="dashboard.xhtml">Tableau de bord</a></li>
|
||||
<li><a href="chantiers.xhtml">Chantiers</a></li>
|
||||
<li><a href="clients.xhtml">Clients</a></li>
|
||||
<li><a href="devis.xhtml">Devis</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<span class="footer-menutitle"></span>
|
||||
<ul>
|
||||
<li><a href="factures.xhtml">Factures</a></li>
|
||||
<li><a href="materiels.xhtml">Matériels</a></li>
|
||||
<li><a href="employes.xhtml">Employés</a></li>
|
||||
<li><a href="rapports.xhtml">Rapports</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 md:col-6 lg:col-4">
|
||||
<span class="footer-menutitle">NOUS CONTACTER</span>
|
||||
<ul>
|
||||
<li>Email : contact@btpxpress.com</li>
|
||||
<li>Support : support@btpxpress.com</li>
|
||||
<li>Téléphone : +33 (0)1 XX XX XX XX</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-12 md:col-6 lg:col-4">
|
||||
<span class="footer-menutitle">NEWSLETTER</span>
|
||||
<span class="footer-subtitle">Inscrivez-vous à notre newsletter pour recevoir les dernières nouveautés.</span>
|
||||
<h:form>
|
||||
<div class="newsletter-input">
|
||||
<p:inputText placeholder="Votre adresse email" />
|
||||
<p:commandButton value="S'inscrire" styleClass="ui-button-secondary"/>
|
||||
</div>
|
||||
</h:form>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<div class="footer-bottom">
|
||||
<h4>BTP Xpress</h4>
|
||||
<h6>Copyright © 2025 - Tous droits réservés</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ui:composition>
|
||||
|
||||
124
target/classes/META-INF/resources/WEB-INF/menu.xhtml
Normal file
124
target/classes/META-INF/resources/WEB-INF/menu.xhtml
Normal file
@@ -0,0 +1,124 @@
|
||||
<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"
|
||||
xmlns:fr="http://primefaces.org/freya">
|
||||
|
||||
<div class="menu-wrapper">
|
||||
<div class="sidebar-logo">
|
||||
<a href="dashboard.xhtml">
|
||||
<p:graphicImage name="images/logo-freya-single.svg" library="freya-layout" />
|
||||
</a>
|
||||
<a href="#" class="sidebar-pin" title="Toggle Menu">
|
||||
<span class="pin"></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="layout-menu-container">
|
||||
<h:form id="menuform">
|
||||
<fr:menu widgetVar="FreyaMenuWidget">
|
||||
<p:menuitem id="m_dashboard" value="Dashboard" icon="pi pi-home" outcome="/dashboard" />
|
||||
|
||||
<p:submenu id="m_chantiers" label="Chantiers" icon="pi pi-building">
|
||||
<p:menuitem id="m_chantiers_liste" value="List" icon="pi pi-list" outcome="/chantiers" />
|
||||
<p:menuitem id="m_chantiers_nouveau" value="New" icon="pi pi-plus-circle" outcome="/chantiers/nouveau" />
|
||||
<p:menuitem id="m_chantiers_en_cours" value="In Progress" icon="pi pi-spin pi-spinner" outcome="/chantiers/en-cours" />
|
||||
<p:menuitem id="m_chantiers_termines" value="Completed" icon="pi pi-check-circle" outcome="/chantiers/termines" />
|
||||
<p:menuitem id="m_chantiers_planifies" value="Scheduled" icon="pi pi-calendar" outcome="/chantiers/planifies" />
|
||||
</p:submenu>
|
||||
|
||||
<p:submenu id="m_clients" label="Clients" icon="pi pi-users">
|
||||
<p:menuitem id="m_clients_liste" value="List" icon="pi pi-list" outcome="/clients" />
|
||||
<p:menuitem id="m_clients_nouveau" value="New" icon="pi pi-user-plus" outcome="/clients/nouveau" />
|
||||
<p:menuitem id="m_clients_recherche" value="Search" icon="pi pi-search" outcome="/clients/recherche" />
|
||||
</p:submenu>
|
||||
|
||||
<p:submenu id="m_devis" label="Devis" icon="pi pi-file-edit">
|
||||
<p:menuitem id="m_devis_liste" value="List" icon="pi pi-list" outcome="/devis" />
|
||||
<p:menuitem id="m_devis_nouveau" value="New" icon="pi pi-plus" outcome="/devis/nouveau" />
|
||||
<p:menuitem id="m_devis_attente" value="Pending" icon="pi pi-clock" outcome="/devis/attente" />
|
||||
<p:menuitem id="m_devis_acceptes" value="Accepted" icon="pi pi-check" outcome="/devis/acceptes" />
|
||||
<p:menuitem id="m_devis_expires" value="Expired" icon="pi pi-exclamation-triangle" outcome="/devis/expires" />
|
||||
</p:submenu>
|
||||
|
||||
<p:submenu id="m_factures" label="Factures" icon="pi pi-dollar">
|
||||
<p:menuitem id="m_factures_liste" value="List" icon="pi pi-list" outcome="/factures" />
|
||||
<p:menuitem id="m_factures_nouvelle" value="New" icon="pi pi-plus" outcome="/factures/nouvelle" />
|
||||
<p:menuitem id="m_factures_payees" value="Paid" icon="pi pi-check-circle" outcome="/factures/payees" />
|
||||
<p:menuitem id="m_factures_impayees" value="Unpaid" icon="pi pi-exclamation-circle" outcome="/factures/impayees" />
|
||||
<p:menuitem id="m_factures_retard" value="Overdue" icon="pi pi-clock" outcome="/factures/retard" />
|
||||
</p:submenu>
|
||||
|
||||
<p:submenu id="m_materiels" label="Matériels" icon="pi pi-wrench">
|
||||
<p:menuitem id="m_materiels_liste" value="Inventory" icon="pi pi-list" outcome="/materiels" />
|
||||
<p:menuitem id="m_materiels_nouveau" value="New" icon="pi pi-plus" outcome="/materiels/nouveau" />
|
||||
<p:menuitem id="m_materiels_disponibles" value="Available" icon="pi pi-check" outcome="/materiels/disponibles" />
|
||||
<p:menuitem id="m_materiels_maintenance" value="Maintenance" icon="pi pi-cog" outcome="/materiels/maintenance-prevue" />
|
||||
</p:submenu>
|
||||
|
||||
<p:submenu id="m_stock" label="Stock" icon="pi pi-box">
|
||||
<p:menuitem id="m_stock_liste" value="Management" icon="pi pi-list" outcome="/stock" />
|
||||
<p:menuitem id="m_stock_inventaire" value="Inventory" icon="pi pi-check-square" outcome="/stock/inventaire" />
|
||||
<p:menuitem id="m_stock_commandes" value="Orders" icon="pi pi-shopping-cart" outcome="/stock/commandes" />
|
||||
<p:menuitem id="m_stock_sorties" value="Outgoing" icon="pi pi-sign-out" outcome="/stock/sorties" />
|
||||
</p:submenu>
|
||||
|
||||
<p:submenu id="m_employes" label="Employés" icon="pi pi-id-card">
|
||||
<p:menuitem id="m_employes_liste" value="List" icon="pi pi-list" outcome="/employes" />
|
||||
<p:menuitem id="m_employes_nouveau" value="New" icon="pi pi-user-plus" outcome="/employes/nouveau" />
|
||||
<p:menuitem id="m_employes_actifs" value="Active" icon="pi pi-check-circle" outcome="/employes/actifs" />
|
||||
<p:menuitem id="m_employes_disponibles" value="Available" icon="pi pi-users" outcome="/employes/disponibles" />
|
||||
</p:submenu>
|
||||
|
||||
<p:submenu id="m_equipes" label="Équipes" icon="pi pi-users">
|
||||
<p:menuitem id="m_equipes_liste" value="List" icon="pi pi-list" outcome="/equipes" />
|
||||
<p:menuitem id="m_equipes_nouvelle" value="New" icon="pi pi-plus" outcome="/equipes/nouvelle" />
|
||||
<p:menuitem id="m_equipes_disponibles" value="Available" icon="pi pi-check" outcome="/equipes/disponibles" />
|
||||
<p:menuitem id="m_equipes_specialites" value="Specialties" icon="pi pi-tags" outcome="/equipes/specialites" />
|
||||
</p:submenu>
|
||||
|
||||
<p:submenu id="m_planning" label="Planning" icon="pi pi-calendar">
|
||||
<p:menuitem id="m_planning_calendrier" value="Calendar" icon="pi pi-calendar" outcome="/planning/calendrier" />
|
||||
<p:menuitem id="m_planning_materiel" value="Equipment" icon="pi pi-wrench" outcome="/planning/materiel" />
|
||||
<p:menuitem id="m_planning_equipes" value="Teams" icon="pi pi-users" outcome="/planning/equipes" />
|
||||
</p:submenu>
|
||||
|
||||
<p:submenu id="m_maintenance" label="Maintenance" icon="pi pi-cog">
|
||||
<p:menuitem id="m_maintenance_liste" value="List" icon="pi pi-list" outcome="/maintenance" />
|
||||
<p:menuitem id="m_maintenance_nouvelle" value="New" icon="pi pi-plus" outcome="/maintenance/nouveau" />
|
||||
<p:menuitem id="m_maintenance_preventive" value="Preventive" icon="pi pi-shield" outcome="/maintenance/preventive" />
|
||||
<p:menuitem id="m_maintenance_corrective" value="Corrective" icon="pi pi-exclamation-triangle" outcome="/maintenance/corrective" />
|
||||
<p:menuitem id="m_maintenance_urgente" value="Urgent" icon="pi pi-bolt" outcome="/maintenance/urgente" />
|
||||
</p:submenu>
|
||||
|
||||
<p:submenu id="m_rapports" label="Rapports" icon="pi pi-chart-bar">
|
||||
<p:menuitem id="m_rapports_liste" value="List" icon="pi pi-list" outcome="/rapports" />
|
||||
<p:menuitem id="m_rapports_ca" value="Revenue" icon="pi pi-dollar" outcome="/rapports/ca" />
|
||||
<p:menuitem id="m_rapports_rentabilite" value="Profitability" icon="pi pi-chart-line" outcome="/rapports/rentabilite" />
|
||||
<p:menuitem id="m_rapports_clients" value="By Client" icon="pi pi-users" outcome="/rapports/clients" />
|
||||
<p:menuitem id="m_rapports_equipes" value="By Team" icon="pi pi-id-card" outcome="/rapports/equipes" />
|
||||
</p:submenu>
|
||||
|
||||
<p:submenu id="m_notifications" label="Notifications" icon="pi pi-bell">
|
||||
<p:menuitem id="m_notifications_liste" value="All" icon="pi pi-list" outcome="/notifications" />
|
||||
<p:menuitem id="m_notifications_recentes" value="Recent" icon="pi pi-clock" outcome="/notifications/recentes" />
|
||||
<p:menuitem id="m_notifications_non_lues" value="Unread" icon="pi pi-envelope" outcome="/notifications/non-lues" />
|
||||
<p:menuitem id="m_notifications_statistiques" value="Statistics" icon="pi pi-chart-pie" outcome="/notifications/statistiques" />
|
||||
</p:submenu>
|
||||
|
||||
<p:submenu id="m_messages" label="Messages" icon="pi pi-comments">
|
||||
<p:menuitem id="m_messages_liste" value="Inbox" icon="pi pi-inbox" outcome="/messages" />
|
||||
<p:menuitem id="m_messages_nouveau" value="New" icon="pi pi-plus" outcome="/messages/nouveau" />
|
||||
<p:menuitem id="m_messages_envoyes" value="Sent" icon="pi pi-send" outcome="/messages/envoyes" />
|
||||
<p:menuitem id="m_messages_archives" value="Archived" icon="pi pi-archive" outcome="/messages/archives" />
|
||||
</p:submenu>
|
||||
|
||||
<p:menuitem id="m_profile" value="Profile" icon="pi pi-user" outcome="/profile" />
|
||||
<p:menuitem id="m_documentation" value="Documentation" icon="pi pi-book" outcome="/documentation" />
|
||||
</fr:menu>
|
||||
</h:form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</ui:composition>
|
||||
|
||||
65
target/classes/META-INF/resources/WEB-INF/rightpanel.xhtml
Normal file
65
target/classes/META-INF/resources/WEB-INF/rightpanel.xhtml
Normal file
@@ -0,0 +1,65 @@
|
||||
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:f="http://java.sun.com/jsf/core"
|
||||
xmlns:h="http://java.sun.com/jsf/html"
|
||||
xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||
xmlns:p="http://primefaces.org/ui">
|
||||
|
||||
<div class="layout-rightpanel">
|
||||
<div class="rightpanel-wrapper">
|
||||
<div class="rightpanel-section tasks-section">
|
||||
<div class="section-header">
|
||||
<h6>Mes Tâches</h6>
|
||||
<h:form>
|
||||
<p:commandButton type="button" icon="pi pi-plus" styleClass="ui-button-secondary ui-button-flat rounded-button" />
|
||||
</h:form>
|
||||
</div>
|
||||
<ul>
|
||||
<li>
|
||||
<div class="task-info">
|
||||
<h6>Réviser le devis pour le chantier A</h6>
|
||||
<span>-Validation budgétaire</span>
|
||||
<span>-Vérification matériaux</span>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="task-info">
|
||||
<h6>Planifier la maintenance préventive</h6>
|
||||
<span>Matériel : Pelleteuse BX-2024</span>
|
||||
</div>
|
||||
</li>
|
||||
<li class="done">
|
||||
<div class="task-info">
|
||||
<h6>Finaliser le rapport hebdomadaire</h6>
|
||||
</div>
|
||||
<i class="pi pi-check"></i>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="rightpanel-section favorites-section">
|
||||
<div class="section-header">
|
||||
<h6>Favoris</h6>
|
||||
</div>
|
||||
<div class="favorite-items">
|
||||
<a href="dashboard.xhtml" class="favorite-item">
|
||||
<i class="pi pi-home" style="font-size: 1.5rem;"></i>
|
||||
</a>
|
||||
<a href="chantiers.xhtml" class="favorite-item">
|
||||
<i class="pi pi-building" style="font-size: 1.5rem;"></i>
|
||||
</a>
|
||||
<a href="clients.xhtml" class="favorite-item">
|
||||
<i class="pi pi-users" style="font-size: 1.5rem;"></i>
|
||||
</a>
|
||||
<a href="rapports.xhtml" class="favorite-item">
|
||||
<i class="pi pi-chart-bar" style="font-size: 1.5rem;"></i>
|
||||
</a>
|
||||
<a href="#" class="add-item">
|
||||
<i class="pi pi-plus"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</ui:composition>
|
||||
|
||||
59
target/classes/META-INF/resources/WEB-INF/template.xhtml
Normal file
59
target/classes/META-INF/resources/WEB-INF/template.xhtml
Normal file
@@ -0,0 +1,59 @@
|
||||
<!DOCTYPE html>
|
||||
<html 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"
|
||||
lang="fr">
|
||||
|
||||
<h:head>
|
||||
<f:facet name="first">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<link rel="icon" href="#{request.contextPath}/resources/freya-layout/images/favicon.ico" type="image/x-icon"></link>
|
||||
</f:facet>
|
||||
<title><ui:insert name="title">BTP Xpress - Gestion de Projets BTP</ui:insert></title>
|
||||
|
||||
<h:outputStylesheet name="theme.css" library="primefaces-freya-#{guestPreferences.componentTheme}-#{guestPreferences.darkMode}"/>
|
||||
|
||||
<h:outputStylesheet name="css/primeicons.css" library="freya-layout" />
|
||||
<h:outputStylesheet name="css/primeflex.min.css" library="freya-layout" />
|
||||
<h:outputStylesheet name="css/#{guestPreferences.layout}.css" library="freya-layout" />
|
||||
<h:outputStylesheet name="css/custom-topbar.css" />
|
||||
|
||||
<h:outputScript name="js/layout.js" library="freya-layout" />
|
||||
<h:outputScript name="js/prism.js" library="freya-layout"/>
|
||||
<ui:insert name="head"/>
|
||||
</h:head>
|
||||
|
||||
<h:body styleClass="#{guestPreferences.inputStyleClass}">
|
||||
<div class="layout-wrapper layout-topbar-#{guestPreferences.topbarTheme} layout-menu-#{guestPreferences.menuTheme} #{guestPreferences.menuMode}" >
|
||||
<ui:include src="./topbar.xhtml"/>
|
||||
|
||||
<ui:include src="./rightpanel.xhtml"/>
|
||||
<ui:include src="./config.xhtml" />
|
||||
|
||||
<div class="layout-main">
|
||||
<div class="layout-content">
|
||||
<ui:insert name="content"/>
|
||||
</div>
|
||||
<ui:include src="./footer.xhtml"/>
|
||||
</div>
|
||||
|
||||
<p:ajaxStatus style="width:32px;height:32px;position:fixed;right:7px;bottom:7px">
|
||||
<f:facet name="start">
|
||||
<i class="pi pi-spin pi-spinner ajax-loader" aria-hidden="true"/>
|
||||
</f:facet>
|
||||
|
||||
<f:facet name="complete">
|
||||
<h:outputText value="" />
|
||||
</f:facet>
|
||||
</p:ajaxStatus>
|
||||
<div class="layout-mask modal-in"></div>
|
||||
</div>
|
||||
</h:body>
|
||||
|
||||
</html>
|
||||
|
||||
129
target/classes/META-INF/resources/WEB-INF/topbar.xhtml
Normal file
129
target/classes/META-INF/resources/WEB-INF/topbar.xhtml
Normal file
@@ -0,0 +1,129 @@
|
||||
<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"
|
||||
xmlns:po="http://primefaces.org/freya">
|
||||
|
||||
<div class="layout-topbar">
|
||||
<div class="layout-topbar-wrapper">
|
||||
<div class="layout-topbar-left">
|
||||
<a href="#" class="menu-button">
|
||||
<i class="pi pi-bars"/>
|
||||
</a>
|
||||
<h:link id="logolink" outcome="/dashboard" styleClass="layout-topbar-logo">
|
||||
<p:graphicImage name="images/#{ guestPreferences.lightLogo ? 'logo-freya-white.svg' : 'logo-freya.svg'}" library="freya-layout" />
|
||||
</h:link>
|
||||
</div>
|
||||
|
||||
<ui:include src="./menu.xhtml" />
|
||||
|
||||
<div class="layout-topbar-right">
|
||||
<ul class="layout-topbar-actions">
|
||||
<li class="topbar-item search-item">
|
||||
<a href="#">
|
||||
<i class="topbar-icon pi pi-search"/>
|
||||
</a>
|
||||
<h:form>
|
||||
<h:panelGroup styleClass="search-input-wrapper">
|
||||
<p:inputText placeholder="Search..." />
|
||||
<i class="pi pi-search"/>
|
||||
</h:panelGroup>
|
||||
</h:form>
|
||||
<ul>
|
||||
<h:form onsubmit="return false;">
|
||||
<h:panelGroup styleClass="search-input-wrapper">
|
||||
<p:inputText placeholder="Search..." />
|
||||
<i class="pi pi-search"/>
|
||||
</h:panelGroup>
|
||||
</h:form>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="topbar-item notifications-item">
|
||||
<a href="/notifications">
|
||||
<i class="topbar-icon pi pi-bell"/>
|
||||
<p:outputPanel rendered="#{userSession.nombreNotificationsNonLues > 0}">
|
||||
<span class="ui-badge">#{userSession.nombreNotificationsNonLues}</span>
|
||||
</p:outputPanel>
|
||||
</a>
|
||||
</li>
|
||||
<li class="topbar-item messages-item">
|
||||
<a href="/messages">
|
||||
<i class="topbar-icon pi pi-envelope"/>
|
||||
<p:outputPanel rendered="#{userSession.nombreMessagesNonLus > 0}">
|
||||
<span class="ui-badge">#{userSession.nombreMessagesNonLus}</span>
|
||||
</p:outputPanel>
|
||||
</a>
|
||||
</li>
|
||||
<li class="topbar-item user-profile">
|
||||
<a href="#">
|
||||
<p:graphicImage name="images/avatar-profilemenu.png" library="freya-layout" />
|
||||
</a>
|
||||
<ul>
|
||||
<li class="user-profile-header">
|
||||
<div class="user-info">
|
||||
<p:graphicImage name="images/avatar-profilemenu.png" library="freya-layout" styleClass="profile-avatar-small" />
|
||||
<div class="user-details">
|
||||
<span class="user-name">#{userSession.nomComplet}</span>
|
||||
<span class="user-role">#{userSession.role}</span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="user-profile-divider">
|
||||
<hr/>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/profile">
|
||||
<i class="pi pi-user"></i>
|
||||
<span>Profile</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="pi pi-cog"></i>
|
||||
<span>Settings</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/messages">
|
||||
<i class="pi pi-envelope"></i>
|
||||
<span>Messages</span>
|
||||
<p:outputPanel rendered="#{userSession.nombreMessagesNonLus > 0}">
|
||||
<span class="ui-badge">#{userSession.nombreMessagesNonLus}</span>
|
||||
</p:outputPanel>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/notifications">
|
||||
<i class="pi pi-bell"></i>
|
||||
<span>Notifications</span>
|
||||
<p:outputPanel rendered="#{userSession.nombreNotificationsNonLues > 0}">
|
||||
<span class="ui-badge">#{userSession.nombreNotificationsNonLues}</span>
|
||||
</p:outputPanel>
|
||||
</a>
|
||||
</li>
|
||||
<li class="user-profile-divider">
|
||||
<hr/>
|
||||
</li>
|
||||
<li>
|
||||
<h:form>
|
||||
<h:commandLink action="#{userSession.deconnecter()}" styleClass="logout-link">
|
||||
<i class="pi pi-sign-out"></i>
|
||||
<span>Logout</span>
|
||||
</h:commandLink>
|
||||
</h:form>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
<a href="#" class="layout-rightpanel-button">
|
||||
<i class="pi pi-arrow-left"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</ui:composition>
|
||||
|
||||
Reference in New Issue
Block a user