from typing import Optional, ClassVar from pydantic import BaseModel, Field, validator class Contact(BaseModel): """Contact associé à un tiers""" numero: Optional[str] = Field(None, description="Code du tiers parent (CT_Num)") contact_numero: Optional[int] = Field(None, description="Numéro unique du contact (CT_No)") n_contact: Optional[int] = Field(None, description="Numéro de référence contact (N_Contact)") civilite: Optional[str] = Field(None, description="Civilité : M., Mme, Mlle (CT_Civilite)") nom: Optional[str] = Field(None, description="Nom de famille (CT_Nom)") prenom: Optional[str] = Field(None, description="Prénom (CT_Prenom)") fonction: Optional[str] = Field(None, description="Fonction/Titre (CT_Fonction)") service_code: Optional[int] = Field(None, description="Code du service (N_Service)") telephone: Optional[str] = Field(None, description="Téléphone fixe (CT_Telephone)") portable: Optional[str] = Field(None, description="Téléphone mobile (CT_TelPortable)") telecopie: Optional[str] = Field(None, description="Fax (CT_Telecopie)") email: Optional[str] = Field(None, description="Adresse email (CT_EMail)") facebook: Optional[str] = Field(None, description="Profil Facebook (CT_Facebook)") linkedin: Optional[str] = Field(None, description="Profil LinkedIn (CT_LinkedIn)") skype: Optional[str] = Field(None, description="Identifiant Skype (CT_Skype)") est_defaut: Optional[bool] = Field(False, description="Contact par défaut") civilite_map: ClassVar[dict] = { 0: "M.", 1: "Mme", 2: "Mlle", 3: "Société", } @validator("civilite", pre=True, always=True) def convert_civilite(cls, v): if v is None: return v if isinstance(v, int): return cls.civilite_map.get(v, str(v)) return v