feat(api): enhance FamilleResponse model with additional fields

This commit is contained in:
Fanilo-Nantenaina 2025-12-26 20:33:53 +03:00
parent 0f06075779
commit 459ce26766

119
api.py
View file

@ -1763,17 +1763,81 @@ class FamilleCreateRequest(BaseModel):
class FamilleResponse(BaseModel): class FamilleResponse(BaseModel):
"""Modèle de réponse pour une famille d'articles""" """Modèle de réponse pour une famille d'articles - aligné sur lister_toutes_familles"""
# === Identification ===
code: str = Field(..., description="Code famille") code: str = Field(..., description="Code famille")
intitule: str = Field(..., description="Intitulé") intitule: str = Field(..., description="Intitulé")
type: int = Field(..., description="Type (0=Détail, 1=Total)") type: int = Field(..., description="Type (0=Détail, 1=Total)")
type_libelle: str = Field(..., description="Libellé du type") type_libelle: str = Field(..., description="Libellé du type")
est_total: Optional[bool] = Field(None, description="True si type Total") est_total: bool = Field(..., description="True si type Total")
est_detail: Optional[bool] = Field(None, description="True si type Détail")
# === Vente et unités ===
unite_vente: Optional[str] = Field(None, description="Unité de vente")
unite_poids: Optional[str] = Field(None, description="Unité de poids")
coef: Optional[float] = Field(None, description="Coefficient")
# === Stock et logistique ===
suivi_stock: Optional[bool] = Field(None, description="Suivi du stock activé")
garantie: Optional[int] = Field(None, description="Durée de garantie (mois)")
delai: Optional[int] = Field(None, description="Délai de livraison (jours)")
nb_colis: Optional[int] = Field(None, description="Nombre de colis")
# === Comptabilité ===
compte_achat: Optional[str] = Field(None, description="Compte général achat") compte_achat: Optional[str] = Field(None, description="Compte général achat")
compte_vente: Optional[str] = Field(None, description="Compte général vente") compte_vente: Optional[str] = Field(None, description="Compte général vente")
unite_vente: Optional[str] = Field(None, description="Unité de vente par défaut") code_fiscal: Optional[str] = Field(None, description="Code fiscal")
coef: Optional[float] = Field(None, description="Coefficient") escompte: Optional[bool] = Field(None, description="Escompte autorisé")
# === Organisation ===
est_centrale: Optional[bool] = Field(None, description="Famille centrale")
nature: Optional[int] = Field(None, description="Nature de la famille")
pays: Optional[str] = Field(None, description="Pays d'origine")
# === Classifications ===
categorie_1: Optional[int] = Field(None, description="Catégorie 1")
categorie_2: Optional[int] = Field(None, description="Catégorie 2")
categorie_3: Optional[int] = Field(None, description="Catégorie 3")
categorie_4: Optional[int] = Field(None, description="Catégorie 4")
# === Statistiques ===
stat_01: Optional[str] = Field(None, description="Statistique 1")
stat_02: Optional[str] = Field(None, description="Statistique 2")
stat_03: Optional[str] = Field(None, description="Statistique 3")
stat_04: Optional[str] = Field(None, description="Statistique 4")
stat_05: Optional[str] = Field(None, description="Statistique 5")
hors_statistique: Optional[bool] = Field(None, description="Exclue des statistiques")
est_statistique: Optional[bool] = Field(None, description="Incluse dans les statistiques (legacy)")
# === Paramètres commerciaux ===
vente_debit: Optional[bool] = Field(None, description="Vente au débit")
non_imprimable: Optional[bool] = Field(None, description="Non imprimable")
contremarque: Optional[bool] = Field(None, description="Contremarque")
fact_poids: Optional[bool] = Field(None, description="Facturation au poids")
fact_forfait: Optional[bool] = Field(None, description="Facturation forfaitaire")
publie: Optional[bool] = Field(None, description="Publié")
# === Références ===
racine_reference: Optional[str] = Field(None, description="Racine référence article")
racine_code_barre: Optional[str] = Field(None, description="Racine code-barres")
raccourci: Optional[str] = Field(None, description="Raccourci clavier")
# === Gestion ===
sous_traitance: Optional[bool] = Field(None, description="Sous-traitance")
fictif: Optional[bool] = Field(None, description="Famille fictive")
criticite: Optional[int] = Field(None, description="Niveau de criticité")
# === Métadonnées (spécifiques à lire_famille) ===
avertissement: Optional[str] = Field(None, description="Avertissement si famille Total")
index_com: Optional[int] = Field(None, description="Index COM (lire_famille uniquement)")
date_creation: Optional[str] = Field(None, description="Date de création")
date_modification: Optional[str] = Field(None, description="Date de modification")
nb_articles: Optional[int] = Field(None, description="Nombre d'articles dans la famille")
# === Champs bruts SQL (optionnels) ===
# Permet de conserver tous les champs SQL si besoin
champs_sql: Optional[Dict[str, Any]] = Field(None, description="Champs SQL bruts (si demandés)")
class Config: class Config:
json_schema_extra = { json_schema_extra = {
@ -1783,14 +1847,57 @@ class FamilleResponse(BaseModel):
"type": 0, "type": 0,
"type_libelle": "Détail", "type_libelle": "Détail",
"est_total": False, "est_total": False,
"est_detail": True,
"unite_vente": "U",
"unite_poids": "KG",
"coef": 2.0,
"suivi_stock": True,
"garantie": 12,
"delai": 7,
"nb_colis": 1,
"compte_achat": "607000", "compte_achat": "607000",
"compte_vente": "707000", "compte_vente": "707000",
"unite_vente": "U", "code_fiscal": "TVA20",
"coef": 2.0, "escompte": True,
"est_centrale": False,
"nature": 0,
"pays": "FR",
"categorie_1": 1,
"categorie_2": 0,
"categorie_3": 0,
"categorie_4": 0,
"nb_articles": 45
} }
} }
class FamilleListResponse(BaseModel):
"""Modèle de réponse pour une liste de familles"""
familles: list[FamilleResponse] = Field(..., description="Liste des familles")
total: int = Field(..., description="Nombre total de familles")
filtre_applique: Optional[str] = Field(None, description="Filtre appliqué")
inclut_totaux: bool = Field(..., description="Inclut les familles de type Total")
class Config:
json_schema_extra = {
"example": {
"familles": [
{
"code": "ZDIVERS",
"intitule": "Frais et accessoires",
"type": 0,
"type_libelle": "Détail",
"est_total": False,
"nb_articles": 45
}
],
"total": 1,
"filtre_applique": "frais",
"inclut_totaux": False
}
}
class MouvementStockLigneRequest(BaseModel): class MouvementStockLigneRequest(BaseModel):
article_ref: str = Field(..., description="Référence de l'article") article_ref: str = Field(..., description="Référence de l'article")
quantite: float = Field(..., gt=0, description="Quantité (>0)") quantite: float = Field(..., gt=0, description="Quantité (>0)")