|
@@ -1,6 +1,8 @@
|
|
|
from django.shortcuts import render, get_object_or_404, redirect
|
|
from django.shortcuts import render, get_object_or_404, redirect
|
|
|
from django.contrib.auth.decorators import login_required, user_passes_test
|
|
from django.contrib.auth.decorators import login_required, user_passes_test
|
|
|
from django.contrib import messages
|
|
from django.contrib import messages
|
|
|
|
|
+from django.contrib.admin.views.decorators import staff_member_required
|
|
|
|
|
+
|
|
|
from django.core.mail import EmailMultiAlternatives
|
|
from django.core.mail import EmailMultiAlternatives
|
|
|
from django.conf import settings
|
|
from django.conf import settings
|
|
|
from django.template.loader import render_to_string
|
|
from django.template.loader import render_to_string
|
|
@@ -21,6 +23,11 @@ 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
|
|
|
|
|
|
|
|
|
|
+from django.contrib.auth import get_user_model
|
|
|
|
|
+from django.db.models import Count
|
|
|
|
|
+
|
|
|
|
|
+User = get_user_model()
|
|
|
|
|
+
|
|
|
logger = logging.getLogger(__name__)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
@@ -335,11 +342,12 @@ def enviar_correo_inscritos(request, evento_id):
|
|
|
firma = "\n\n\nSaludos, \n\nPádel entre amigos"
|
|
firma = "\n\n\nSaludos, \n\nPádel entre amigos"
|
|
|
mensaje = f"{mensaje_usuario}{firma}"
|
|
mensaje = f"{mensaje_usuario}{firma}"
|
|
|
|
|
|
|
|
- mensaje_comun = (asunto, mensaje, settings.DEFAULT_FROM_EMAIL, destinatarios)
|
|
|
|
|
- mensaje_final = [mensaje_comun]
|
|
|
|
|
|
|
+ mensajes = [
|
|
|
|
|
+ (asunto, mensaje, settings.DEFAULT_FROM_EMAIL, [email]) for email in destinatarios
|
|
|
|
|
+ ]
|
|
|
|
|
|
|
|
try:
|
|
try:
|
|
|
- send_mass_mail(mensaje_final, fail_silently=False)
|
|
|
|
|
|
|
+ send_mass_mail(mensajes, fail_silently=False)
|
|
|
except BadHeaderError:
|
|
except BadHeaderError:
|
|
|
return HttpResponse('Encabezado inválido encontrado.')
|
|
return HttpResponse('Encabezado inválido encontrado.')
|
|
|
except SMTPException as e:
|
|
except SMTPException as e:
|
|
@@ -356,3 +364,26 @@ def enviar_correo_inscritos(request, evento_id):
|
|
|
|
|
|
|
|
return render(request, 'eventos/enviar_correo_inscritos.html', {'form': form, 'evento': evento})
|
|
return render(request, 'eventos/enviar_correo_inscritos.html', {'form': form, 'evento': evento})
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+def estadisticas_por_usuario(request):
|
|
|
|
|
+ usuarios = User.objects.annotate(num_eventos=Count("reserva__evento")).order_by("-num_eventos")
|
|
|
|
|
+ return render(request, "eventos/estadisticas_usuarios.html", {"usuarios": usuarios})
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+def eventos_por_usuario(request, usuario_id):
|
|
|
|
|
+ usuario = get_object_or_404(User, pk=usuario_id)
|
|
|
|
|
+ reservas = Reserva.objects.filter(usuario=usuario).select_related("evento")
|
|
|
|
|
+
|
|
|
|
|
+ return render(request, "eventos/eventos_por_usuario.html", {
|
|
|
|
|
+ "usuario": usuario,
|
|
|
|
|
+ "reservas": reservas
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+@staff_member_required
|
|
|
|
|
+def cancelar_reserva_admin(request, reserva_id):
|
|
|
|
|
+ reserva = get_object_or_404(Reserva, id=reserva_id)
|
|
|
|
|
+ usuario_id = reserva.usuario.id
|
|
|
|
|
+ if request.method == "POST":
|
|
|
|
|
+ reserva.delete()
|
|
|
|
|
+ return redirect("eventos:eventos_por_usuario", usuario_id)
|