Browse Source

Para mandar correos recordatorios

politica
Celestino Rey 9 months ago
parent
commit
04c346be0f
4 changed files with 57 additions and 1 deletions
  1. +5
    -0
      JugarAlPadel/gestion_reservas/eventos/forms.py
  2. +2
    -0
      JugarAlPadel/gestion_reservas/eventos/urls.py
  3. +44
    -1
      JugarAlPadel/gestion_reservas/eventos/views.py
  4. +6
    -0
      JugarAlPadel/gestion_reservas/templates/eventos/detalle_evento.html

+ 5
- 0
JugarAlPadel/gestion_reservas/eventos/forms.py View File

@ -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)

+ 2
- 0
JugarAlPadel/gestion_reservas/eventos/urls.py View File

@ -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/<int:evento_id>/enviar-correo/', enviar_correo_inscritos, name='enviar_correo_inscritos'),
path('noticias/<int:noticia_id>/', views.detalle_noticia, name='detalle_noticia'),


+ 44
- 1
JugarAlPadel/gestion_reservas/eventos/views.py View File

@ -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)

+ 6
- 0
JugarAlPadel/gestion_reservas/templates/eventos/detalle_evento.html View File

@ -58,6 +58,12 @@
{% if user.is_staff and not evento.evento.publicado %}
<a class="btn btn-danger" href="{% url 'eventos:publicar_evento' evento.id %}">Publicar</a>
{% endif %}
{% if user.is_staff and evento.evento.publicado %}
<a href="{% url 'eventos:enviar_correo_inscritos' evento.id %}" class="btn btn-danger">
📧 Enviar correo a inscritos
</a>
{% endif %}
</div>
</div><!--//card-header-->


Loading…
Cancel
Save