refactor(tiers): restructure client and supplier models to inherit from base and added Collaborator (commercial) fields on retrieving data
This commit is contained in:
parent
448227c80f
commit
e7bdf2d6a2
4 changed files with 77 additions and 509 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
from pydantic import BaseModel, Field, field_validator
|
from pydantic import BaseModel, Field, field_validator
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
from schemas.tiers.contact import Contact
|
from schemas.tiers.contact import Contact
|
||||||
|
from schemas.tiers.tiers import TiersDetails
|
||||||
|
|
||||||
|
|
||||||
class ClientResponse(BaseModel):
|
class ClientResponse(BaseModel):
|
||||||
|
|
@ -13,266 +14,20 @@ class ClientResponse(BaseModel):
|
||||||
telephone: Optional[str] = None
|
telephone: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
class ClientDetails(BaseModel):
|
class ClientDetails(TiersDetails):
|
||||||
numero: Optional[str] = Field(None, description="Code client (CT_Num)")
|
|
||||||
intitule: Optional[str] = Field(
|
|
||||||
None, description="Raison sociale ou Nom complet (CT_Intitule)"
|
|
||||||
)
|
|
||||||
type_tiers: Optional[int] = Field(
|
|
||||||
None, description="Type : 0=Client, 1=Fournisseur (CT_Type)"
|
|
||||||
)
|
|
||||||
qualite: Optional[str] = Field(
|
|
||||||
None, description="Qualité Sage : CLI, FOU, PRO (CT_Qualite)"
|
|
||||||
)
|
|
||||||
classement: Optional[str] = Field(
|
|
||||||
None, description="Code de classement (CT_Classement)"
|
|
||||||
)
|
|
||||||
raccourci: Optional[str] = Field(
|
|
||||||
None, description="Code raccourci 7 car. (CT_Raccourci)"
|
|
||||||
)
|
|
||||||
siret: Optional[str] = Field(None, description="N° SIRET 14 chiffres (CT_Siret)")
|
|
||||||
tva_intra: Optional[str] = Field(
|
|
||||||
None, description="N° TVA intracommunautaire (CT_Identifiant)"
|
|
||||||
)
|
|
||||||
code_naf: Optional[str] = Field(None, description="Code NAF/APE (CT_Ape)")
|
|
||||||
|
|
||||||
contact: Optional[str] = Field(
|
|
||||||
None, description="Nom du contact principal (CT_Contact)"
|
|
||||||
)
|
|
||||||
adresse: Optional[str] = Field(None, description="Adresse ligne 1 (CT_Adresse)")
|
|
||||||
complement: Optional[str] = Field(
|
|
||||||
None, description="Complément d'adresse (CT_Complement)"
|
|
||||||
)
|
|
||||||
code_postal: Optional[str] = Field(None, description="Code postal (CT_CodePostal)")
|
|
||||||
ville: Optional[str] = Field(None, description="Ville (CT_Ville)")
|
|
||||||
region: Optional[str] = Field(None, description="Région/État (CT_CodeRegion)")
|
|
||||||
pays: Optional[str] = Field(None, description="Pays (CT_Pays)")
|
|
||||||
|
|
||||||
telephone: Optional[str] = Field(None, description="Téléphone fixe (CT_Telephone)")
|
|
||||||
telecopie: Optional[str] = Field(None, description="Fax (CT_Telecopie)")
|
|
||||||
email: Optional[str] = Field(None, description="Email principal (CT_EMail)")
|
|
||||||
site_web: Optional[str] = Field(None, description="Site web (CT_Site)")
|
|
||||||
facebook: Optional[str] = Field(None, description="Profil Facebook (CT_Facebook)")
|
|
||||||
linkedin: Optional[str] = Field(None, description="Profil LinkedIn (CT_LinkedIn)")
|
|
||||||
|
|
||||||
taux01: Optional[float] = Field(None, description="Taux personnalisé 1 (CT_Taux01)")
|
|
||||||
taux02: Optional[float] = Field(None, description="Taux personnalisé 2 (CT_Taux02)")
|
|
||||||
taux03: Optional[float] = Field(None, description="Taux personnalisé 3 (CT_Taux03)")
|
|
||||||
taux04: Optional[float] = Field(None, description="Taux personnalisé 4 (CT_Taux04)")
|
|
||||||
|
|
||||||
statistique01: Optional[str] = Field(
|
|
||||||
None, description="Statistique 1 (CT_Statistique01)"
|
|
||||||
)
|
|
||||||
statistique02: Optional[str] = Field(
|
|
||||||
None, description="Statistique 2 (CT_Statistique02)"
|
|
||||||
)
|
|
||||||
statistique03: Optional[str] = Field(
|
|
||||||
None, description="Statistique 3 (CT_Statistique03)"
|
|
||||||
)
|
|
||||||
statistique04: Optional[str] = Field(
|
|
||||||
None, description="Statistique 4 (CT_Statistique04)"
|
|
||||||
)
|
|
||||||
statistique05: Optional[str] = Field(
|
|
||||||
None, description="Statistique 5 (CT_Statistique05)"
|
|
||||||
)
|
|
||||||
statistique06: Optional[str] = Field(
|
|
||||||
None, description="Statistique 6 (CT_Statistique06)"
|
|
||||||
)
|
|
||||||
statistique07: Optional[str] = Field(
|
|
||||||
None, description="Statistique 7 (CT_Statistique07)"
|
|
||||||
)
|
|
||||||
statistique08: Optional[str] = Field(
|
|
||||||
None, description="Statistique 8 (CT_Statistique08)"
|
|
||||||
)
|
|
||||||
statistique09: Optional[str] = Field(
|
|
||||||
None, description="Statistique 9 (CT_Statistique09)"
|
|
||||||
)
|
|
||||||
statistique10: Optional[str] = Field(
|
|
||||||
None, description="Statistique 10 (CT_Statistique10)"
|
|
||||||
)
|
|
||||||
|
|
||||||
encours_autorise: Optional[float] = Field(
|
|
||||||
None, description="Encours maximum autorisé (CT_Encours)"
|
|
||||||
)
|
|
||||||
assurance_credit: Optional[float] = Field(
|
|
||||||
None, description="Montant assurance crédit (CT_Assurance)"
|
|
||||||
)
|
|
||||||
langue: Optional[int] = Field(
|
|
||||||
None, description="Code langue 0=FR, 1=EN (CT_Langue)"
|
|
||||||
)
|
|
||||||
commercial_code: Optional[int] = Field(
|
|
||||||
None, description="Code du commercial (CO_No)"
|
|
||||||
)
|
|
||||||
|
|
||||||
lettrage_auto: Optional[bool] = Field(
|
|
||||||
None, description="Lettrage automatique (CT_Lettrage)"
|
|
||||||
)
|
|
||||||
est_actif: Optional[bool] = Field(None, description="True si actif (CT_Sommeil=0)")
|
|
||||||
type_facture: Optional[int] = Field(
|
|
||||||
None, description="Type facture 0=Facture, 1=BL (CT_Facture)"
|
|
||||||
)
|
|
||||||
est_prospect: Optional[bool] = Field(
|
|
||||||
None, description="True si prospect (CT_Prospect=1)"
|
|
||||||
)
|
|
||||||
bl_en_facture: Optional[int] = Field(
|
|
||||||
None, description="Imprimer BL en facture (CT_BLFact)"
|
|
||||||
)
|
|
||||||
saut_page: Optional[int] = Field(
|
|
||||||
None, description="Saut de page sur documents (CT_Saut)"
|
|
||||||
)
|
|
||||||
validation_echeance: Optional[int] = Field(
|
|
||||||
None, description="Valider les échéances (CT_ValidEch)"
|
|
||||||
)
|
|
||||||
controle_encours: Optional[int] = Field(
|
|
||||||
None, description="Contrôler l'encours (CT_ControlEnc)"
|
|
||||||
)
|
|
||||||
exclure_relance: Optional[bool] = Field(
|
|
||||||
None, description="Exclure des relances (CT_NotRappel)"
|
|
||||||
)
|
|
||||||
exclure_penalites: Optional[bool] = Field(
|
|
||||||
None, description="Exclure des pénalités (CT_NotPenal)"
|
|
||||||
)
|
|
||||||
bon_a_payer: Optional[int] = Field(
|
|
||||||
None, description="Bon à payer obligatoire (CT_BonAPayer)"
|
|
||||||
)
|
|
||||||
|
|
||||||
priorite_livraison: Optional[int] = Field(
|
|
||||||
None, description="Priorité livraison (CT_PrioriteLivr)"
|
|
||||||
)
|
|
||||||
livraison_partielle: Optional[int] = Field(
|
|
||||||
None, description="Livraison partielle (CT_LivrPartielle)"
|
|
||||||
)
|
|
||||||
delai_transport: Optional[int] = Field(
|
|
||||||
None, description="Délai transport jours (CT_DelaiTransport)"
|
|
||||||
)
|
|
||||||
delai_appro: Optional[int] = Field(
|
|
||||||
None, description="Délai appro jours (CT_DelaiAppro)"
|
|
||||||
)
|
|
||||||
|
|
||||||
commentaire: Optional[str] = Field(
|
|
||||||
None, description="Commentaire libre (CT_Commentaire)"
|
|
||||||
)
|
|
||||||
|
|
||||||
section_analytique: Optional[str] = Field(
|
|
||||||
None, description="Section analytique (CA_Num)"
|
|
||||||
)
|
|
||||||
|
|
||||||
mode_reglement_code: Optional[int] = Field(
|
|
||||||
None, description="Code mode règlement (MR_No)"
|
|
||||||
)
|
|
||||||
surveillance_active: Optional[bool] = Field(
|
|
||||||
None, description="Surveillance financière (CT_Surveillance)"
|
|
||||||
)
|
|
||||||
coface: Optional[str] = Field(None, description="Code Coface 25 car. (CT_Coface)")
|
|
||||||
forme_juridique: Optional[str] = Field(
|
|
||||||
None, description="Forme juridique SA, SARL (CT_SvFormeJuri)"
|
|
||||||
)
|
|
||||||
effectif: Optional[str] = Field(
|
|
||||||
None, description="Nombre d'employés (CT_SvEffectif)"
|
|
||||||
)
|
|
||||||
sv_regularite: Optional[str] = Field(
|
|
||||||
None, description="Régularité paiements (CT_SvRegul)"
|
|
||||||
)
|
|
||||||
sv_cotation: Optional[str] = Field(
|
|
||||||
None, description="Cotation crédit (CT_SvCotation)"
|
|
||||||
)
|
|
||||||
sv_objet_maj: Optional[str] = Field(
|
|
||||||
None, description="Objet dernière MAJ (CT_SvObjetMaj)"
|
|
||||||
)
|
|
||||||
sv_chiffre_affaires: Optional[float] = Field(
|
|
||||||
None, description="Chiffre d'affaires (CT_SvCA)"
|
|
||||||
)
|
|
||||||
sv_resultat: Optional[float] = Field(
|
|
||||||
None, description="Résultat financier (CT_SvResultat)"
|
|
||||||
)
|
|
||||||
|
|
||||||
compte_general: Optional[str] = Field(
|
|
||||||
None, description="Compte général principal (CG_NumPrinc)"
|
|
||||||
)
|
|
||||||
categorie_tarif: Optional[int] = Field(
|
|
||||||
None, description="Catégorie tarifaire (N_CatTarif)"
|
|
||||||
)
|
|
||||||
categorie_compta: Optional[int] = Field(
|
|
||||||
None, description="Catégorie comptable (N_CatCompta)"
|
|
||||||
)
|
|
||||||
|
|
||||||
contacts: Optional[List[Contact]] = Field(
|
|
||||||
default_factory=list, description="Liste des contacts du client"
|
|
||||||
)
|
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
json_schema_extra = {
|
json_schema_extra = {
|
||||||
"example": {
|
"example": {
|
||||||
"numero": "CLI000001",
|
"numero": "CLI000001",
|
||||||
"intitule": "SARL EXEMPLE",
|
"intitule": "SARL EXEMPLE",
|
||||||
"type_tiers": 0,
|
"type_tiers": 0,
|
||||||
"qualite": "CLI",
|
|
||||||
"classement": "A",
|
|
||||||
"raccourci": "EXEMPL",
|
|
||||||
"siret": "12345678901234",
|
|
||||||
"tva_intra": "FR12345678901",
|
|
||||||
"code_naf": "6201Z",
|
|
||||||
"contact": "Jean Dupont",
|
|
||||||
"adresse": "123 Rue de la Paix",
|
|
||||||
"complement": "Bâtiment B",
|
|
||||||
"code_postal": "75001",
|
|
||||||
"ville": "Paris",
|
|
||||||
"region": "Île-de-France",
|
|
||||||
"pays": "France",
|
|
||||||
"telephone": "0123456789",
|
|
||||||
"telecopie": "0123456788",
|
|
||||||
"email": "contact@exemple.fr",
|
|
||||||
"site_web": "https://www.exemple.fr",
|
|
||||||
"facebook": "https://facebook.com/exemple",
|
|
||||||
"linkedin": "https://linkedin.com/company/exemple",
|
|
||||||
"taux01": 0.0,
|
|
||||||
"taux02": 0.0,
|
|
||||||
"taux03": 0.0,
|
|
||||||
"taux04": 0.0,
|
|
||||||
"statistique01": "Informatique",
|
|
||||||
"statistique02": "",
|
|
||||||
"statistique03": "",
|
|
||||||
"statistique04": "",
|
|
||||||
"statistique05": "",
|
|
||||||
"statistique06": "",
|
|
||||||
"statistique07": "",
|
|
||||||
"statistique08": "",
|
|
||||||
"statistique09": "",
|
|
||||||
"statistique10": "",
|
|
||||||
"encours_autorise": 50000.0,
|
|
||||||
"assurance_credit": 40000.0,
|
|
||||||
"langue": 0,
|
|
||||||
"commercial_code": 1,
|
"commercial_code": 1,
|
||||||
"lettrage_auto": True,
|
"commercial": {
|
||||||
"est_actif": True,
|
"numero": 1,
|
||||||
"type_facture": 1,
|
"nom": "DUPONT",
|
||||||
"est_prospect": False,
|
"prenom": "Jean",
|
||||||
"bl_en_facture": 0,
|
"email": "j.dupont@entreprise.fr",
|
||||||
"saut_page": 0,
|
},
|
||||||
"validation_echeance": 0,
|
|
||||||
"controle_encours": 1,
|
|
||||||
"exclure_relance": False,
|
|
||||||
"exclure_penalites": False,
|
|
||||||
"bon_a_payer": 0,
|
|
||||||
"priorite_livraison": 1,
|
|
||||||
"livraison_partielle": 1,
|
|
||||||
"delai_transport": 2,
|
|
||||||
"delai_appro": 0,
|
|
||||||
"commentaire": "Client important",
|
|
||||||
"section_analytique": "",
|
|
||||||
"mode_reglement_code": 1,
|
|
||||||
"surveillance_active": True,
|
|
||||||
"coface": "COF12345",
|
|
||||||
"forme_juridique": "SARL",
|
|
||||||
"effectif": "50-99",
|
|
||||||
"sv_regularite": "",
|
|
||||||
"sv_cotation": "",
|
|
||||||
"sv_objet_maj": "",
|
|
||||||
"sv_chiffre_affaires": 2500000.0,
|
|
||||||
"sv_resultat": 150000.0,
|
|
||||||
"compte_general": "4110000",
|
|
||||||
"categorie_tarif": 0,
|
|
||||||
"categorie_compta": 0,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,268 +1,22 @@
|
||||||
from pydantic import BaseModel, Field, EmailStr
|
from pydantic import BaseModel, Field, EmailStr
|
||||||
from typing import List, Optional
|
from typing import Optional
|
||||||
from schemas.tiers.contact import Contact
|
from schemas.tiers.tiers import TiersDetails
|
||||||
|
|
||||||
|
|
||||||
class FournisseurDetails(BaseModel):
|
class FournisseurDetails(TiersDetails):
|
||||||
numero: Optional[str] = Field(None, description="Code fournisseur (CT_Num)")
|
|
||||||
intitule: Optional[str] = Field(
|
|
||||||
None, description="Raison sociale ou Nom complet (CT_Intitule)"
|
|
||||||
)
|
|
||||||
type_tiers: Optional[int] = Field(
|
|
||||||
None, description="Type : 0=Client, 1=Fournisseur (CT_Type)"
|
|
||||||
)
|
|
||||||
qualite: Optional[str] = Field(
|
|
||||||
None, description="Qualité Sage : CLI, FOU, PRO (CT_Qualite)"
|
|
||||||
)
|
|
||||||
classement: Optional[str] = Field(
|
|
||||||
None, description="Code de classement (CT_Classement)"
|
|
||||||
)
|
|
||||||
raccourci: Optional[str] = Field(
|
|
||||||
None, description="Code raccourci 7 car. (CT_Raccourci)"
|
|
||||||
)
|
|
||||||
siret: Optional[str] = Field(None, description="N° SIRET 14 chiffres (CT_Siret)")
|
|
||||||
tva_intra: Optional[str] = Field(
|
|
||||||
None, description="N° TVA intracommunautaire (CT_Identifiant)"
|
|
||||||
)
|
|
||||||
code_naf: Optional[str] = Field(None, description="Code NAF/APE (CT_Ape)")
|
|
||||||
|
|
||||||
contact: Optional[str] = Field(
|
|
||||||
None, description="Nom du contact principal (CT_Contact)"
|
|
||||||
)
|
|
||||||
adresse: Optional[str] = Field(None, description="Adresse ligne 1 (CT_Adresse)")
|
|
||||||
complement: Optional[str] = Field(
|
|
||||||
None, description="Complément d'adresse (CT_Complement)"
|
|
||||||
)
|
|
||||||
code_postal: Optional[str] = Field(None, description="Code postal (CT_CodePostal)")
|
|
||||||
ville: Optional[str] = Field(None, description="Ville (CT_Ville)")
|
|
||||||
region: Optional[str] = Field(None, description="Région/État (CT_CodeRegion)")
|
|
||||||
pays: Optional[str] = Field(None, description="Pays (CT_Pays)")
|
|
||||||
|
|
||||||
telephone: Optional[str] = Field(None, description="Téléphone fixe (CT_Telephone)")
|
|
||||||
telecopie: Optional[str] = Field(None, description="Fax (CT_Telecopie)")
|
|
||||||
email: Optional[str] = Field(None, description="Email principal (CT_EMail)")
|
|
||||||
site_web: Optional[str] = Field(None, description="Site web (CT_Site)")
|
|
||||||
facebook: Optional[str] = Field(None, description="Profil Facebook (CT_Facebook)")
|
|
||||||
linkedin: Optional[str] = Field(None, description="Profil LinkedIn (CT_LinkedIn)")
|
|
||||||
|
|
||||||
taux01: Optional[float] = Field(None, description="Taux personnalisé 1 (CT_Taux01)")
|
|
||||||
taux02: Optional[float] = Field(None, description="Taux personnalisé 2 (CT_Taux02)")
|
|
||||||
taux03: Optional[float] = Field(None, description="Taux personnalisé 3 (CT_Taux03)")
|
|
||||||
taux04: Optional[float] = Field(None, description="Taux personnalisé 4 (CT_Taux04)")
|
|
||||||
|
|
||||||
statistique01: Optional[str] = Field(
|
|
||||||
None, description="Statistique 1 (CT_Statistique01)"
|
|
||||||
)
|
|
||||||
statistique02: Optional[str] = Field(
|
|
||||||
None, description="Statistique 2 (CT_Statistique02)"
|
|
||||||
)
|
|
||||||
statistique03: Optional[str] = Field(
|
|
||||||
None, description="Statistique 3 (CT_Statistique03)"
|
|
||||||
)
|
|
||||||
statistique04: Optional[str] = Field(
|
|
||||||
None, description="Statistique 4 (CT_Statistique04)"
|
|
||||||
)
|
|
||||||
statistique05: Optional[str] = Field(
|
|
||||||
None, description="Statistique 5 (CT_Statistique05)"
|
|
||||||
)
|
|
||||||
statistique06: Optional[str] = Field(
|
|
||||||
None, description="Statistique 6 (CT_Statistique06)"
|
|
||||||
)
|
|
||||||
statistique07: Optional[str] = Field(
|
|
||||||
None, description="Statistique 7 (CT_Statistique07)"
|
|
||||||
)
|
|
||||||
statistique08: Optional[str] = Field(
|
|
||||||
None, description="Statistique 8 (CT_Statistique08)"
|
|
||||||
)
|
|
||||||
statistique09: Optional[str] = Field(
|
|
||||||
None, description="Statistique 9 (CT_Statistique09)"
|
|
||||||
)
|
|
||||||
statistique10: Optional[str] = Field(
|
|
||||||
None, description="Statistique 10 (CT_Statistique10)"
|
|
||||||
)
|
|
||||||
|
|
||||||
encours_autorise: Optional[float] = Field(
|
|
||||||
None, description="Encours maximum autorisé (CT_Encours)"
|
|
||||||
)
|
|
||||||
assurance_credit: Optional[float] = Field(
|
|
||||||
None, description="Montant assurance crédit (CT_Assurance)"
|
|
||||||
)
|
|
||||||
langue: Optional[int] = Field(
|
|
||||||
None, description="Code langue 0=FR, 1=EN (CT_Langue)"
|
|
||||||
)
|
|
||||||
commercial_code: Optional[int] = Field(
|
|
||||||
None, description="Code du commercial (CO_No)"
|
|
||||||
)
|
|
||||||
|
|
||||||
lettrage_auto: Optional[bool] = Field(
|
|
||||||
None, description="Lettrage automatique (CT_Lettrage)"
|
|
||||||
)
|
|
||||||
est_actif: Optional[bool] = Field(None, description="True si actif (CT_Sommeil=0)")
|
|
||||||
type_facture: Optional[int] = Field(
|
|
||||||
None, description="Type facture 0=Facture, 1=BL (CT_Facture)"
|
|
||||||
)
|
|
||||||
est_prospect: Optional[bool] = Field(
|
|
||||||
None, description="True si prospect (CT_Prospect=1)"
|
|
||||||
)
|
|
||||||
bl_en_facture: Optional[int] = Field(
|
|
||||||
None, description="Imprimer BL en facture (CT_BLFact)"
|
|
||||||
)
|
|
||||||
saut_page: Optional[int] = Field(
|
|
||||||
None, description="Saut de page sur documents (CT_Saut)"
|
|
||||||
)
|
|
||||||
validation_echeance: Optional[int] = Field(
|
|
||||||
None, description="Valider les échéances (CT_ValidEch)"
|
|
||||||
)
|
|
||||||
controle_encours: Optional[int] = Field(
|
|
||||||
None, description="Contrôler l'encours (CT_ControlEnc)"
|
|
||||||
)
|
|
||||||
exclure_relance: Optional[bool] = Field(
|
|
||||||
None, description="Exclure des relances (CT_NotRappel)"
|
|
||||||
)
|
|
||||||
exclure_penalites: Optional[bool] = Field(
|
|
||||||
None, description="Exclure des pénalités (CT_NotPenal)"
|
|
||||||
)
|
|
||||||
bon_a_payer: Optional[int] = Field(
|
|
||||||
None, description="Bon à payer obligatoire (CT_BonAPayer)"
|
|
||||||
)
|
|
||||||
|
|
||||||
priorite_livraison: Optional[int] = Field(
|
|
||||||
None, description="Priorité livraison (CT_PrioriteLivr)"
|
|
||||||
)
|
|
||||||
livraison_partielle: Optional[int] = Field(
|
|
||||||
None, description="Livraison partielle (CT_LivrPartielle)"
|
|
||||||
)
|
|
||||||
delai_transport: Optional[int] = Field(
|
|
||||||
None, description="Délai transport jours (CT_DelaiTransport)"
|
|
||||||
)
|
|
||||||
delai_appro: Optional[int] = Field(
|
|
||||||
None, description="Délai appro jours (CT_DelaiAppro)"
|
|
||||||
)
|
|
||||||
|
|
||||||
commentaire: Optional[str] = Field(
|
|
||||||
None, description="Commentaire libre (CT_Commentaire)"
|
|
||||||
)
|
|
||||||
|
|
||||||
section_analytique: Optional[str] = Field(
|
|
||||||
None, description="Section analytique (CA_Num)"
|
|
||||||
)
|
|
||||||
|
|
||||||
mode_reglement_code: Optional[int] = Field(
|
|
||||||
None, description="Code mode règlement (MR_No)"
|
|
||||||
)
|
|
||||||
surveillance_active: Optional[bool] = Field(
|
|
||||||
None, description="Surveillance financière (CT_Surveillance)"
|
|
||||||
)
|
|
||||||
coface: Optional[str] = Field(None, description="Code Coface 25 car. (CT_Coface)")
|
|
||||||
forme_juridique: Optional[str] = Field(
|
|
||||||
None, description="Forme juridique SA, SARL (CT_SvFormeJuri)"
|
|
||||||
)
|
|
||||||
effectif: Optional[str] = Field(
|
|
||||||
None, description="Nombre d'employés (CT_SvEffectif)"
|
|
||||||
)
|
|
||||||
sv_regularite: Optional[str] = Field(
|
|
||||||
None, description="Régularité paiements (CT_SvRegul)"
|
|
||||||
)
|
|
||||||
sv_cotation: Optional[str] = Field(
|
|
||||||
None, description="Cotation crédit (CT_SvCotation)"
|
|
||||||
)
|
|
||||||
sv_objet_maj: Optional[str] = Field(
|
|
||||||
None, description="Objet dernière MAJ (CT_SvObjetMaj)"
|
|
||||||
)
|
|
||||||
sv_chiffre_affaires: Optional[float] = Field(
|
|
||||||
None, description="Chiffre d'affaires (CT_SvCA)"
|
|
||||||
)
|
|
||||||
sv_resultat: Optional[float] = Field(
|
|
||||||
None, description="Résultat financier (CT_SvResultat)"
|
|
||||||
)
|
|
||||||
|
|
||||||
compte_general: Optional[str] = Field(
|
|
||||||
None, description="Compte général principal (CG_NumPrinc)"
|
|
||||||
)
|
|
||||||
categorie_tarif: Optional[int] = Field(
|
|
||||||
None, description="Catégorie tarifaire (N_CatTarif)"
|
|
||||||
)
|
|
||||||
categorie_compta: Optional[int] = Field(
|
|
||||||
None, description="Catégorie comptable (N_CatCompta)"
|
|
||||||
)
|
|
||||||
|
|
||||||
contacts: Optional[List[Contact]] = Field(
|
|
||||||
default_factory=list, description="Liste des contacts du fournisseur"
|
|
||||||
)
|
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
json_schema_extra = {
|
json_schema_extra = {
|
||||||
"example": {
|
"example": {
|
||||||
"numero": "FOU000001",
|
"numero": "FOU000001",
|
||||||
"intitule": "SARL FOURNISSEUR EXEMPLE",
|
"intitule": "SARL FOURNISSEUR",
|
||||||
"type_tiers": 1,
|
"type_tiers": 1,
|
||||||
"qualite": "FOU",
|
|
||||||
"classement": "A",
|
|
||||||
"raccourci": "EXEMPL",
|
|
||||||
"siret": "12345678901234",
|
|
||||||
"tva_intra": "FR12345678901",
|
|
||||||
"code_naf": "6201Z",
|
|
||||||
"contact": "Jean Dupont",
|
|
||||||
"adresse": "123 Rue de la Paix",
|
|
||||||
"complement": "Bâtiment B",
|
|
||||||
"code_postal": "75001",
|
|
||||||
"ville": "Paris",
|
|
||||||
"region": "Île-de-France",
|
|
||||||
"pays": "France",
|
|
||||||
"telephone": "0123456789",
|
|
||||||
"telecopie": "0123456788",
|
|
||||||
"email": "contact@exemple.fr",
|
|
||||||
"site_web": "https://www.exemple.fr",
|
|
||||||
"facebook": "https://facebook.com/exemple",
|
|
||||||
"linkedin": "https://linkedin.com/company/exemple",
|
|
||||||
"taux01": 0.0,
|
|
||||||
"taux02": 0.0,
|
|
||||||
"taux03": 0.0,
|
|
||||||
"taux04": 0.0,
|
|
||||||
"statistique01": "Informatique",
|
|
||||||
"statistique02": "",
|
|
||||||
"statistique03": "",
|
|
||||||
"statistique04": "",
|
|
||||||
"statistique05": "",
|
|
||||||
"statistique06": "",
|
|
||||||
"statistique07": "",
|
|
||||||
"statistique08": "",
|
|
||||||
"statistique09": "",
|
|
||||||
"statistique10": "",
|
|
||||||
"encours_autorise": 50000.0,
|
|
||||||
"assurance_credit": 40000.0,
|
|
||||||
"langue": 0,
|
|
||||||
"commercial_code": 1,
|
"commercial_code": 1,
|
||||||
"lettrage_auto": True,
|
"commercial": {
|
||||||
"est_actif": True,
|
"numero": 1,
|
||||||
"type_facture": 1,
|
"nom": "MARTIN",
|
||||||
"est_prospect": False,
|
"prenom": "Sophie",
|
||||||
"bl_en_facture": 0,
|
"email": "s.martin@entreprise.fr",
|
||||||
"saut_page": 0,
|
},
|
||||||
"validation_echeance": 0,
|
|
||||||
"controle_encours": 1,
|
|
||||||
"exclure_relance": False,
|
|
||||||
"exclure_penalites": False,
|
|
||||||
"bon_a_payer": 0,
|
|
||||||
"priorite_livraison": 1,
|
|
||||||
"livraison_partielle": 1,
|
|
||||||
"delai_transport": 2,
|
|
||||||
"delai_appro": 0,
|
|
||||||
"commentaire": "Client important",
|
|
||||||
"section_analytique": "",
|
|
||||||
"mode_reglement_code": 1,
|
|
||||||
"surveillance_active": True,
|
|
||||||
"coface": "COF12345",
|
|
||||||
"forme_juridique": "SARL",
|
|
||||||
"effectif": "50-99",
|
|
||||||
"sv_regularite": "",
|
|
||||||
"sv_cotation": "",
|
|
||||||
"sv_objet_maj": "",
|
|
||||||
"sv_chiffre_affaires": 2500000.0,
|
|
||||||
"sv_resultat": 150000.0,
|
|
||||||
"compte_general": "4110000",
|
|
||||||
"categorie_tarif": 0,
|
|
||||||
"categorie_compta": 0,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ from pydantic import BaseModel, Field
|
||||||
from schemas.tiers.contact import Contact
|
from schemas.tiers.contact import Contact
|
||||||
from enum import IntEnum
|
from enum import IntEnum
|
||||||
|
|
||||||
|
from schemas.tiers.tiers_collab import Collaborateur
|
||||||
|
|
||||||
|
|
||||||
class TypeTiersInt(IntEnum):
|
class TypeTiersInt(IntEnum):
|
||||||
CLIENT = 0
|
CLIENT = 0
|
||||||
|
|
@ -107,6 +109,9 @@ class TiersDetails(BaseModel):
|
||||||
commercial_code: Optional[int] = Field(
|
commercial_code: Optional[int] = Field(
|
||||||
None, description="Code du commercial (CO_No)"
|
None, description="Code du commercial (CO_No)"
|
||||||
)
|
)
|
||||||
|
commercial: Optional[Collaborateur] = Field(
|
||||||
|
None, description="Détails du commercial/collaborateur"
|
||||||
|
)
|
||||||
|
|
||||||
# FACTURATION
|
# FACTURATION
|
||||||
lettrage_auto: Optional[bool] = Field(
|
lettrage_auto: Optional[bool] = Field(
|
||||||
|
|
|
||||||
54
schemas/tiers/tiers_collab.py
Normal file
54
schemas/tiers/tiers_collab.py
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
from typing import Optional
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
|
|
||||||
|
class Collaborateur(BaseModel):
|
||||||
|
"""Modèle pour un collaborateur/commercial"""
|
||||||
|
|
||||||
|
numero: Optional[int] = Field(None, description="Numéro du collaborateur (CO_No)")
|
||||||
|
nom: Optional[str] = Field(None, description="Nom (CO_Nom)")
|
||||||
|
prenom: Optional[str] = Field(None, description="Prénom (CO_Prenom)")
|
||||||
|
fonction: Optional[str] = Field(None, description="Fonction (CO_Fonction)")
|
||||||
|
adresse: Optional[str] = Field(None, description="Adresse (CO_Adresse)")
|
||||||
|
complement: Optional[str] = Field(
|
||||||
|
None, description="Complément adresse (CO_Complement)"
|
||||||
|
)
|
||||||
|
code_postal: Optional[str] = Field(None, description="Code postal (CO_CodePostal)")
|
||||||
|
ville: Optional[str] = Field(None, description="Ville (CO_Ville)")
|
||||||
|
region: Optional[str] = Field(None, description="Région (CO_CodeRegion)")
|
||||||
|
pays: Optional[str] = Field(None, description="Pays (CO_Pays)")
|
||||||
|
service: Optional[str] = Field(None, description="Service (CO_Service)")
|
||||||
|
est_vendeur: Optional[bool] = Field(None, description="Est vendeur (CO_Vendeur)")
|
||||||
|
est_caissier: Optional[bool] = Field(None, description="Est caissier (CO_Caissier)")
|
||||||
|
est_acheteur: Optional[bool] = Field(None, description="Est acheteur (CO_Acheteur)")
|
||||||
|
telephone: Optional[str] = Field(None, description="Téléphone (CO_Telephone)")
|
||||||
|
telecopie: Optional[str] = Field(None, description="Fax (CO_Telecopie)")
|
||||||
|
email: Optional[str] = Field(None, description="Email (CO_EMail)")
|
||||||
|
tel_portable: Optional[str] = Field(None, description="Portable (CO_TelPortable)")
|
||||||
|
matricule: Optional[str] = Field(None, description="Matricule (CO_Matricule)")
|
||||||
|
facebook: Optional[str] = Field(None, description="Facebook (CO_Facebook)")
|
||||||
|
linkedin: Optional[str] = Field(None, description="LinkedIn (CO_LinkedIn)")
|
||||||
|
skype: Optional[str] = Field(None, description="Skype (CO_Skype)")
|
||||||
|
est_actif: Optional[bool] = Field(None, description="Est actif (CO_Sommeil=0)")
|
||||||
|
est_chef_ventes: Optional[bool] = Field(
|
||||||
|
None, description="Est chef des ventes (CO_ChefVentes)"
|
||||||
|
)
|
||||||
|
chef_ventes_numero: Optional[int] = Field(
|
||||||
|
None, description="N° chef des ventes (CO_NoChefVentes)"
|
||||||
|
)
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
json_schema_extra = {
|
||||||
|
"example": {
|
||||||
|
"numero": 1,
|
||||||
|
"nom": "DUPONT",
|
||||||
|
"prenom": "Jean",
|
||||||
|
"fonction": "Commercial",
|
||||||
|
"service": "Ventes",
|
||||||
|
"est_vendeur": True,
|
||||||
|
"telephone": "0123456789",
|
||||||
|
"email": "j.dupont@entreprise.fr",
|
||||||
|
"tel_portable": "0612345678",
|
||||||
|
"est_actif": True,
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue