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: class Meta:
model = ListaEspera model = ListaEspera
fields = [] 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_reservas, api_detalle_reserva
from .views import api_lista_listaespera, api_detalle_listaespera from .views import api_lista_listaespera, api_detalle_listaespera
from .views import api_lista_noticias, api_detalle_noticia from .views import api_lista_noticias, api_detalle_noticia
from .views import enviar_correo_inscritos
app_name = 'eventos' app_name = 'eventos'
@ -15,6 +16,7 @@ urlpatterns = [
path('eventos/ayuda/', views.ayuda, name='ayuda'), path('eventos/ayuda/', views.ayuda, name='ayuda'),
path('eventos/crear/', views.crear_evento, name='crear_evento'), # URL para crear un evento 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/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'), 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.template.loader import render_to_string
from django.utils import timezone from django.utils import timezone
from django.core.mail import send_mail
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.decorators import api_view from rest_framework.decorators import api_view
from .serializers import EventoSerializer, ReservaSerializer, ListaEsperaSerializer, NoticiaSerializer from .serializers import EventoSerializer, ReservaSerializer, ListaEsperaSerializer, NoticiaSerializer
from .models import Evento, Reserva, ListaEspera, Noticia from .models import Evento, Reserva, ListaEspera, Noticia
from .forms import ListaEsperaForm, EventoForm
from .forms import ListaEsperaForm, EventoForm, MensajeCorreoForm
@login_required @login_required
@ -292,3 +294,44 @@ def api_detalle_noticia(request, noticia_id):
return Response(serializer.data) return Response(serializer.data)
except Noticia.DoesNotExist: except Noticia.DoesNotExist:
return Response({'error': 'Noticia no encontrado'}, status=404) 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 %} {% if user.is_staff and not evento.evento.publicado %}
<a class="btn btn-danger" href="{% url 'eventos:publicar_evento' evento.id %}">Publicar</a> <a class="btn btn-danger" href="{% url 'eventos:publicar_evento' evento.id %}">Publicar</a>
{% endif %} {% 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>
</div><!--//card-header--> </div><!--//card-header-->


Loading…
Cancel
Save