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:
dahoud
2025-11-08 10:49:19 +00:00
parent 0fad42ccaf
commit ec38f6a23a
192 changed files with 12029 additions and 271 deletions

View File

@@ -0,0 +1,114 @@
# Configuration de production pour BTP Xpress Client
# Variables d'environnement requises :
# - BTPXPRESS_API_BASE_URL : URL de l'API backend
# Application
quarkus.application.name=BTP Xpress Client
quarkus.application.version=1.0.0
# Configuration PrimeFaces
primefaces.THEME=freya-purple-light
primefaces.FONT_AWESOME=true
primefaces.UPLOADER=auto
primefaces.MOVE_SCRIPTS_TO_BOTTOM=true
primefaces.CLIENT_SIDE_VALIDATION=true
# Configuration JSF - Production
jakarta.faces.PROJECT_STAGE=Production
jakarta.faces.STATE_SAVING_METHOD=server
jakarta.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE=true
jakarta.faces.PARTIAL_STATE_SAVING=true
jakarta.faces.VALIDATE_EMPTY_FIELDS=auto
# Configuration Arc
quarkus.arc.remove-unused-beans=true
# Serveur HTTP
quarkus.http.port=8081
quarkus.http.host=0.0.0.0
# CORS Configuration pour production
# Frontend accessible depuis btpxpress.lions.dev
quarkus.http.cors=true
quarkus.http.cors.origins=https://btpxpress.lions.dev,https://www.btpxpress.lions.dev
quarkus.http.cors.methods=GET,POST,PUT,DELETE,OPTIONS,PATCH
quarkus.http.cors.headers=Content-Type,Authorization,X-Requested-With,X-CSRF-Token
quarkus.http.cors.exposed-headers=Content-Disposition
quarkus.http.cors.access-control-max-age=3600
quarkus.http.cors.access-control-allow-credentials=true
# Configuration OIDC / Keycloak pour production
quarkus.oidc.enabled=true
quarkus.oidc.auth-server-url=https://security.lions.dev/realms/btpxpress
quarkus.oidc.client-id=btpxpress-frontend
quarkus.oidc.application-type=web-app
quarkus.oidc.tls.verification=required
# Authentification
quarkus.oidc.authentication.redirect-path=/
quarkus.oidc.authentication.restore-path-after-redirect=true
quarkus.oidc.authentication.cookie-path=/
quarkus.oidc.authentication.session-age-extension=PT30M
quarkus.oidc.authentication.cookie-same-site=strict
# Token configuration
quarkus.oidc.token.issuer=https://security.lions.dev/realms/btpxpress
quarkus.oidc.discovery-enabled=true
# Token state manager
quarkus.oidc.token-state-manager.split-tokens=true
quarkus.oidc.token-state-manager.strategy=id-refresh-tokens
quarkus.oidc.token-state-manager.encryption-required=true
quarkus.oidc.token-state-manager.cookie-max-size=8192
quarkus.oidc.token-state-manager.cookie-secure=true
quarkus.oidc.token-state-manager.cookie-http-only=true
# Limites HTTP pour sécurité
quarkus.http.max-headers-size=128K
quarkus.http.max-request-body-size=10M
quarkus.http.max-parameters=1000
quarkus.http.max-parameter-size=2048
quarkus.vertx.max-headers-size=128K
vertx.http.maxHeaderSize=131072
# Configuration sécurité
quarkus.security.users.embedded.enabled=false
quarkus.http.auth.proactive=true
quarkus.security.deny-unannotated-endpoints=false
# Permissions pour accès public aux ressources statiques et pages publiques
quarkus.http.auth.permission.public.paths=/*.css,/*.js,/*.png,/*.jpg,/*.jpeg,/*.gif,/*.svg,/*.woff,/*.woff2,/*.ttf,/*.eot,/resources/*
quarkus.http.auth.permission.public.policy=permit
# Authentification requise pour toutes les autres pages
quarkus.http.auth.permission.authenticated.paths=/*
quarkus.http.auth.permission.authenticated.policy=authenticated
# Configuration API Backend
btpxpress.api.base-url=${BTPXPRESS_API_BASE_URL:https://api.btpxpress.lions.dev}
btpxpress.api.timeout=30000
quarkus.rest-client."dev.lions.btpxpress.service.BtpXpressApiClient".url=${btpxpress.api.base-url}
quarkus.rest-client."dev.lions.btpxpress.service.BtpXpressApiClient".scope=jakarta.inject.Singleton
# Locale
quarkus.locale=fr_FR
# Logging - Production
quarkus.log.level=INFO
quarkus.log.category."dev.lions.btpxpress".level=INFO
quarkus.log.category."org.hibernate".level=WARN
quarkus.log.category."io.quarkus".level=INFO
quarkus.log.category."io.quarkus.oidc".level=WARN
quarkus.log.console.enable=true
quarkus.log.console.format=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{2.}] (%t) %s%e%n
# Cache optimisé pour production
quarkus.cache.caffeine.default.initial-capacity=200
quarkus.cache.caffeine.default.maximum-size=2000
quarkus.cache.caffeine.default.expire-after-write=PT1H
# Compression
quarkus.http.enable-compression=true