diff --git a/main.py b/main.py index 84b70a5..196a550 100644 --- a/main.py +++ b/main.py @@ -490,13 +490,18 @@ def lire_document(numero: str, type_doc: int): @app.post("/sage/documents/transform", dependencies=[Depends(verify_token)]) def transformer_document( numero_source: str = Query(..., description="Numéro du document source"), - type_source: int = Query(..., ge=0, le=5, description="Type du document source"), - type_cible: int = Query(..., ge=0, le=5, description="Type du document cible"), + type_source: int = Query( + ..., + ge=0, + le=5, + description="Type document source (0=Devis, 3=Commande, 5=Facture)", + ), + type_cible: int = Query(..., ge=0, le=5, description="Type document cible"), ): """ - 🔧 Transformation de document (devis → commande, etc.) + 🔧 Transformation de document (devis → commande → facture) - ✅ CORRECTION: Utilise Query params au lieu de TransformationRequest + ✅ CORRECTION FINALE: Query params au lieu de body JSON Types de documents: - 0: Devis @@ -505,38 +510,60 @@ def transformer_document( - 3: Commande - 4: Préparation - 5: Facture + + Transformations valides: + - Devis (0) → Commande (3) + - Devis (0) → Facture (5) + - Commande (3) → Bon livraison (1) + - Commande (3) → Facture (5) + - Bon livraison (1) → Facture (5) """ try: - # Validation de la transformation + logger.info( + f"🔄 Transformation demandée: {numero_source} " + f"(type {type_source}) → type {type_cible}" + ) + + # Validation des transformations autorisées transformations_valides = { (0, 3), # Devis → Commande - (0, 5), # Devis → Facture (rare) + (0, 5), # Devis → Facture (3, 1), # Commande → Bon de livraison (3, 5), # Commande → Facture (1, 5), # Bon de livraison → Facture } if (type_source, type_cible) not in transformations_valides: + logger.error( + f"❌ Transformation non autorisée: {type_source} → {type_cible}" + ) raise HTTPException( - 400, f"Transformation non autorisée: {type_source} → {type_cible}" + 400, + f"Transformation non autorisée: type {type_source} → type {type_cible}. " + f"Transformations valides: {transformations_valides}", ) - # Vérifier que le document source existe - logger.info( - f"🔄 Début transformation: {numero_source} ({type_source}) → type {type_cible}" - ) - + # Appel au connecteur Sage resultat = sage.transformer_document(numero_source, type_source, type_cible) - logger.info(f"✅ Transformation réussie: {resultat}") + logger.info( + f"✅ Transformation réussie: {numero_source} → " + f"{resultat.get('document_cible', '?')} " + f"({resultat.get('nb_lignes', 0)} lignes)" + ) return {"success": True, "data": resultat} except HTTPException: raise + except ValueError as e: + # Erreurs métier (document introuvable, déjà transformé, etc.) + logger.error(f"❌ Erreur métier transformation: {e}") + raise HTTPException(400, str(e)) except Exception as e: - logger.error(f"❌ Erreur transformation: {e}", exc_info=True) - raise HTTPException(500, str(e)) + # Erreurs techniques (COM, Sage, etc.) + logger.error(f"❌ Erreur technique transformation: {e}", exc_info=True) + raise HTTPException(500, f"Erreur transformation: {str(e)}") @app.post("/sage/documents/champ-libre", dependencies=[Depends(verify_token)])