diff --git a/api.py b/api.py index 81e7e3a..555f6b7 100644 --- a/api.py +++ b/api.py @@ -148,7 +148,19 @@ class BaremeRemiseResponse(BaseModel): message: str -# À ajouter dans api.py après les imports et avant les endpoints existants +class ClientCreateAPIRequest(BaseModel): + intitule: str = Field(..., min_length=1, description="Raison sociale ou Nom") + compte_collectif: str = Field("411000", description="Compte Comptable (ex: 411000)") + num: Optional[str] = Field(None, description="Code client souhaité (optionnel)") + adresse: Optional[str] = None + code_postal: Optional[str] = None + ville: Optional[str] = None + pays: Optional[str] = None + email: Optional[EmailStr] = None + telephone: Optional[str] = None + siret: Optional[str] = None + tva_intra: Optional[str] = None + from pydantic import BaseModel from typing import List, Optional @@ -356,6 +368,30 @@ async def rechercher_clients(query: Optional[str] = Query(None)): logger.error(f"Erreur recherche clients: {e}") raise HTTPException(500, str(e)) +@app.post("/clients", status_code=201, tags=["US-A8"]) +async def ajouter_client( + client: ClientCreateAPIRequest, + session: AsyncSession = Depends(get_session) +): + """ + ➕ Création d'un nouveau client dans Sage 100c + """ + try: + nouveau_client = sage_client.creer_client(client.dict()) + + logger.info(f"✅ Client créé via API: {nouveau_client.get('numero')}") + + return { + "success": True, + "message": "Client créé avec succès", + "client": nouveau_client + } + + except Exception as e: + logger.error(f"Erreur lors de la création du client: {e}") + # On renvoie une 400 si c'est une erreur métier (ex: doublon), sinon 500 + status = 400 if "existe déjà" in str(e) else 500 + raise HTTPException(status, str(e)) @app.get("/articles", response_model=List[ArticleResponse], tags=["US-A1"]) async def rechercher_articles(query: Optional[str] = Query(None)): diff --git a/sage_client.py b/sage_client.py index bc5568f..0037c63 100644 --- a/sage_client.py +++ b/sage_client.py @@ -331,6 +331,14 @@ class SageGatewayClient: return r.json() except: return {"status": "down"} + + def creer_client(self, client_data: Dict) -> Dict: + """ + Envoie la requête de création de client à la gateway Windows. + :param client_data: Dict contenant intitule, compte_collectif, etc. + """ + # On appelle la route définie dans main.py + return self._post("/sage/clients/create", client_data).get("data", {}) # Instance globale