|
|
@ -6,7 +6,13 @@ 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 |
|
|
|
|
|
|
|
|
import logging |
|
|
|
|
|
|
|
|
|
|
|
from django.core.mail import send_mass_mail |
|
|
|
|
|
from django.core.mail import BadHeaderError |
|
|
|
|
|
from smtplib import SMTPException |
|
|
|
|
|
|
|
|
|
|
|
from django.http import HttpResponse |
|
|
|
|
|
|
|
|
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 |
|
|
@ -15,6 +21,8 @@ from .serializers import EventoSerializer, ReservaSerializer, ListaEsperaSeriali |
|
|
from .models import Evento, Reserva, ListaEspera, Noticia |
|
|
from .models import Evento, Reserva, ListaEspera, Noticia |
|
|
from .forms import ListaEsperaForm, EventoForm, MensajeCorreoForm |
|
|
from .forms import ListaEsperaForm, EventoForm, MensajeCorreoForm |
|
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
@login_required |
|
|
def reservar_evento(request, evento_id): |
|
|
def reservar_evento(request, evento_id): |
|
|
@ -300,6 +308,7 @@ def api_detalle_noticia(request, noticia_id): |
|
|
def es_admin(user): |
|
|
def es_admin(user): |
|
|
return user.is_staff |
|
|
return user.is_staff |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@user_passes_test(es_admin) # Solo administradores pueden acceder |
|
|
@user_passes_test(es_admin) # Solo administradores pueden acceder |
|
|
def enviar_correo_inscritos(request, evento_id): |
|
|
def enviar_correo_inscritos(request, evento_id): |
|
|
evento = get_object_or_404(Evento, id=evento_id) |
|
|
evento = get_object_or_404(Evento, id=evento_id) |
|
|
@ -307,31 +316,43 @@ def enviar_correo_inscritos(request, evento_id): |
|
|
|
|
|
|
|
|
if not inscritos: |
|
|
if not inscritos: |
|
|
messages.warning(request, "No hay usuarios inscritos en este evento.") |
|
|
messages.warning(request, "No hay usuarios inscritos en este evento.") |
|
|
return redirect('detalle_evento', evento_id=evento.id) |
|
|
|
|
|
|
|
|
return redirect('eventos:detalle_evento', evento_id=evento.id) |
|
|
|
|
|
|
|
|
destinatarios = [reserva.usuario.email for reserva in inscritos if reserva.usuario.email] |
|
|
destinatarios = [reserva.usuario.email for reserva in inscritos if reserva.usuario.email] |
|
|
|
|
|
|
|
|
if not destinatarios: |
|
|
if not destinatarios: |
|
|
messages.warning(request, "No hay correos disponibles para los inscritos.") |
|
|
messages.warning(request, "No hay correos disponibles para los inscritos.") |
|
|
return redirect('detalle_evento', evento_id=evento.id) |
|
|
|
|
|
|
|
|
return redirect('eventos:detalle_evento', evento_id=evento.id) |
|
|
|
|
|
|
|
|
if request.method == "POST": |
|
|
if request.method == "POST": |
|
|
form = MensajeCorreoForm(request.POST) |
|
|
form = MensajeCorreoForm(request.POST) |
|
|
if form.is_valid(): |
|
|
if form.is_valid(): |
|
|
asunto = form.cleaned_data['asunto'] |
|
|
|
|
|
mensaje = form.cleaned_data['mensaje'] |
|
|
|
|
|
|
|
|
asunto_usuario = form.cleaned_data['asunto'] |
|
|
|
|
|
mensaje_usuario = form.cleaned_data['mensaje'] |
|
|
|
|
|
|
|
|
|
|
|
asunto = f"{asunto_usuario} - {evento.nombre}" |
|
|
|
|
|
|
|
|
send_mail( |
|
|
|
|
|
asunto, |
|
|
|
|
|
mensaje, |
|
|
|
|
|
settings.DEFAULT_FROM_EMAIL, |
|
|
|
|
|
destinatarios, |
|
|
|
|
|
fail_silently=False |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
firma = "\n\n\nSaludos, \n\nPádel entre amigos" |
|
|
|
|
|
mensaje = f"{mensaje_usuario}{firma}" |
|
|
|
|
|
|
|
|
|
|
|
mensaje_comun = (asunto, mensaje, settings.DEFAULT_FROM_EMAIL, destinatarios) |
|
|
|
|
|
mensaje_final = [mensaje_comun] |
|
|
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
|
send_mass_mail(mensaje_final, fail_silently=False) |
|
|
|
|
|
except BadHeaderError: |
|
|
|
|
|
return HttpResponse('Encabezado inválido encontrado.') |
|
|
|
|
|
except SMTPException as e: |
|
|
|
|
|
return HttpResponse(f'Error de SMTP: {e}') |
|
|
|
|
|
except Exception as e: |
|
|
|
|
|
return HttpResponse(f'Ocurrió un error: {e}') |
|
|
|
|
|
|
|
|
|
|
|
logger.debug('Correo enviado') |
|
|
|
|
|
|
|
|
messages.success(request, f"Correo enviado a {len(destinatarios)} inscritos.") |
|
|
messages.success(request, f"Correo enviado a {len(destinatarios)} inscritos.") |
|
|
return redirect('detalle_evento', evento_id=evento.id) |
|
|
|
|
|
|
|
|
return redirect('eventos:detalle_evento', evento_id=evento.id) |
|
|
else: |
|
|
else: |
|
|
form = MensajeCorreoForm() |
|
|
form = MensajeCorreoForm() |
|
|
|
|
|
|
|
|
return redirect('eventos:detalle_evento', evento_id=evento.id) |
|
|
|
|
|
|
|
|
return render(request, 'eventos/enviar_correo_inscritos.html', {'form': form, 'evento': evento}) |
|
|
|
|
|
|