From 344d27749d3acb1756292173ea589dd257202067 Mon Sep 17 00:00:00 2001 From: JJ Date: Thu, 3 Jul 2025 13:34:51 +0200 Subject: [PATCH] filtro para que solo busque los cod_tvisit validos del profesional --- cita_pronto.py | 107 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 cita_pronto.py diff --git a/cita_pronto.py b/cita_pronto.py new file mode 100644 index 0000000..b68981d --- /dev/null +++ b/cita_pronto.py @@ -0,0 +1,107 @@ +import cx_Oracle +import telegram +import asyncio +from datetime import datetime + +async def main(): + # Configuración de la base de datos Oracle + oracle_user = 'NOVAHIS' + oracle_password = 'NOVAHIS' + oracle_host = 'realrac.grupoimq.local' + oracle_port = '1521' + oracle_service_name = 'realrac.grupoimq.local' # O nombre de SID, según corresponda + + # Configuración del bot de Telegram + telegram_token = '1859561736:AAESVsdzTXmO8GjbifI4GihIQZuGqA3tNuk' + chat_id = '132308323' #=> JJ + #chat_id = '5657990119' => Yanire + #chat_id = '127382235' #=> Victor + + # Establece la conexión con la base de datos Oracle + dsn = cx_Oracle.makedsn(oracle_host, oracle_port, service_name=oracle_service_name) + connection = cx_Oracle.connect(oracle_user, oracle_password, dsn) + + # 11971 = Partarrieu + # 11027 = Ana Garcia (Gine) + # 10727 = Andonegui + # 638 = Alfaro + # 10756 = Cipriain + # 1000129 = Juanes del Valle (Trauma) + # 195 = Larrañeta + # 11240 = Murie + # 11643 = Zubicaray + # 11289 = Henry Medina + # 12013 = Urrutia (Trauma) + # 12023 = Circelli (Trauma) + # 10457 = Barroso + # 12210 = Agudo (Trauma) + # 12071 = Ordoñez (Trauma) + # 12013 = Urrutia Graña (Trauma) + # 10887 = Ciaurriz + # 12070 = Gabriela del Carmen Madrid (Cardio) + + # Listas de códigos y nombres + # Es el listado de médicos para los que buscamos citas disponibles. Hay que tener cuidado de poner + # en el mismo orden el codigo del medico y su nombre en los dos arrays para que el mensaje que manda sea + # coherente + + # codigos = ['11971', '11027', '10727', '195', '638', '11109', '10756', '1000129'] + # nombres = ['Partarrieu', 'Ana Garcia', 'Andonegui', 'Larrañeta', 'Alfaro', 'Cruz', 'Cipriain', 'Juanes'] + codigos = ['12070'] + nombres = ['Gabriela Del Carmen'] + # Número de días para buscar citas disponibles. Es decir, buscar citas en los próximos "n" días. + dias = 16 + + for codigo, nombre in zip(codigos, nombres): + # Obtenemos primero los cod_tvisit válidos para este profesional + # SELECT distinct(vd.COD_TVISIT) + # FROM citaonline.CSMCITA_ACTOS ca, novahis.PREST_POR_TVIS ppt, citaonline.VCITAS_DISPONIBLES vd + # WHERE ca.PREST_ITEM_PK = ppt.PREST_ITEM_PK AND ca.ACTIVO_SN = 1 AND ca.CITA_SN = 1 + # AND ca.SERVICIO_ID = vd.SERVICIO_ID AND ppt.COD_TVISIT = vd.COD_TVISIT + # AND vd.CODIGO_PERSONAL = 12070 + + query = f"SELECT distinct(vd.COD_TVISIT) FROM citaonline.CSMCITA_ACTOS ca, novahis.PREST_POR_TVIS ppt, citaonline.VCITAS_DISPONIBLES vd WHERE ca.PREST_ITEM_PK = ppt.PREST_ITEM_PK AND ca.ACTIVO_SN = 1 AND ca.CITA_SN = 1 AND ca.SERVICIO_ID = vd.SERVICIO_ID AND ppt.COD_TVISIT = vd.COD_TVISIT AND vd.CODIGO_PERSONAL = {codigo}" + cursor = connection.cursor() + cursor.execute(query) + result = cursor.fetchall()[0] + + sql = "" + if result: + values = [row['COD_TVISIT'].strip() for row in result] + sql_values = ", ".join(f"'{value}'" for value in values) + sql = f" and vd.cod_tvisit in ({sql_values})" + + + # Realiza la consulta + query = f"SELECT count(*) FROM CAGENDAS c, TTIPOVIS t WHERE c.CODIGO_PERSONAL = {codigo} AND FECHA >= SYSDATE + 1 AND fecha < SYSDATE + {dias} AND COD_ESTADO = 'LI' AND c.COD_TVISIT = t.COD_TVISIT AND t.NOM_TVISIT NOT LIKE '%TUDE%' {sql}" + cursor = connection.cursor() + cursor.execute(query) + result = cursor.fetchone()[0] + + if result > 0: + # Envia un mensaje a Telegram + bot = telegram.Bot(token=telegram_token) + message = f"Se han liberado {result} citas para {nombre} pronto" + await bot.send_message(chat_id=chat_id, text=message) + else: + # Obtiene la fecha y hora actual + now = datetime.now() + current_time = now.strftime("%Y-%m-%d %H:%M:%S") + print(f"{current_time}: No hay citas disponibles para {nombre} en los próximos {dias} dias") + # bot = telegram.Bot(token=telegram_token) + # message = f"{current_time}: No hay citas disponibles para {nombre} en los próximos {dias} dias" + # await bot.send_message(chat_id=chat_id, text=message) + + # Cierra la conexion con la base de datos + cursor.close() + connection.close() + +if __name__ == '__main__': + loop = asyncio.new_event_loop() + #loop = asyncio.get_event_loop() + #loop.run_until_complete(main()) + asyncio.set_event_loop(loop) + try: + asyncio.run(main()) + except KeyboardInterrupt: + pass