Files
btpxpress-backend/docs/concepts/04-RESERVATION_MATERIEL.md
2025-10-01 01:37:34 +00:00

5.6 KiB

📅 CONCEPT: RESERVATION_MATERIEL

📌 Vue d'ensemble

Le concept RESERVATION_MATERIEL gère les réservations et affectations de matériel aux chantiers. Il permet de planifier l'utilisation du matériel, éviter les conflits, et optimiser l'allocation des ressources.

Importance: (Concept important)


🗂️ Fichiers concernés

Entités JPA (domain/core/entity/)

Fichier Description Lignes
ReservationMateriel.java Entité principale de réservation ~180
StatutReservationMateriel.java Enum statuts (PLANIFIEE, VALIDEE, EN_COURS, TERMINEE, REFUSEE, ANNULEE) ~20
PrioriteReservation.java Enum priorités de réservation ~25
PlanningMateriel.java Planning d'utilisation du matériel ~200
StatutPlanning.java Enum statuts de planning ~30
TypePlanning.java Enum types de planning ~25

Services (application/service/)

Fichier Description
ReservationMaterielService.java Service métier pour les réservations
PlanningMaterielService.java Service de gestion du planning matériel

📊 Modèle de données

Entité ReservationMateriel

@Entity
@Table(name = "reservations_materiel")
public class ReservationMateriel extends PanacheEntityBase {
  
  @Id
  @GeneratedValue(strategy = GenerationType.UUID)
  private UUID id;
  
  @ManyToOne
  @JoinColumn(name = "materiel_id", nullable = false)
  private Materiel materiel;
  
  @ManyToOne
  @JoinColumn(name = "chantier_id", nullable = false)
  private Chantier chantier;
  
  @Column(name = "date_debut", nullable = false)
  private LocalDate dateDebut;
  
  @Column(name = "date_fin", nullable = false)
  private LocalDate dateFin;
  
  @Enumerated(EnumType.STRING)
  @Column(name = "statut", nullable = false)
  private StatutReservationMateriel statut = StatutReservationMateriel.PLANIFIEE;
  
  @Column(name = "quantite", precision = 10, scale = 3)
  private BigDecimal quantite;
  
  @Enumerated(EnumType.STRING)
  @Column(name = "priorite")
  private PrioriteReservation priorite;
}

Enum StatutReservationMateriel

public enum StatutReservationMateriel {
  PLANIFIEE,    // Réservation planifiée
  VALIDEE,      // Réservation validée
  EN_COURS,     // Réservation en cours d'utilisation
  TERMINEE,     // Réservation terminée
  REFUSEE,      // Réservation refusée
  ANNULEE       // Réservation annulée
}

Champs principaux

Champ Type Obligatoire Description
id UUID Oui Identifiant unique
materiel Materiel Oui Matériel réservé
chantier Chantier Oui Chantier destinataire
dateDebut LocalDate Oui Date de début de réservation
dateFin LocalDate Oui Date de fin de réservation
statut StatutReservationMateriel Oui Statut actuel
quantite BigDecimal Non Quantité réservée
priorite PrioriteReservation Non Priorité de la réservation
commentaire String Non Commentaire

🔌 API REST

Base URL: /api/v1/reservations-materiel

Endpoints disponibles

Méthode Endpoint Description
GET /api/v1/reservations-materiel Liste toutes les réservations
GET /api/v1/reservations-materiel/{id} Détails d'une réservation
POST /api/v1/reservations-materiel Créer une réservation
PUT /api/v1/reservations-materiel/{id} Modifier une réservation
DELETE /api/v1/reservations-materiel/{id} Annuler une réservation
GET /api/v1/reservations-materiel/materiel/{id} Réservations d'un matériel
GET /api/v1/reservations-materiel/chantier/{id} Réservations d'un chantier
GET /api/v1/reservations-materiel/conflits Détecter les conflits

💻 Exemples d'utilisation

1. Créer une réservation

curl -X POST http://localhost:8080/api/v1/reservations-materiel \
  -H "Content-Type: application/json" \
  -d '{
    "materielId": "materiel-uuid",
    "chantierId": "chantier-uuid",
    "dateDebut": "2025-10-01",
    "dateFin": "2025-10-15",
    "quantite": 2,
    "priorite": "NORMALE"
  }'

2. Vérifier les conflits

curl -X GET "http://localhost:8080/api/v1/reservations-materiel/conflits?materielId=uuid&dateDebut=2025-10-01&dateFin=2025-10-15"

🔧 Services métier

ReservationMaterielService

Méthodes principales:

  • create(ReservationDTO dto) - Créer une réservation
  • verifierDisponibilite(UUID materielId, LocalDate debut, LocalDate fin) - Vérifier disponibilité
  • detecterConflits(UUID materielId, LocalDate debut, LocalDate fin) - Détecter conflits
  • valider(UUID id) - Valider une réservation
  • annuler(UUID id) - Annuler une réservation

📈 Relations avec autres concepts

  • MATERIEL ⬅️ Une réservation concerne un matériel
  • CHANTIER ⬅️ Une réservation est liée à un chantier
  • PLANNING ➡️ Les réservations alimentent le planning
  • LIVRAISON ➡️ Une réservation peut générer une livraison

Validations

  • Date de fin doit être après date de début
  • Le matériel doit être disponible
  • Pas de conflit avec d'autres réservations
  • Quantité disponible suffisante

📚 Références


Dernière mise à jour: 2025-09-30
Version: 1.0
Auteur: Documentation BTPXpress