from flask import Flask, render_template, jsonify, Response from conexion import get_connection from dotenv import load_dotenv import os load_dotenv() ip = os.getenv("IPSERVER") puerto = os.getenv("PORT") modo = os.getenv("MODE", "1") monitor1 = os.getenv("MONITOR_ID_1") monitor2 = os.getenv("MONITOR_ID_2") es_quirofano_1 = os.getenv("IS_QUIRO_1") es_quirofano_2 = os.getenv("IS_QUIRO_2") tema = os.getenv("THEME", "csm") tema_styles = { "csm": { "bg1":"#114b94", "bg2":"#0a6eb2" }, "imq": { "bg1":"#CC0C00", "bg2":"#e6392d" } } app = Flask(__name__) def obtener_turnos(mon_id, es_quiro): conn = get_connection() if not conn: return [] try: cursor = conn.cursor() if es_quiro == "1": cursor.execute("SELECT QUIROFANOS.CODIGO_INTERNO AS CONSULTA, 1 AS ESTADO_CONSULTA, NVL (TURNOS.CODIGO_TURNO, NULL) AS TURNO, NVL (TURNOS.ESTADO_ID, 2) AS ESTADO_TURNO FROM (SELECT DISTINCT(CSMK_TURNO.CODIGO_PERSONAL), FP.CODIGO_INTERNO FROM CSMK_TURNO, NOVAHIS.FPERSONA FP WHERE ESTANCIA_ID = 639 AND FECHA = TRUNC(SYSDATE) AND CSMK_TURNO.CODIGO_PERSONAL = FP.CODIGO_PERSONAL) QUIROFANOS LEFT JOIN (SELECT t.* FROM (SELECT CT.CODIGO_PERSONAL, CTM.*, ROW_NUMBER () OVER (PARTITION BY CT.CODIGO_PERSONAL ORDER BY CTM.TURNO_MON_ID DESC) AS RN FROM CSMK_TURNO_MON CTM, CSMK_TURNO CT WHERE CTM.FECHA = TRUNC (SYSDATE) AND CTM.ESTADO_ID IN (1, 2) AND CTM.MONITOR_ID = :monitor AND CTM.TURNO_ID = CT.TURNO_ID) t WHERE t.RN = 1) TURNOS ON QUIROFANOS.CODIGO_PERSONAL = TURNOS.CODIGO_PERSONAL ORDER BY QUIROFANOS.CODIGO_INTERNO ASC",{'monitor':mon_id}) else: cursor.execute("SELECT CONS_ESTADO.CODIGO_IMPRESION AS CONSULTA, CONS_ESTADO.ESTADO_ID AS ESTADO_CONSULTA, NVL(CONS_TURNOS.CODIGO_TURNO, NULL) AS TURNO, NVL(CONS_TURNOS.ESTADO_ID, 2) AS ESTADO_TURNO FROM ( SELECT ROW_NUMBER () OVER ( PARTITION BY ESTADO.ESTANCIA_ID ORDER BY ESTADO.CONSULTA_ESTADO_ID DESC ) AS RN, ESTADO.ESTADO_ID, ESTANCIA.* FROM CSMK_CONSULTA_ESTADO ESTADO JOIN CSMK_ESTANCIA ESTANCIA ON ESTADO.ESTANCIA_ID = ESTANCIA.ESTANCIA_ID WHERE ESTADO.FECHA = TRUNC (SYSDATE) AND ESTANCIA.MONITOR_ID = :monitor ) CONS_ESTADO LEFT JOIN ( SELECT t.* FROM ( SELECT TM.*, ROW_NUMBER() OVER ( PARTITION BY TM.ESTANCIA_ID ORDER BY TM.TURNO_MON_ID DESC ) AS RN FROM CSMK_TURNO_MON TM WHERE TM.FECHA = TRUNC (SYSDATE) AND TM.ESTADO_ID IN (1,2) AND TM.MONITOR_ID = :monitor ) t WHERE t.RN = 1 ) CONS_TURNOS ON CONS_ESTADO.ESTANCIA_ID = CONS_TURNOS.ESTANCIA_ID AND CONS_ESTADO.MONITOR_ID = CONS_TURNOS.MONITOR_ID WHERE CONS_ESTADO.RN = 1 ORDER BY CONSULTA ASC",{'monitor':mon_id}) datos = cursor.fetchall() cursor.close() conn.close() return datos except Exception as e: print(f"Error al conectar: {e}") return None def obtener_pie(mon_id1, mon_id2): conn = get_connection() if not conn: return [] try: cursor = conn.cursor() if modo == "2": cursor.execute("SELECT MENSAJE FROM CSMK_MONITOR_PIE WHERE MONITOR_ID IN (:monitor, :monitor2) AND INACTIVO = 0 ORDER BY MONITOR_ID, MONITOR_PIE_ID ASC",{'monitor':mon_id1, 'monitor2':mon_id2}) else: cursor.execute("SELECT MENSAJE FROM CSMK_MONITOR_PIE WHERE MONITOR_ID IN (:monitor) AND INACTIVO = 0 ORDER BY MONITOR_ID, MONITOR_PIE_ID ASC",{'monitor':mon_id1}) mensajes = [fila[0] for fila in cursor.fetchall()] mensaje_final = "       ".join(mensajes) cursor.close() conn.close() return mensaje_final except Exception as e: print(f"Error al conectar: {e}") return None @app.route('/') def index(): tema_colores = tema_styles.get(tema, tema_styles["csm"]) return render_template("index.html", mode=modo, theme=tema, theme_colors=tema_colores, quiro1=es_quirofano_1, quiro2=es_quirofano_2) @app.route('/api/datos1') def api_datos1(): filas = obtener_turnos(monitor1, es_quirofano_1) return jsonify(filas) @app.route('/api/datos2') def api_datos2(): filas = obtener_turnos(monitor2, es_quirofano_2) return jsonify(filas) @app.route('/api/footer') def api_pie(): mensaje = obtener_pie(monitor1, monitor2) return Response(mensaje, mimetype='text/plain') if __name__ == '__main__': app.run(debug=True,host=ip, port=puerto)