from pydantic import BaseModel, Field, field_validator from typing import List, Optional from datetime import date class LigneDevis(BaseModel): article_code: str quantite: float remise_pourcentage: Optional[float] = 0.0 @field_validator("article_code", mode="before") def strip_insecables(cls, v): return v.replace("\xa0", "").strip() class DevisRequest(BaseModel): client_id: str date_devis: Optional[date] = None date_livraison: Optional[date] = None reference: Optional[str] = None lignes: List[LigneDevis] class DevisResponse(BaseModel): id: str client_id: str date_devis: str montant_total_ht: float montant_total_ttc: float nb_lignes: int class DevisUpdateRequest(BaseModel): """Modèle pour modification d'un devis existant""" date_devis: Optional[date] = None date_livraison: Optional[date] = None reference: Optional[str] = None lignes: Optional[List[LigneDevis]] = None statut: Optional[int] = Field(None, ge=0, le=6) class Config: json_schema_extra = { "example": { "date_devis": "2024-01-15", "date_livraison": "2024-01-15", "reference": "DEV-001", "lignes": [ { "article_code": "ART001", "quantite": 5.0, "prix_unitaire_ht": 100.0, "remise_pourcentage": 10.0, } ], "statut": 2, } } class RelanceDevisRequest(BaseModel): doc_id: str message_personnalise: Optional[str] = None