Compare commits
13
Commits
c6e587d494
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
819e5f1669 | ||
|
|
344d27749d | ||
|
|
0dddc26343 | ||
|
|
6949396ba6 | ||
|
|
f90ae1682b | ||
|
|
5b8c936f0e | ||
|
|
2bc50b4320 | ||
|
|
e011ba6a8e | ||
|
|
db4441c4d5 | ||
|
|
346053e0f3 | ||
|
|
0ed336b919 | ||
|
|
d0a7788794 | ||
|
|
b1c9af364f |
+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
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
{"ultimo_guardia": 569107396}
|
{"ultimo_guardia": 1110851005}
|
||||||
@@ -12,10 +12,10 @@ logging.basicConfig(
|
|||||||
)
|
)
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
# Token del bot de Telegram (reemplaza con tu token)
|
# Token del bot de Telegram
|
||||||
TOKEN = "1859561736:AAESVsdzTXmO8GjbifI4GihIQZuGqA3tNuk"
|
TOKEN = "1859561736:AAESVsdzTXmO8GjbifI4GihIQZuGqA3tNuk"
|
||||||
|
|
||||||
# ID del grupo de alertas (reemplaza con el ID real del grupo)
|
# ID del grupo de alertas
|
||||||
GRUPO_ALERTAS_ID = -1002252938840
|
GRUPO_ALERTAS_ID = -1002252938840
|
||||||
|
|
||||||
# Función asíncrona para enviar un mensaje al grupo de guardias
|
# Función asíncrona para enviar un mensaje al grupo de guardias
|
||||||
|
|||||||
Submodule python-utilities deleted from 30a6443dcd
+42
-10
@@ -10,6 +10,7 @@ from telegram.ext import (
|
|||||||
import json
|
import json
|
||||||
import datetime
|
import datetime
|
||||||
import pytz
|
import pytz
|
||||||
|
import sys
|
||||||
|
|
||||||
# Define la zona horaria
|
# Define la zona horaria
|
||||||
TIMEZONE = pytz.timezone("Europe/Madrid")
|
TIMEZONE = pytz.timezone("Europe/Madrid")
|
||||||
@@ -83,12 +84,18 @@ async def manejar_respuesta(update: Update, context: CallbackContext):
|
|||||||
|
|
||||||
# Invitar al nuevo guardia al grupo de alertas
|
# Invitar al nuevo guardia al grupo de alertas
|
||||||
try:
|
try:
|
||||||
await context.bot.unban_chat_member(chat_id=GRUPO_ALERTAS_ID, user_id=usuario)
|
if usuario not in USUARIOS_EXCLUIDOS:
|
||||||
mensaje = (
|
await context.bot.unban_chat_member(chat_id=GRUPO_ALERTAS_ID, user_id=usuario)
|
||||||
"¡Gracias por confirmar que estás de guardia esta semana!\n\n"
|
mensaje = (
|
||||||
f"Únete al grupo de alertas usando este enlace: {ENLACE_INVITACION}"
|
"¡Gracias por confirmar que estás de guardia esta semana!\n\n"
|
||||||
)
|
f"Únete al grupo de alertas usando este enlace: {ENLACE_INVITACION}"
|
||||||
await context.bot.send_message(chat_id=usuario, text=mensaje)
|
)
|
||||||
|
await context.bot.send_message(chat_id=usuario, text=mensaje)
|
||||||
|
else:
|
||||||
|
mensaje = (
|
||||||
|
"Muy gracioso. Si tu siempre estás de guardia parguelas!!!"
|
||||||
|
)
|
||||||
|
await context.bot.send_message(chat_id=usuario, text=mensaje)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error al invitar al usuario {usuario}: {e}")
|
logger.error(f"Error al invitar al usuario {usuario}: {e}")
|
||||||
|
|
||||||
@@ -97,13 +104,38 @@ async def manejar_respuesta(update: Update, context: CallbackContext):
|
|||||||
guardar_guardia(data)
|
guardar_guardia(data)
|
||||||
|
|
||||||
elif respuesta in ['no', 'No', '0']:
|
elif respuesta in ['no', 'No', '0']:
|
||||||
await context.bot.send_message(chat_id=usuario, text="Gracias por responder. Como no estás de guardia esta semana, te sacamos del grupo.")
|
if usuario not in USUARIOS_EXCLUIDOS:
|
||||||
await context.bot.ban_chat_member(chat_id=GRUPO_ALERTAS_ID, user_id=usuario)
|
await context.bot.send_message(chat_id=usuario, text="Gracias por responder. Como no estás de guardia esta semana, te sacamos del grupo.")
|
||||||
|
await context.bot.ban_chat_member(chat_id=GRUPO_ALERTAS_ID, user_id=usuario)
|
||||||
|
else:
|
||||||
|
await context.bot.send_message(chat_id=usuario, text="Gracias por responder, pero estás en la lista de pringaos que no se escapan de las notificaciones. Te quedas en el grupo.")
|
||||||
else:
|
else:
|
||||||
await context.bot.send_message(chat_id=usuario, text="No entiendo tu respuesta. Responde con un 1 o un Si, si estás de guardia. Con un 0 o un No en caso contrario. Gracias")
|
await context.bot.send_message(chat_id=usuario, text="No entiendo tu respuesta. Responde con un 1 o un Si, si estás de guardia. Con un 0 o un No en caso contrario. Gracias")
|
||||||
|
|
||||||
|
def next_monday():
|
||||||
|
# Obtener la fecha actual
|
||||||
|
hoy = datetime.datetime.now(TIMEZONE)
|
||||||
|
|
||||||
|
# Calcular cuántos días faltan para el próximo lunes
|
||||||
|
# weekday() devuelve 0 para lunes, 1 para martes, ..., 6 para domingo
|
||||||
|
dias_para_lunes = (0 - hoy.weekday()) % 7
|
||||||
|
|
||||||
|
# Si hoy es lunes, dias_para_lunes será 0, por lo que devolvemos hoy
|
||||||
|
# Si no, sumamos los días que faltan para el próximo lunes
|
||||||
|
if dias_para_lunes == 0:
|
||||||
|
return hoy
|
||||||
|
else:
|
||||||
|
return hoy + datetime.timedelta(days=dias_para_lunes)
|
||||||
|
|
||||||
|
|
||||||
# Función principal para iniciar el bot
|
# Función principal para iniciar el bot
|
||||||
def main():
|
def main():
|
||||||
|
# si ya es martes, paramos la ejecución del bot hasta el lunes que viene:
|
||||||
|
# Obtener la fecha actual
|
||||||
|
hoy = datetime.datetime.now(TIMEZONE)
|
||||||
|
if hoy == 1:
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
# El token del bot
|
# El token del bot
|
||||||
application = ApplicationBuilder().token("1859561736:AAESVsdzTXmO8GjbifI4GihIQZuGqA3tNuk").build()
|
application = ApplicationBuilder().token("1859561736:AAESVsdzTXmO8GjbifI4GihIQZuGqA3tNuk").build()
|
||||||
|
|
||||||
@@ -113,8 +145,8 @@ def main():
|
|||||||
# Programar el mensaje de guardia
|
# Programar el mensaje de guardia
|
||||||
ahora = datetime.datetime.now(TIMEZONE)
|
ahora = datetime.datetime.now(TIMEZONE)
|
||||||
|
|
||||||
proximo_lunes = ahora + datetime.timedelta(days=(7 - ahora.weekday()))
|
proximo_lunes = next_monday()
|
||||||
proximo_lunes = proximo_lunes.replace(hour=8, minute=25, second=0, microsecond=0)
|
proximo_lunes = proximo_lunes.replace(hour=8, minute=30, second=0, microsecond=0)
|
||||||
|
|
||||||
logger.info(f"La fecha actual es {ahora} y el mensaje se enviará {proximo_lunes}")
|
logger.info(f"La fecha actual es {ahora} y el mensaje se enviará {proximo_lunes}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user