Create new fournisseur
This commit is contained in:
parent
709de0cb2c
commit
ba79354386
2 changed files with 88 additions and 0 deletions
76
api.py
76
api.py
|
|
@ -214,6 +214,36 @@ class UserResponse(BaseModel):
|
||||||
from_attributes = True
|
from_attributes = True
|
||||||
|
|
||||||
|
|
||||||
|
class FournisseurCreateAPIRequest(BaseModel):
|
||||||
|
intitule: str = Field(..., min_length=1, max_length=69, description="Raison sociale du fournisseur")
|
||||||
|
compte_collectif: str = Field("401000", description="Compte comptable fournisseur (ex: 401000)")
|
||||||
|
num: Optional[str] = Field(None, max_length=17, description="Code fournisseur souhaité (optionnel)")
|
||||||
|
adresse: Optional[str] = Field(None, max_length=35)
|
||||||
|
code_postal: Optional[str] = Field(None, max_length=9)
|
||||||
|
ville: Optional[str] = Field(None, max_length=35)
|
||||||
|
pays: Optional[str] = Field(None, max_length=35)
|
||||||
|
email: Optional[EmailStr] = None
|
||||||
|
telephone: Optional[str] = Field(None, max_length=21)
|
||||||
|
siret: Optional[str] = Field(None, max_length=14)
|
||||||
|
tva_intra: Optional[str] = Field(None, max_length=25)
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
json_schema_extra = {
|
||||||
|
"example": {
|
||||||
|
"intitule": "ACME SUPPLIES SARL",
|
||||||
|
"compte_collectif": "401000",
|
||||||
|
"num": "FOUR001",
|
||||||
|
"adresse": "15 Rue du Commerce",
|
||||||
|
"code_postal": "75001",
|
||||||
|
"ville": "Paris",
|
||||||
|
"pays": "France",
|
||||||
|
"email": "contact@acmesupplies.fr",
|
||||||
|
"telephone": "0145678901",
|
||||||
|
"siret": "12345678901234",
|
||||||
|
"tva_intra": "FR12345678901"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# =====================================================
|
# =====================================================
|
||||||
# SERVICES EXTERNES (Universign)
|
# SERVICES EXTERNES (Universign)
|
||||||
# =====================================================
|
# =====================================================
|
||||||
|
|
@ -1819,6 +1849,52 @@ async def rechercher_fournisseurs(query: Optional[str] = Query(None)):
|
||||||
logger.error(f"❌ Erreur recherche fournisseurs: {e}")
|
logger.error(f"❌ Erreur recherche fournisseurs: {e}")
|
||||||
raise HTTPException(500, str(e))
|
raise HTTPException(500, str(e))
|
||||||
|
|
||||||
|
@app.post("/fournisseurs", status_code=201, tags=["Fournisseurs"])
|
||||||
|
async def ajouter_fournisseur(
|
||||||
|
fournisseur: FournisseurCreateAPIRequest,
|
||||||
|
session: AsyncSession = Depends(get_session)
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
➕ Création d'un nouveau fournisseur dans Sage 100c
|
||||||
|
|
||||||
|
**Champs obligatoires:**
|
||||||
|
- `intitule`: Raison sociale (max 69 caractères)
|
||||||
|
|
||||||
|
**Champs optionnels:**
|
||||||
|
- `compte_collectif`: Compte comptable (défaut: 401000)
|
||||||
|
- `num`: Code fournisseur personnalisé (auto-généré si vide)
|
||||||
|
- `adresse`, `code_postal`, `ville`, `pays`
|
||||||
|
- `email`, `telephone`
|
||||||
|
- `siret`, `tva_intra`
|
||||||
|
|
||||||
|
**Retour:**
|
||||||
|
- Fournisseur créé avec son numéro définitif
|
||||||
|
|
||||||
|
**Erreurs possibles:**
|
||||||
|
- 400: Fournisseur existe déjà (doublon)
|
||||||
|
- 500: Erreur technique Sage
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# Appel à la gateway Windows via sage_client
|
||||||
|
nouveau_fournisseur = sage_client.creer_fournisseur(fournisseur.dict())
|
||||||
|
|
||||||
|
logger.info(f"✅ Fournisseur créé via API: {nouveau_fournisseur.get('numero')}")
|
||||||
|
|
||||||
|
return {
|
||||||
|
"success": True,
|
||||||
|
"message": "Fournisseur créé avec succès",
|
||||||
|
"data": nouveau_fournisseur
|
||||||
|
}
|
||||||
|
|
||||||
|
except ValueError as e:
|
||||||
|
# Erreur métier (doublon, validation)
|
||||||
|
logger.warning(f"⚠️ Erreur métier création fournisseur: {e}")
|
||||||
|
raise HTTPException(400, str(e))
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
# Erreur technique (COM, connexion)
|
||||||
|
logger.error(f"❌ Erreur technique création fournisseur: {e}")
|
||||||
|
raise HTTPException(500, str(e))
|
||||||
|
|
||||||
@app.get("/fournisseurs/{code}", tags=["Fournisseurs"])
|
@app.get("/fournisseurs/{code}", tags=["Fournisseurs"])
|
||||||
async def lire_fournisseur(code: str):
|
async def lire_fournisseur(code: str):
|
||||||
|
|
|
||||||
|
|
@ -275,6 +275,18 @@ class SageGatewayClient:
|
||||||
"""Lecture d'un fournisseur par code"""
|
"""Lecture d'un fournisseur par code"""
|
||||||
return self._post("/sage/fournisseurs/get", {"code": code}).get("data")
|
return self._post("/sage/fournisseurs/get", {"code": code}).get("data")
|
||||||
|
|
||||||
|
def creer_fournisseur(self, fournisseur_data: Dict) -> Dict:
|
||||||
|
"""
|
||||||
|
Envoie la requête de création de fournisseur à la gateway Windows.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
fournisseur_data: Dict contenant intitule, compte_collectif, etc.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Fournisseur créé avec son numéro définitif
|
||||||
|
"""
|
||||||
|
return self._post("/sage/fournisseurs/create", fournisseur_data).get("data", {})
|
||||||
|
|
||||||
# =====================================================
|
# =====================================================
|
||||||
# AVOIRS
|
# AVOIRS
|
||||||
# =====================================================
|
# =====================================================
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue