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,58 @@
|
||||
package dev.lions.btpxpress.service;
|
||||
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.eclipse.microprofile.rest.client.inject.RestClient;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Service de gestion des matériels côté client.
|
||||
* <p>
|
||||
* Ce service encapsule la communication avec l'API backend pour les opérations
|
||||
* liées aux matériels. Il utilise le REST Client pour effectuer les appels HTTP
|
||||
* vers le backend.
|
||||
* </p>
|
||||
*
|
||||
* @author BTP Xpress Development Team
|
||||
* @version 1.0.0
|
||||
* @since 1.0.0
|
||||
*/
|
||||
@ApplicationScoped
|
||||
public class MaterielService {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(MaterielService.class);
|
||||
|
||||
@Inject
|
||||
@RestClient
|
||||
BtpXpressApiClient apiClient;
|
||||
|
||||
/**
|
||||
* Récupère tous les matériels depuis l'API backend.
|
||||
*
|
||||
* @return Liste des matériels, ou liste vide en cas d'erreur.
|
||||
*/
|
||||
public List<Map<String, Object>> getAllMateriels() {
|
||||
try {
|
||||
LOG.debug("Récupération de la liste des matériels depuis l'API backend.");
|
||||
Response response = apiClient.getMateriels();
|
||||
if (response.getStatus() == Response.Status.OK.getStatusCode()) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Map<String, Object>> materiels = response.readEntity(List.class);
|
||||
LOG.debug("Matériels récupérés avec succès : {} élément(s)", materiels != null ? materiels.size() : 0);
|
||||
return materiels != null ? materiels : new ArrayList<>();
|
||||
} else {
|
||||
LOG.warn("Erreur lors de la récupération des matériels. Code HTTP : {}", response.getStatus());
|
||||
return new ArrayList<>();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LOG.error("Erreur lors de la communication avec l'API backend pour récupérer les matériels : {}", e.getMessage(), e);
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user