Better catch for errors

This commit is contained in:
Fanilo-Nantenaina 2025-12-07 06:53:21 +03:00
parent 608ba12c50
commit b7a8af5ed5

57
api.py
View file

@ -1040,26 +1040,67 @@ async def envoyer_devis_email(
@app.put("/devis/{id}/statut", tags=["US-A1"])
async def changer_statut_devis(id: str, nouveau_statut: int = Query(..., ge=0, le=5)):
async def changer_statut_devis(
id: str,
nouveau_statut: int = Query(..., ge=0, le=6, description="0=Brouillon, 2=Accepté, 5=Transformé, 6=Annulé")
):
"""
📄 Changement de statut d'un devis via gateway Windows
📊 Changement de statut d'un devis
**Statuts possibles:**
- 0: Brouillon
- 2: Accepté/Validé
- 5: Transformé (automatique lors d'une transformation)
- 6: Annulé
**Restrictions:**
- Un devis transformé (5) ne peut plus changer de statut
- Un devis annulé (6) ne peut plus changer de statut
Args:
id: Numéro du devis
nouveau_statut: Nouveau statut (0-6)
Returns:
Confirmation du changement avec ancien et nouveau statut
"""
try:
# ✅ APPEL VIA SAGE_CLIENT (HTTP vers Windows)
# Vérifier que le devis existe
devis_existant = sage_client.lire_devis(id)
if not devis_existant:
raise HTTPException(404, f"Devis {id} introuvable")
statut_actuel = devis_existant.get("statut", 0)
# Vérifications de cohérence
if statut_actuel == 5:
raise HTTPException(
400,
f"Le devis {id} a déjà été transformé et ne peut plus changer de statut"
)
if statut_actuel == 6:
raise HTTPException(
400,
f"Le devis {id} est annulé et ne peut plus changer de statut"
)
resultat = sage_client.changer_statut_devis(id, nouveau_statut)
logger.info(f"✅ Statut devis {id} changé: {nouveau_statut}")
logger.info(f"✅ Statut devis {id} changé: {statut_actuel}{nouveau_statut}")
return {
"success": True,
"devis_id": id,
"statut_ancien": resultat.get("statut_ancien"),
"statut_nouveau": resultat.get("statut_nouveau"),
"message": "Statut mis à jour avec succès",
"statut_ancien": resultat.get("statut_ancien", statut_actuel),
"statut_nouveau": resultat.get("statut_nouveau", nouveau_statut),
"message": f"Statut mis à jour: {statut_actuel}{nouveau_statut}"
}
except HTTPException:
raise
except Exception as e:
logger.error(f"Erreur changement statut: {e}")
logger.error(f"Erreur changement statut devis {id}: {e}")
raise HTTPException(500, str(e))