41 lines
No EOL
1.9 KiB
Python
41 lines
No EOL
1.9 KiB
Python
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 |