70 lines
2 KiB
Python
70 lines
2 KiB
Python
|
|
|
|
from pydantic import BaseModel, Field, EmailStr, validator, field_validator
|
|
from typing import List, Optional, Dict, ClassVar, Any
|
|
from datetime import date, datetime
|
|
from enum import Enum, IntEnum
|
|
|
|
class LigneFacture(BaseModel):
|
|
"""Ligne de facture"""
|
|
|
|
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 FactureCreateRequest(BaseModel):
|
|
"""Création d'une facture"""
|
|
|
|
client_id: str
|
|
date_facture: Optional[date] = None
|
|
date_livraison: Optional[date] = None
|
|
lignes: List[LigneFacture]
|
|
reference: Optional[str] = None
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"client_id": "CLI000001",
|
|
"date_facture": "2024-01-15",
|
|
"reference": "FA-EXT-001",
|
|
"lignes": [
|
|
{
|
|
"article_code": "ART001",
|
|
"quantite": 10.0,
|
|
"prix_unitaire_ht": 50.0,
|
|
"remise_pourcentage": 5.0,
|
|
}
|
|
],
|
|
}
|
|
}
|
|
|
|
|
|
class FactureUpdateRequest(BaseModel):
|
|
"""Modification d'une facture existante"""
|
|
|
|
date_facture: Optional[date] = None
|
|
date_livraison: Optional[date] = None
|
|
lignes: Optional[List[LigneFacture]] = None
|
|
statut: Optional[int] = Field(None, ge=0, le=6)
|
|
reference: Optional[str] = None
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"date_facture": "2024-01-15",
|
|
"date_livraison": "2024-01-15",
|
|
"lignes": [
|
|
{
|
|
"article_code": "ART001",
|
|
"quantite": 15.0,
|
|
"prix_unitaire_ht": 45.0,
|
|
}
|
|
],
|
|
"statut": 2,
|
|
}
|
|
}
|