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"], } }