116 lines
3.7 KiB
Python
116 lines
3.7 KiB
Python
from pydantic import BaseModel, EmailStr, Field
|
|
from typing import Optional
|
|
|
|
|
|
class CollaborateurBase(BaseModel):
|
|
"""Champs communs collaborateur"""
|
|
|
|
nom: str = Field(..., max_length=50)
|
|
prenom: Optional[str] = Field(None, max_length=50)
|
|
fonction: Optional[str] = Field(None, max_length=50)
|
|
|
|
# Adresse
|
|
adresse: Optional[str] = Field(None, max_length=100)
|
|
complement: Optional[str] = Field(None, max_length=100)
|
|
code_postal: Optional[str] = Field(None, max_length=10)
|
|
ville: Optional[str] = Field(None, max_length=50)
|
|
code_region: Optional[str] = Field(None, max_length=50)
|
|
pays: Optional[str] = Field(None, max_length=50)
|
|
|
|
# Services
|
|
service: Optional[str] = Field(None, max_length=50)
|
|
vendeur: bool = Field(default=False)
|
|
caissier: bool = Field(default=False)
|
|
acheteur: bool = Field(default=False)
|
|
chef_ventes: bool = Field(default=False)
|
|
numero_chef_ventes: Optional[int] = None
|
|
|
|
# Contact
|
|
telephone: Optional[str] = Field(None, max_length=20)
|
|
telecopie: Optional[str] = Field(None, max_length=20)
|
|
email: Optional[EmailStr] = None
|
|
tel_portable: Optional[str] = Field(None, max_length=20)
|
|
|
|
# Réseaux sociaux
|
|
facebook: Optional[str] = Field(None, max_length=100)
|
|
linkedin: Optional[str] = Field(None, max_length=100)
|
|
skype: Optional[str] = Field(None, max_length=100)
|
|
|
|
# Autres
|
|
matricule: Optional[str] = Field(None, max_length=20)
|
|
sommeil: bool = Field(default=False)
|
|
|
|
|
|
class CollaborateurCreate(CollaborateurBase):
|
|
"""Création d'un collaborateur"""
|
|
|
|
pass
|
|
|
|
|
|
class CollaborateurUpdate(BaseModel):
|
|
"""Modification d'un collaborateur (tous champs optionnels)"""
|
|
|
|
nom: Optional[str] = Field(None, max_length=50)
|
|
prenom: Optional[str] = Field(None, max_length=50)
|
|
fonction: Optional[str] = Field(None, max_length=50)
|
|
|
|
adresse: Optional[str] = Field(None, max_length=100)
|
|
complement: Optional[str] = Field(None, max_length=100)
|
|
code_postal: Optional[str] = Field(None, max_length=10)
|
|
ville: Optional[str] = Field(None, max_length=50)
|
|
code_region: Optional[str] = Field(None, max_length=50)
|
|
pays: Optional[str] = Field(None, max_length=50)
|
|
|
|
service: Optional[str] = Field(None, max_length=50)
|
|
vendeur: Optional[bool] = None
|
|
caissier: Optional[bool] = None
|
|
acheteur: Optional[bool] = None
|
|
chef_ventes: Optional[bool] = None
|
|
numero_chef_ventes: Optional[int] = None
|
|
|
|
telephone: Optional[str] = Field(None, max_length=20)
|
|
telecopie: Optional[str] = Field(None, max_length=20)
|
|
email: Optional[EmailStr] = None
|
|
tel_portable: Optional[str] = Field(None, max_length=20)
|
|
|
|
facebook: Optional[str] = Field(None, max_length=100)
|
|
linkedin: Optional[str] = Field(None, max_length=100)
|
|
skype: Optional[str] = Field(None, max_length=100)
|
|
|
|
matricule: Optional[str] = Field(None, max_length=20)
|
|
sommeil: Optional[bool] = None
|
|
|
|
|
|
class CollaborateurListe(BaseModel):
|
|
"""Vue liste simplifiée"""
|
|
|
|
numero: int
|
|
nom: str
|
|
prenom: Optional[str]
|
|
fonction: Optional[str]
|
|
service: Optional[str]
|
|
email: Optional[str]
|
|
telephone: Optional[str]
|
|
vendeur: bool
|
|
sommeil: bool
|
|
|
|
|
|
class CollaborateurDetails(CollaborateurBase):
|
|
"""Détails complets d'un collaborateur"""
|
|
|
|
numero: int
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"numero": 1,
|
|
"nom": "DUPONT",
|
|
"prenom": "Jean",
|
|
"fonction": "Directeur Commercial",
|
|
"service": "Commercial",
|
|
"vendeur": True,
|
|
"email": "j.dupont@entreprise.fr",
|
|
"telephone": "0123456789",
|
|
"sommeil": False,
|
|
}
|
|
}
|