filtro para que solo busque los cod_tvisit validos del profesional
This commit is contained in:
+107
@@ -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
|
||||
Reference in New Issue
Block a user