Update fournisseur

This commit is contained in:
Fanilo-Nantenaina 2025-12-06 15:17:15 +03:00
parent ba79354386
commit a5dd81ddfb
2 changed files with 84 additions and 0 deletions

67
api.py
View file

@ -244,6 +244,28 @@ class FournisseurCreateAPIRequest(BaseModel):
}
}
class FournisseurUpdateRequest(BaseModel):
"""Modèle pour modification d'un fournisseur existant"""
intitule: Optional[str] = Field(None, min_length=1, max_length=69)
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 MODIFIÉ",
"email": "nouveau@acme.fr",
"telephone": "0198765432"
}
}
# =====================================================
# SERVICES EXTERNES (Universign)
# =====================================================
@ -1896,6 +1918,51 @@ async def ajouter_fournisseur(
logger.error(f"❌ Erreur technique création fournisseur: {e}")
raise HTTPException(500, str(e))
@app.put("/fournisseurs/{code}", tags=["Fournisseurs"])
async def modifier_fournisseur(
code: str,
fournisseur_update: FournisseurUpdateRequest,
session: AsyncSession = Depends(get_session)
):
"""
Modification d'un fournisseur existant
Args:
code: Code du fournisseur à modifier
fournisseur_update: Champs à mettre à jour (seuls les champs fournis seront modifiés)
Returns:
Fournisseur modifié avec ses nouvelles valeurs
Example:
PUT /fournisseurs/DUPONT
{
"email": "nouveau@email.fr",
"telephone": "0198765432"
}
"""
try:
# Appel à la gateway Windows
resultat = sage_client.modifier_fournisseur(code, fournisseur_update.dict(exclude_none=True))
logger.info(f"✅ Fournisseur {code} modifié avec succès")
return {
"success": True,
"message": f"Fournisseur {code} modifié avec succès",
"fournisseur": resultat
}
except ValueError as e:
# Erreur métier (fournisseur introuvable, etc.)
logger.warning(f"Erreur métier modification fournisseur {code}: {e}")
raise HTTPException(404, str(e))
except Exception as e:
# Erreur technique
logger.error(f"Erreur technique modification fournisseur {code}: {e}")
raise HTTPException(500, str(e))
@app.get("/fournisseurs/{code}", tags=["Fournisseurs"])
async def lire_fournisseur(code: str):
"""📄 Lecture d'un fournisseur par code"""

View file

@ -287,6 +287,23 @@ class SageGatewayClient:
"""
return self._post("/sage/fournisseurs/create", fournisseur_data).get("data", {})
def modifier_fournisseur(self, code: str, fournisseur_data: Dict) -> Dict:
"""
Modification d'un fournisseur existant
Args:
code: Code du fournisseur à modifier
fournisseur_data: Dictionnaire contenant les champs à modifier
(seuls les champs présents seront mis à jour)
Returns:
Fournisseur modifié
"""
return self._post("/sage/fournisseurs/update", {
"code": code,
"fournisseur_data": fournisseur_data
}).get("data", {})
# =====================================================
# AVOIRS
# =====================================================