diff --git a/app/routes/automation.py b/app/routes/automation.py index 3d1967b..12296f1 100644 --- a/app/routes/automation.py +++ b/app/routes/automation.py @@ -76,6 +76,57 @@ async def automation_page(request: Request, user: dict = Depends(get_current_use }) +@router.post("/preview") +async def preview_automation( + request: Request, + user: dict = Depends(get_current_user), + fecha: str = Form(...), +): + conn = get_connection() + configs = {row["key"]: row["value"] for row in conn.execute("SELECT * FROM config").fetchall()} + conn.close() + + fb, fb_ok, fb_msg = get_firebird_from_config(configs) + if not fb_ok: + return JSONResponse({"success": False, "message": f"Error Firebird: {fb_msg}"}) + + fecha_ini = f"{fecha} 00:00:00" + fecha_fin = f"{fecha} 23:59:59" + params = {"fecha_ini": fecha_ini, "fecha_fin": fecha_fin} + + ok1, err1, rows_pac = fb.execute_query(_SQL_PACIENTES, params) + if not ok1: + fb.disconnect() + return JSONResponse({"success": False, "message": f"Error BD pacientes: {err1}"}) + + ok2, err2, rows_rda = fb.execute_query(_SQL_RDA, params) + fb.disconnect() + if not ok2: + return JSONResponse({"success": False, "message": f"Error BD RDA: {err2}"}) + + grupos = agrupar_por_recepcion(rows_rda) + total_examenes = sum(len(v) for v in grupos.values()) + + pacientes_preview = [ + { + "doc": str(p.get("DOCIDENT", "")), + "nombre": f"{p.get('NOMBRES', '')} {p.get('APELLIDOS', '')}".strip(), + "tipo": str(p.get("TIPOIDENT", "")), + } + for p in rows_pac[:10] + ] + + return JSONResponse({ + "success": True, + "fecha": fecha, + "pacientes": len(rows_pac), + "recepciones": len(grupos), + "examenes": total_examenes, + "pacientes_preview": pacientes_preview, + "hay_mas": len(rows_pac) > 10, + }) + + @router.post("/run") async def run_automation( request: Request, diff --git a/app/routes/config.py b/app/routes/config.py index 13ae93d..5bd8677 100644 --- a/app/routes/config.py +++ b/app/routes/config.py @@ -1,7 +1,8 @@ from fastapi import APIRouter, Request, Form, Depends -from fastapi.responses import RedirectResponse +from fastapi.responses import JSONResponse, RedirectResponse from app.database import get_connection from app.auth import get_current_user +from app.services.api_client import get_tns_token router = APIRouter(prefix="/config", tags=["config"]) @@ -45,6 +46,20 @@ async def config_page(request: Request, user: dict = Depends(get_current_user)): }) +@router.post("/test-tns") +async def test_tns( + request: Request, + user: dict = Depends(get_current_user), + empresa: str = Form(""), + usuario: str = Form(""), + password: str = Form(""), +): + token, err = await get_tns_token(empresa, usuario, password) + if token: + return JSONResponse({"success": True, "message": "Login TNS exitoso"}) + return JSONResponse({"success": False, "message": err or "Error desconocido"}) + + @router.post("/save") async def config_save(request: Request, user: dict = Depends(get_current_user)): form = await request.form() diff --git a/app/routes/terceros.py b/app/routes/terceros.py index 33871b1..fb99c02 100644 --- a/app/routes/terceros.py +++ b/app/routes/terceros.py @@ -79,8 +79,12 @@ async def preview_query( if not ok: return JSONResponse({"success": False, "message": f"Error Firebird: {msg}"}) + if ":doc_num" in q["query_text"] and not doc_num: + fb.disconnect() + return JSONResponse({"success": False, "message": "Ingresa el número de documento para buscar el paciente"}) + params = {} - if ":doc_num" in q["query_text"] and doc_num: + if ":doc_num" in q["query_text"]: params["doc_num"] = doc_num if ":fecha_ini" in q["query_text"]: params["fecha_ini"] = "1900-01-01" @@ -124,9 +128,13 @@ async def send_terceros( if not ok: return JSONResponse({"success": False, "message": f"Error Firebird: {msg}"}) + if ":doc_num" in q["query_text"] and not doc_num: + fb.disconnect() + return JSONResponse({"success": False, "message": "Ingresa el número de documento"}) + params = {} if ":doc_num" in q["query_text"]: - params["doc_num"] = doc_num or configs.get("doc_num_default", "") + params["doc_num"] = doc_num success, error, rows = fb.execute_query(q["query_text"], params if params else None) fb.disconnect() diff --git a/app/routes/transaccion.py b/app/routes/transaccion.py index 44ab0bf..a75be7e 100644 --- a/app/routes/transaccion.py +++ b/app/routes/transaccion.py @@ -53,12 +53,13 @@ async def preview_transaccion( if not ok: return JSONResponse({"success": False, "message": f"Error Firebird: {msg}"}) + if ":num_factura" in q["query_text"] and not factura: + fb.disconnect() + return JSONResponse({"success": False, "message": "Ingresa el número de factura"}) + params = {"fecha_ini": fecha_inicio, "fecha_fin": fecha_fin} - if ":num_factura" in q["query_text"] and factura: - params["num_factura"] = factura - prefijo = configs.get("api_prefijo", "") - if prefijo: - params["prefijo"] = prefijo + if ":num_factura" in q["query_text"]: + params["num_factura"] = int(factura) if factura.isdigit() else factura success, error, rows = fb.execute_query(q["query_text"], params) fb.disconnect() @@ -101,12 +102,13 @@ async def send_transaccion( if not ok: return JSONResponse({"success": False, "message": f"Error Firebird: {msg}"}) + if ":num_factura" in q["query_text"] and not factura: + fb.disconnect() + return JSONResponse({"success": False, "message": "Ingresa el número de factura"}) + params = {"fecha_ini": fecha_inicio, "fecha_fin": fecha_fin} - if ":num_factura" in q["query_text"] and factura: - params["num_factura"] = factura - prefijo = configs.get("api_prefijo", "") - if prefijo: - params["prefijo"] = prefijo + if ":num_factura" in q["query_text"]: + params["num_factura"] = int(factura) if factura.isdigit() else factura success, error, rows = fb.execute_query(q["query_text"], params) fb.disconnect() diff --git a/app/templates/automation.html b/app/templates/automation.html index 4cfe87f..94f8cfb 100644 --- a/app/templates/automation.html +++ b/app/templates/automation.html @@ -11,7 +11,7 @@ Envío automático por fecha

- Selecciona una fecha, el sistema enviará todos los pacientes y sus RDA a TNS. + Selecciona una fecha para ver cuántos pacientes y RDA se enviarán a TNS.

@@ -21,15 +21,49 @@
+ + + + Esperando... - + @@ -55,14 +88,67 @@ Esperando... - +