From 04c346be0fe44db84cfc92f9c8f13c258e0a59e2 Mon Sep 17 00:00:00 2001 From: Celestino Rey Date: Mon, 3 Mar 2025 17:14:17 +0100 Subject: [PATCH] Para mandar correos recordatorios --- .../gestion_reservas/eventos/forms.py | 5 +++ JugarAlPadel/gestion_reservas/eventos/urls.py | 2 + .../gestion_reservas/eventos/views.py | 45 ++++++++++++++++++- .../templates/eventos/detalle_evento.html | 6 +++ 4 files changed, 57 insertions(+), 1 deletion(-) diff --git a/JugarAlPadel/gestion_reservas/eventos/forms.py b/JugarAlPadel/gestion_reservas/eventos/forms.py index 3eb7e30..4928cee 100644 --- a/JugarAlPadel/gestion_reservas/eventos/forms.py +++ b/JugarAlPadel/gestion_reservas/eventos/forms.py @@ -18,3 +18,8 @@ class ListaEsperaForm(forms.ModelForm): class Meta: model = ListaEspera fields = [] + + +class MensajeCorreoForm(forms.Form): + asunto = forms.CharField(label="Asunto", max_length=200, required=True, widget=forms.TextInput(attrs={'class': 'form-control'})) + mensaje = forms.CharField(label="Mensaje", widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 4}), required=True) \ No newline at end of file diff --git a/JugarAlPadel/gestion_reservas/eventos/urls.py b/JugarAlPadel/gestion_reservas/eventos/urls.py index 7c7152e..e4a4ad6 100644 --- a/JugarAlPadel/gestion_reservas/eventos/urls.py +++ b/JugarAlPadel/gestion_reservas/eventos/urls.py @@ -5,6 +5,7 @@ from .views import api_lista_eventos, api_detalle_evento from .views import api_lista_reservas, api_detalle_reserva from .views import api_lista_listaespera, api_detalle_listaespera from .views import api_lista_noticias, api_detalle_noticia +from .views import enviar_correo_inscritos app_name = 'eventos' @@ -15,6 +16,7 @@ urlpatterns = [ path('eventos/ayuda/', views.ayuda, name='ayuda'), path('eventos/crear/', views.crear_evento, name='crear_evento'), # URL para crear un evento path('eventos/editar/', views.editar_evento, name='editar_evento'), # URL para crear un evento + path('eventos//enviar-correo/', enviar_correo_inscritos, name='enviar_correo_inscritos'), path('noticias//', views.detalle_noticia, name='detalle_noticia'), diff --git a/JugarAlPadel/gestion_reservas/eventos/views.py b/JugarAlPadel/gestion_reservas/eventos/views.py index 136a24d..9173ada 100644 --- a/JugarAlPadel/gestion_reservas/eventos/views.py +++ b/JugarAlPadel/gestion_reservas/eventos/views.py @@ -6,12 +6,14 @@ from django.conf import settings from django.template.loader import render_to_string from django.utils import timezone +from django.core.mail import send_mail + from rest_framework.response import Response from rest_framework.decorators import api_view from .serializers import EventoSerializer, ReservaSerializer, ListaEsperaSerializer, NoticiaSerializer from .models import Evento, Reserva, ListaEspera, Noticia -from .forms import ListaEsperaForm, EventoForm +from .forms import ListaEsperaForm, EventoForm, MensajeCorreoForm @login_required @@ -292,3 +294,44 @@ def api_detalle_noticia(request, noticia_id): return Response(serializer.data) except Noticia.DoesNotExist: return Response({'error': 'Noticia no encontrado'}, status=404) + + +# Verifica si el usuario es administrador +def es_admin(user): + return user.is_staff + +@user_passes_test(es_admin) # Solo administradores pueden acceder +def enviar_correo_inscritos(request, evento_id): + evento = get_object_or_404(Evento, id=evento_id) + inscritos = Reserva.objects.filter(evento=evento).select_related('usuario') + + if not inscritos: + messages.warning(request, "No hay usuarios inscritos en este evento.") + return redirect('detalle_evento', evento_id=evento.id) + + destinatarios = [reserva.usuario.email for reserva in inscritos if reserva.usuario.email] + + if not destinatarios: + messages.warning(request, "No hay correos disponibles para los inscritos.") + return redirect('detalle_evento', evento_id=evento.id) + + if request.method == "POST": + form = MensajeCorreoForm(request.POST) + if form.is_valid(): + asunto = form.cleaned_data['asunto'] + mensaje = form.cleaned_data['mensaje'] + + send_mail( + asunto, + mensaje, + settings.DEFAULT_FROM_EMAIL, + destinatarios, + fail_silently=False + ) + + messages.success(request, f"Correo enviado a {len(destinatarios)} inscritos.") + return redirect('detalle_evento', evento_id=evento.id) + else: + form = MensajeCorreoForm() + + return redirect('eventos:detalle_evento', evento_id=evento.id) \ No newline at end of file diff --git a/JugarAlPadel/gestion_reservas/templates/eventos/detalle_evento.html b/JugarAlPadel/gestion_reservas/templates/eventos/detalle_evento.html index 5150090..b42e5da 100644 --- a/JugarAlPadel/gestion_reservas/templates/eventos/detalle_evento.html +++ b/JugarAlPadel/gestion_reservas/templates/eventos/detalle_evento.html @@ -58,6 +58,12 @@ {% if user.is_staff and not evento.evento.publicado %} Publicar {% endif %} + + {% if user.is_staff and evento.evento.publicado %} + + 📧 Enviar correo a inscritos + + {% endif %}