From e3d046ce0e97eab03d71a175ef8cb4f7b8191817 Mon Sep 17 00:00:00 2001 From: pixelotes Date: Wed, 14 Jan 2026 16:17:31 +0100 Subject: [PATCH] fix: emails sent to all approvers --- src/email_service.py | 12 ++++++++++-- src/routes/ausencias.py | 30 ++++++++++++++++-------------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/email_service.py b/src/email_service.py index c56ae3e..44c59ba 100644 --- a/src/email_service.py +++ b/src/email_service.py @@ -61,8 +61,16 @@ def enviar_email_solicitud(aprobador, solicitante, solicitud): recipients=[aprobador.email] ) + + # Construir lista de aprobadores para el mensaje + if len(aprobadores) > 1: + nombres_aprobadores = ', '.join([a.nombre for a in aprobadores]) + nota_aprobadores = f'\n(Notificados: {nombres_aprobadores})\n' + else: + nota_aprobadores = '' + msg.body = f''' -Hola {aprobador.nombre}, +Hola {aprobadores[0].nombre}, {solicitante.nombre} ha solicitado vacaciones: @@ -70,7 +78,7 @@ def enviar_email_solicitud(aprobador, solicitante, solicitud): - Hasta: {solicitud.fecha_fin} - Días solicitados: {solicitud.dias_solicitados} - Motivo: {solicitud.motivo or 'No especificado'} - +{nota_aprobadores} Por favor, revisa y responde a esta solicitud en el sistema. Saludos, diff --git a/src/routes/ausencias.py b/src/routes/ausencias.py index a57f8f0..3663c3f 100644 --- a/src/routes/ausencias.py +++ b/src/routes/ausencias.py @@ -193,16 +193,18 @@ def cancelar_vacaciones(id): db.session.add(nueva_solicitud) db.session.commit() - # Enviar Email al Aprobador - aprobador = None + # Enviar Email a TODOS los Aprobadores + aprobadores = [] if current_user.aprobadores: - aprobador = current_user.aprobadores[0].aprobador + aprobadores = [rel.aprobador for rel in current_user.aprobadores] else: - aprobador = Usuario.query.filter_by(rol='admin').first() + admin = Usuario.query.filter_by(rol='admin').first() + if admin: + aprobadores = [admin] - if aprobador: + if aprobadores: from src.email_service import enviar_email_solicitud - enviar_email_solicitud(aprobador, current_user, nueva_solicitud) + enviar_email_solicitud(aprobadores, current_user, nueva_solicitud) flash('Solicitud de cancelación enviada para aprobación.', 'info') return redirect(url_for('ausencias.listar_vacaciones')) @@ -292,18 +294,18 @@ def modificar_vacaciones(id): db.session.add(nueva_version) db.session.commit() - # Enviar Email al Aprobador (si tiene) - # Buscamos aprobador asignado. Si no hay, a los admins. - # (Lógica simplificada: Si no hay aprobador directo, usar admin genérico o primer admin) - aprobador = None + # Enviar Email a TODOS los Aprobadores + aprobadores = [] if current_user.aprobadores: - aprobador = current_user.aprobadores[0].aprobador + aprobadores = [rel.aprobador for rel in current_user.aprobadores] else: - aprobador = Usuario.query.filter_by(rol='admin').first() + admin = Usuario.query.filter_by(rol='admin').first() + if admin: + aprobadores = [admin] - if aprobador: + if aprobadores: from src.email_service import enviar_email_solicitud - enviar_email_solicitud(aprobador, current_user, nueva_version) + enviar_email_solicitud(aprobadores, current_user, nueva_version) flash('Solicitud de modificación enviada correctamente. Tu responsable ha sido notificado.', 'success') return redirect(url_for('ausencias.listar_vacaciones'))