From d3c74725d6cc0a6d66a0611e068574c4666e7410 Mon Sep 17 00:00:00 2001 From: Administrator Date: Fri, 9 Oct 2026 13:47:01 -0500 Subject: [PATCH] Actualizar backend/main.py --- backend/main.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/backend/main.py b/backend/main.py index 16730a0..9646d12 100644 --- a/backend/main.py +++ b/backend/main.py @@ -337,6 +337,33 @@ def get_subir_base_asesores(): raise HTTPException(status_code=500, detail=str(e)) +@app.get("/api/exportar-base/asesores") +def get_exportar_base_asesores(): + """Asesores (agents) de Chatwoot en vivo, para elegir en Exportar Base.""" + try: + return services.exportar_base_asesores() + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@app.get("/api/exportar-base") +def get_exportar_base(asesor: str = Query(...), etiquetas: list[str] = Query(None)): + """Descarga la base de leads de UN asesor (dedup por teléfono más antiguo, + SEDE_ACT por asesor, última etiqueta) como Excel. 'etiquetas' filtra por + última etiqueta (vacío = todas).""" + from fastapi.responses import StreamingResponse + from io import BytesIO + try: + data = services.exportar_base_excel(asesor, etiquetas) + nombre = "".join(ch for ch in asesor if ch.isalnum() or ch in " _-").strip().replace(" ", "_") + headers = {"Content-Disposition": f"attachment; filename=base_{nombre or 'asesor'}.xlsx"} + return StreamingResponse(BytesIO(data), + media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + headers=headers) + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + @app.post("/api/subir-base/enviar") def post_subir_base_enviar(payload: dict = Body(...)): """Sube una base de números: crea contacto (o usa el existente), le asigna