|
|
|
@ -1,6 +1,8 @@ |
|
|
|
from django.shortcuts import render, get_object_or_404, redirect |
|
|
|
from django.contrib.auth.decorators import login_required, user_passes_test |
|
|
|
from django.contrib import messages |
|
|
|
from django.contrib.admin.views.decorators import staff_member_required |
|
|
|
|
|
|
|
from django.core.mail import EmailMultiAlternatives |
|
|
|
from django.conf import settings |
|
|
|
from django.template.loader import render_to_string |
|
|
|
@ -368,3 +370,22 @@ 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}) |
|
|
|
|
|
|
|
|
|
|
|
@user_passes_test(lambda u: u.is_staff) |
|
|
|
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) |