feat: Module Devis professionnel avec écrans complets
Création de 2 écrans professionnels pour le module Devis:
1. devis/nouveau.xhtml:
- 4 sections: Informations générales, Détail du devis, Montants, Conditions
- Numéro auto-généré avec icône
- Statut avec 5 valeurs (BROUILLON, ATTENTE, ACCEPTE, REFUSE, EXPIRE)
- Dates d'émission et validité avec calendriers
- Client et objet du devis requis
- Placeholder pour lignes de devis (future développement)
- Calcul automatique TVA 18% et TTC
- Récapitulatif visuel HT/TVA/TTC avec composant monétaire
- Conditions de paiement et remarques (section collapsible)
- 3 boutons: Annuler, Brouillon, Envoyer
2. devis/details.xhtml:
- En-tête: numéro, statut, client, objet, dates
- Actions: Retour, Convertir en chantier, PDF, Modifier
- 4 KPI cards: Montant HT, TVA, TTC, Statut
- 6 onglets professionnels:
* Vue d'ensemble: infos + récap financier + actions rapides
* Détail des lignes: table lignes (placeholder)
* Conditions: paiement, délais, garanties
* Documents: GED associée (placeholder)
* Suivi: timeline actions
* Historique: modifications (placeholder)
Corrections:
- Fix navigation /factures/nouvelle -> /factures/nouveau (factures.xhtml)
- Fix menu /factures/nouvelle -> /factures/nouveau (menu.xhtml)
Tous les composants réutilisables utilisés (status-badge, monetary-display).
Validation complète côté client et serveur.
UI/UX professionnel adapté au métier BTP.
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
<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">
|
||||
|
||||
<!--
|
||||
Composant réutilisable: Barre d'outils d'export
|
||||
|
||||
Principe DRY: Un seul composant pour toutes les fonctionnalités d'export
|
||||
|
||||
Paramètres:
|
||||
- tableId: ID du DataTable à exporter - requis
|
||||
- filename: Nom du fichier sans extension (défaut: "export")
|
||||
- showPDF: Afficher bouton PDF (défaut: true)
|
||||
- showExcel: Afficher bouton Excel (défaut: true)
|
||||
- showCSV: Afficher bouton CSV (défaut: true)
|
||||
- showPrint: Afficher bouton Imprimer (défaut: false)
|
||||
- pageOnly: Exporter page courante uniquement (défaut: false)
|
||||
- selectionOnly: Exporter sélection uniquement (défaut: false)
|
||||
- alignment: Alignement (left, center, right - défaut: right)
|
||||
- label: Libellé avant les boutons - optionnel
|
||||
|
||||
Utilisation basique:
|
||||
<ui:include src="/WEB-INF/components/export-toolbar.xhtml">
|
||||
<ui:param name="tableId" value="dataTable"/>
|
||||
<ui:param name="filename" value="liste_chantiers"/>
|
||||
</ui:include>
|
||||
|
||||
Export personnalisé:
|
||||
<ui:include src="/WEB-INF/components/export-toolbar.xhtml">
|
||||
<ui:param name="tableId" value="facturesTable"/>
|
||||
<ui:param name="filename" value="factures_#{factureView.mois}"/>
|
||||
<ui:param name="showPDF" value="true"/>
|
||||
<ui:param name="showExcel" value="true"/>
|
||||
<ui:param name="showCSV" value="false"/>
|
||||
<ui:param name="showPrint" value="true"/>
|
||||
<ui:param name="label" value="Exporter :"/>
|
||||
</ui:include>
|
||||
|
||||
Export avec sélection:
|
||||
<ui:include src="/WEB-INF/components/export-toolbar.xhtml">
|
||||
<ui:param name="tableId" value="devisTable"/>
|
||||
<ui:param name="filename" value="devis_selectionnes"/>
|
||||
<ui:param name="selectionOnly" value="true"/>
|
||||
</ui:include>
|
||||
-->
|
||||
|
||||
<div class="export-toolbar flex align-items-center gap-2"
|
||||
style="justify-content: #{empty alignment ? 'flex-end' :
|
||||
alignment eq 'center' ? 'center' :
|
||||
alignment eq 'left' ? 'flex-start' : 'flex-end'};">
|
||||
|
||||
<!-- Libellé optionnel -->
|
||||
<h:panelGroup rendered="#{not empty label}">
|
||||
<span class="text-900 font-medium mr-2">#{label}</span>
|
||||
</h:panelGroup>
|
||||
|
||||
<!-- Bouton PDF -->
|
||||
<h:panelGroup rendered="#{empty showPDF or showPDF eq true}">
|
||||
<p:commandButton icon="pi pi-file-pdf"
|
||||
styleClass="ui-button-danger ui-button-outlined"
|
||||
title="Exporter en PDF">
|
||||
<p:dataExporter type="pdf"
|
||||
target="#{tableId}"
|
||||
fileName="#{empty filename ? 'export' : filename}"
|
||||
pageOnly="#{empty pageOnly ? false : pageOnly}"
|
||||
selectionOnly="#{empty selectionOnly ? false : selectionOnly}"/>
|
||||
</p:commandButton>
|
||||
</h:panelGroup>
|
||||
|
||||
<!-- Bouton Excel -->
|
||||
<h:panelGroup rendered="#{empty showExcel or showExcel eq true}">
|
||||
<p:commandButton icon="pi pi-file-excel"
|
||||
styleClass="ui-button-success ui-button-outlined"
|
||||
title="Exporter en Excel">
|
||||
<p:dataExporter type="xlsx"
|
||||
target="#{tableId}"
|
||||
fileName="#{empty filename ? 'export' : filename}"
|
||||
pageOnly="#{empty pageOnly ? false : pageOnly}"
|
||||
selectionOnly="#{empty selectionOnly ? false : selectionOnly}"/>
|
||||
</p:commandButton>
|
||||
</h:panelGroup>
|
||||
|
||||
<!-- Bouton CSV -->
|
||||
<h:panelGroup rendered="#{showCSV eq true}">
|
||||
<p:commandButton icon="pi pi-file"
|
||||
styleClass="ui-button-info ui-button-outlined"
|
||||
title="Exporter en CSV">
|
||||
<p:dataExporter type="csv"
|
||||
target="#{tableId}"
|
||||
fileName="#{empty filename ? 'export' : filename}"
|
||||
pageOnly="#{empty pageOnly ? false : pageOnly}"
|
||||
selectionOnly="#{empty selectionOnly ? false : selectionOnly}"/>
|
||||
</p:commandButton>
|
||||
</h:panelGroup>
|
||||
|
||||
<!-- Bouton Imprimer -->
|
||||
<h:panelGroup rendered="#{showPrint eq true}">
|
||||
<p:commandButton icon="pi pi-print"
|
||||
styleClass="ui-button-secondary ui-button-outlined"
|
||||
title="Imprimer"
|
||||
onclick="window.print(); return false;"/>
|
||||
</h:panelGroup>
|
||||
</div>
|
||||
|
||||
</ui:composition>
|
||||
Reference in New Issue
Block a user