Update: Modifico el código para permitir ver dos estancias en un mismo monitor
This commit is contained in:
@@ -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
@@ -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
|
||||||
@@ -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; }
|
||||||
|
|||||||
@@ -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);
|
||||||
+21
-5
@@ -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>
|
||||||
Reference in New Issue
Block a user