diff --git a/api.py b/api.py index dff2e31..2c946c8 100644 --- a/api.py +++ b/api.py @@ -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))