Forgot all modifications that were done !
This commit is contained in:
parent
a729b812eb
commit
eba4011dd4
4 changed files with 5569 additions and 169 deletions
80
main.py
80
main.py
|
|
@ -1615,6 +1615,86 @@ def lire_mouvement_stock(numero: str):
|
|||
logger.error(f"❌ Erreur lecture mouvement : {e}")
|
||||
raise HTTPException(500, str(e))
|
||||
|
||||
@app.get("/sage/modeles/list")
|
||||
def lister_modeles_disponibles():
|
||||
"""Liste tous les modèles .bgc disponibles pour chaque type de document"""
|
||||
try:
|
||||
modeles = sage.lister_modeles_crystal()
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"data": modeles
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Erreur listage modèles: {e}")
|
||||
raise HTTPException(500, str(e))
|
||||
|
||||
|
||||
@app.get("/sage/documents/{numero}/pdf", dependencies=[Depends(verify_token)])
|
||||
def generer_pdf_document(
|
||||
numero: str,
|
||||
type_doc: int = Query(..., description="Type document (0=devis, 60=facture, etc.)"),
|
||||
modele: str = Query(None, description="Nom du modèle .bgc (optionnel)"),
|
||||
base64_encode: bool = Query(True, description="Retourner en base64")
|
||||
):
|
||||
"""
|
||||
📄 Génère un PDF d'un document Sage avec le modèle spécifié
|
||||
"""
|
||||
try:
|
||||
# ✅ LOG pour debug
|
||||
logger.info(f"📄 PDF Request: numero={numero}, type={type_doc}, modele={modele}, base64={base64_encode}")
|
||||
|
||||
# Générer le PDF
|
||||
pdf_bytes = sage.generer_pdf_document(
|
||||
numero=numero,
|
||||
type_doc=type_doc,
|
||||
modele=modele
|
||||
)
|
||||
|
||||
if not pdf_bytes:
|
||||
raise HTTPException(404, f"Impossible de générer le PDF pour {numero}")
|
||||
|
||||
# ✅ LOG taille PDF
|
||||
logger.info(f"✅ PDF généré: {len(pdf_bytes)} octets")
|
||||
|
||||
if base64_encode:
|
||||
# Retour en JSON avec base64
|
||||
import base64
|
||||
pdf_base64 = base64.b64encode(pdf_bytes).decode('utf-8')
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"data": {
|
||||
"numero": numero,
|
||||
"type": type_doc,
|
||||
"modele": modele or "défaut",
|
||||
"pdf_base64": pdf_base64,
|
||||
"size_bytes": len(pdf_bytes),
|
||||
"size_readable": f"{len(pdf_bytes) / 1024:.1f} KB"
|
||||
}
|
||||
}
|
||||
else:
|
||||
# Retour direct du fichier PDF
|
||||
from fastapi.responses import Response
|
||||
|
||||
return Response(
|
||||
content=pdf_bytes,
|
||||
media_type="application/pdf",
|
||||
headers={
|
||||
"Content-Disposition": f'inline; filename="{numero}.pdf"',
|
||||
"Content-Length": str(len(pdf_bytes)) # ✅ Taille explicite
|
||||
}
|
||||
)
|
||||
|
||||
except HTTPException:
|
||||
raise
|
||||
except ValueError as e:
|
||||
logger.error(f"❌ Erreur métier: {e}")
|
||||
raise HTTPException(400, str(e))
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Erreur technique: {e}", exc_info=True)
|
||||
raise HTTPException(500, str(e))
|
||||
|
||||
|
||||
# =====================================================
|
||||
# LANCEMENT
|
||||
|
|
|
|||
4514
main.py.bak
Normal file
4514
main.py.bak
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -6,3 +6,4 @@ python-multipart
|
|||
python-dotenv
|
||||
pywin32
|
||||
pyodbc
|
||||
reportlab
|
||||
1125
sage_connector.py
1125
sage_connector.py
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue