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:
114
src/main/resources/application-prod.properties
Normal file
114
src/main/resources/application-prod.properties
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user