Update: Modifico el código para permitir ver dos estancias en un mismo monitor

This commit is contained in:
2025-07-29 12:56:55 +02:00
parent be25cdd16d
commit 917bef33be
5 changed files with 50 additions and 24 deletions
+18 -11
View File
@@ -4,17 +4,19 @@ from dotenv import load_dotenv
import os import os
load_dotenv() load_dotenv()
monitor = os.getenv("MONITOR_ID")
monitor1 = os.getenv("MONITOR_ID_1")
monitor2 = os.getenv("MONITOR_ID_2")
app = Flask(__name__) app = Flask(__name__)
def obtener_turnos(): def obtener_turnos(mon_id):
conn = get_connection() conn = get_connection()
if not conn: if not conn:
return [] return []
try: try:
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute("SELECT CONS_ESTAD.CODIGO_IMPRESION CONSULTA, CONS_ESTAD.ESTADO_ID ESTADO_CONSULTA, TM.CODIGO_TURNO TURNO, TM.ESTADO_ID ESTADO_TURNO FROM CSMK_TURNO_MON TM, (SELECT ROW_NUMBER() OVER (PARTITION BY ESTADO.ESTANCIA_ID ORDER BY CONSULTA_ESTADO_ID DESC) AS RN, ESTADO.ESTADO_ID, ESTANCIA.* FROM CSMK_CONSULTA_ESTADO ESTADO, CSMK_ESTANCIA ESTANCIA WHERE ESTADO.FECHA = TRUNC (SYSDATE) AND ESTADO.ESTANCIA_ID = ESTANCIA.ESTANCIA_ID AND ESTANCIA.MONITOR_ID = :monitor ORDER BY ESTADO.CONSULTA_ESTADO_ID DESC) CONS_ESTAD WHERE CONS_ESTAD.RN = 1 AND TM.ESTANCIA_ID = CONS_ESTAD.ESTANCIA_ID AND TM.MONITOR_ID = CONS_ESTAD.MONITOR_ID AND TM.ESTADO_ID IN (1,2) AND TM.FECHA = TRUNC(SYSDATE) ORDER BY CONSULTA ASC",{'monitor':monitor}) cursor.execute("SELECT CONS_ESTAD.CODIGO_IMPRESION CONSULTA, CONS_ESTAD.ESTADO_ID ESTADO_CONSULTA, TM.CODIGO_TURNO TURNO, TM.ESTADO_ID ESTADO_TURNO FROM CSMK_TURNO_MON TM, (SELECT ROW_NUMBER() OVER (PARTITION BY ESTADO.ESTANCIA_ID ORDER BY CONSULTA_ESTADO_ID DESC) AS RN, ESTADO.ESTADO_ID, ESTANCIA.* FROM CSMK_CONSULTA_ESTADO ESTADO, CSMK_ESTANCIA ESTANCIA WHERE ESTADO.FECHA = TRUNC (SYSDATE) AND ESTADO.ESTANCIA_ID = ESTANCIA.ESTANCIA_ID AND ESTANCIA.MONITOR_ID = :monitor ORDER BY ESTADO.CONSULTA_ESTADO_ID DESC) CONS_ESTAD WHERE CONS_ESTAD.RN = 1 AND TM.ESTANCIA_ID = CONS_ESTAD.ESTANCIA_ID AND TM.MONITOR_ID = CONS_ESTAD.MONITOR_ID AND TM.ESTADO_ID IN (1,2) AND TM.FECHA = TRUNC(SYSDATE) ORDER BY CONSULTA ASC",{'monitor':mon_id})
datos = cursor.fetchall() datos = cursor.fetchall()
cursor.close() cursor.close()
conn.close() conn.close()
@@ -23,15 +25,15 @@ def obtener_turnos():
print(f"Error al conectar: {e}") print(f"Error al conectar: {e}")
return None return None
def obtener_pie(): def obtener_pie(mon_id):
conn = get_connection() conn = get_connection()
if not conn: if not conn:
return [] return []
try: try:
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute("SELECT MENSAJE FROM CSMK_MONITOR_PIE WHERE MONITOR_ID = :monitor AND INACTIVO = 0 ORDER BY MONITOR_PIE_ID ASC",{'monitor':monitor}) cursor.execute("SELECT MENSAJE FROM CSMK_MONITOR_PIE WHERE MONITOR_ID = :monitor AND INACTIVO = 0 ORDER BY MONITOR_PIE_ID ASC",{'monitor':mon_id})
mensajes = [fila[0] for fila in cursor.fetchall()] mensajes = [fila[0] for fila in cursor.fetchall()]
mensaje_final = " ".join(mensajes) mensaje_final = "          ".join(mensajes)
cursor.close() cursor.close()
conn.close() conn.close()
return mensaje_final return mensaje_final
@@ -43,15 +45,20 @@ def obtener_pie():
def index(): def index():
return render_template("index.html") return render_template("index.html")
@app.route('/api/datos') @app.route('/api/datos1')
def api_datos(): def api_datos1():
filas = obtener_turnos() filas = obtener_turnos(monitor1)
return jsonify(filas)
@app.route('/api/datos2')
def api_datos2():
filas = obtener_turnos(monitor2)
return jsonify(filas) return jsonify(filas)
@app.route('/api/footer') @app.route('/api/footer')
def api_pie(): def api_pie():
mensaje = obtener_pie() mensaje = obtener_pie(1)
return Response(mensaje, mimetype='text/plain') return Response(mensaje, mimetype='text/plain')
if __name__ == '__main__': if __name__ == '__main__':
app.run(debug=True) app.run(debug=True,host='192.168.82.156')
+2 -1
View File
@@ -3,4 +3,5 @@ DB_PASSWORD=CSMKIOSCOS
DB_HOST=192.168.1.76 DB_HOST=192.168.1.76
DB_PORT=1521 DB_PORT=1521
DB_SID=REALRAC1 DB_SID=REALRAC1
MONITOR_ID=12 MONITOR_ID_1=1
MONITOR_ID_2=2
-2
View File
@@ -8,11 +8,9 @@
} }
.animate-scroll { .animate-scroll {
display: inline-block;
animation: scroll 45s linear infinite; animation: scroll 45s linear infinite;
} }
@keyframes blink { @keyframes blink {
0%, 100% { background-color: #0a6eb2} 0%, 100% { background-color: #0a6eb2}
50% { background-color: #ffff00; color: black; } 50% { background-color: #ffff00; color: black; }
+9 -5
View File
@@ -3,11 +3,11 @@ const estadoAnterior = {};
let ultimoFooter = ""; let ultimoFooter = "";
function cargarTabla() { function cargarTabla(endpoint, tablaId) {
fetch("/api/datos") fetch(endpoint)
.then(res => res.json()) .then(res => res.json())
.then(filas => { .then(filas => {
const tbody = document.getElementById("turnos"); const tbody = document.getElementById(tablaId);
tbody.innerHTML = ""; tbody.innerHTML = "";
let sizeClass = ""; let sizeClass = "";
@@ -75,7 +75,11 @@ function cargarFooter() {
}); });
} }
function actualizarTablas(){
cargarTabla("/api/datos1","turnos1");
cargarTabla("/api/datos2","turnos2");
}
cargarFooter(); cargarFooter();
cargarTabla(); actualizarTablas();
setInterval(cargarTabla, 30000); setInterval(actualizarTablas, 30000);
setInterval(cargarFooter, 45000); setInterval(cargarFooter, 45000);
+20 -4
View File
@@ -15,9 +15,21 @@
<div id="hora" class="text-7xl font-bold text-[#696969]"></div> <div id="hora" class="text-7xl font-bold text-[#696969]"></div>
</header> </header>
<div class="flex flex-col md:flex-row gap-4 p-4 bg-gray-100 h-[783px]"> <div class="flex flex-col md:flex-row gap-4 p-4 bg-gray-100 h-[783px]">
<div class="md:w-1/2 w-full flex items-center bg-black"> <!--<div class="md:w-1/2 w-full flex items-center bg-black">
<video src="{{ url_for('static', filename='media/CSM-HD.mp4') }}" class="w-full shadow-md" autoplay muted loop <video src="{{ url_for('static', filename='media/CSM-HD.mp4') }}" class="w-full shadow-md" autoplay muted loop
preload="metadata"></video> preload="metadata"></video>
</div>-->
<div class="md:w-1/2 w-full overflow-auto h-[751px]">
<table class="min-w-full text-center text-white text-3xl table-fixed border-collapse h-full">
<thead>
<tr class="h-[90px]">
<th class="border px-4 py-2 bg-[#114b94]">CONSULTA</th>
<th class="border px-4 py-2 bg-[#0a6eb2]">TURNO</th>
</tr>
</thead>
<tbody id="turnos1">
</tbody>
</table>
</div> </div>
<div class="md:w-1/2 w-full overflow-auto h-[751px]"> <div class="md:w-1/2 w-full overflow-auto h-[751px]">
<table class="min-w-full text-center text-white text-3xl table-fixed border-collapse h-full"> <table class="min-w-full text-center text-white text-3xl table-fixed border-collapse h-full">
@@ -27,18 +39,22 @@
<th class="border px-4 py-2 bg-[#0a6eb2]">TURNO</th> <th class="border px-4 py-2 bg-[#0a6eb2]">TURNO</th>
</tr> </tr>
</thead> </thead>
<tbody id="turnos"> <tbody id="turnos2">
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
<footer class="w-full bg-[#008968] overflow-hidden h-14 flex items-center"> <footer class="w-full h-14 bg-[#008968] flex items-center overflow-hidden">
<div id="scroll-wrapper" class="whitespace-nowrap absolute w-max animate-scroll text-white text-3xl px-4 flex gap-16">
</div>
</footer>
<!--<footer class="w-full bg-[#008968] overflow-hidden h-14 flex items-center">
<div class="scroll-wrapper whitespace-nowrap w-max animate-scroll"> <div class="scroll-wrapper whitespace-nowrap w-max animate-scroll">
<span id="footer-text" class="text-white text-3xl px-4 "></span> <span id="footer-text" class="text-white text-3xl px-4 "></span>
<span class="spacer w-14 inline-block"></span> <span class="spacer w-14 inline-block"></span>
<span id="footer-text-duplicate" class="text-white text-3xl px-4"></span> <span id="footer-text-duplicate" class="text-white text-3xl px-4"></span>
</div> </div>
<div id="footer-text" class="whitespace-pre text-3xl animate-scroll whitespace-nowrap px-4 text-white"></div> <div id="footer-text" class="whitespace-pre text-3xl animate-scroll whitespace-nowrap px-4 text-white"></div>
</footer> </footer>-->
</body> </body>
</html> </html>