65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
from pydantic import BaseModel, Field, field_validator
|
|
from typing import List, Optional
|
|
from datetime import datetime
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class ReglementFactureCreate(BaseModel):
|
|
"""Requête de règlement d'une facture côté VPS"""
|
|
|
|
montant: float = Field(..., gt=0)
|
|
mode_reglement: int = Field(default=2, ge=1, le=7)
|
|
date_reglement: Optional[datetime] = None
|
|
reference: Optional[str] = Field(default="", max_length=35)
|
|
libelle: Optional[str] = Field(default="", max_length=69)
|
|
code_journal: str = Field(default="BEU", max_length=6)
|
|
|
|
@field_validator("montant")
|
|
def validate_montant(cls, v):
|
|
if v <= 0:
|
|
raise ValueError("Le montant doit être positif")
|
|
return round(v, 2)
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"montant": 375.12,
|
|
"mode_reglement": 2,
|
|
"reference": "CHQ-001",
|
|
"code_journal": "BEU",
|
|
}
|
|
}
|
|
|
|
|
|
class ReglementMultipleCreate(BaseModel):
|
|
"""Requête de règlement multiple côté VPS"""
|
|
|
|
client_id: str
|
|
montant_total: float = Field(..., gt=0)
|
|
mode_reglement: int = Field(default=2, ge=1, le=7)
|
|
date_reglement: Optional[datetime] = None
|
|
reference: Optional[str] = Field(default="", max_length=35)
|
|
libelle: Optional[str] = Field(default="", max_length=69)
|
|
code_journal: str = Field(default="BEU", max_length=6)
|
|
numeros_factures: Optional[List[str]] = None
|
|
|
|
@field_validator("client_id", mode="before")
|
|
def strip_client_id(cls, v):
|
|
return v.replace("\xa0", "").strip() if v else v
|
|
|
|
@field_validator("montant_total")
|
|
def validate_montant(cls, v):
|
|
if v <= 0:
|
|
raise ValueError("Le montant doit être positif")
|
|
return round(v, 2)
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"client_id": "CLI000001",
|
|
"montant_total": 1000.00,
|
|
"mode_reglement": 2,
|
|
"numeros_factures": ["FA00081", "FA00082"],
|
|
}
|
|
}
|