Browse Source

Posibilida de borrar a usuarios de eventos desde la lista de estadísticas

main
Celestino Rey 6 months ago
parent
commit
5db7a67a08
6 changed files with 68 additions and 4 deletions
  1. +1
    -1
      JugarAlPadel/K8S/Makefile
  2. +2
    -2
      JugarAlPadel/K8S/env-prod-configmap.yaml
  3. +4
    -0
      JugarAlPadel/gestion_reservas/eventos/urls.py
  4. +21
    -0
      JugarAlPadel/gestion_reservas/eventos/views.py
  5. +1
    -1
      JugarAlPadel/gestion_reservas/templates/eventos/estadisticas_usuarios.html
  6. +39
    -0
      JugarAlPadel/gestion_reservas/templates/eventos/eventos_por_usuario.html

+ 1
- 1
JugarAlPadel/K8S/Makefile View File

@ -1,7 +1,7 @@
export ARQUITECTURA := $(shell lscpu |grep itectur | tr -d ' '| cut -f2 -d':')
export REGISTRY=registry.reymota.es
export IMG_VERSION = 0.70.26
export IMG_VERSION = 0.70.35
export IMG_NGINX_VERSION = 2.3
# limpia todo


+ 2
- 2
JugarAlPadel/K8S/env-prod-configmap.yaml View File

@ -1,7 +1,7 @@
apiVersion: v1
data:
DEBUG: "False"
APP_VERSION: 13.0.1
DEBUG: "True"
APP_VERSION: 14.0.0
DATABASE: postgres
kind: ConfigMap
metadata:


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

@ -25,6 +25,8 @@ urlpatterns = [
path('reservar/<int:evento_id>/',
views.reservar_evento, name='reservar_evento'),
path("reservar/<int:reserva_id>/eliminar/", views.cancelar_reserva_admin, name="cancelar_reserva_admin"),
path('api/eventos/', api_lista_eventos, name='api_lista_eventos'),
path('api/eventos/<int:evento_id>/', api_detalle_evento, name='api_detalle_evento'),
@ -38,5 +40,7 @@ urlpatterns = [
path('api/noticias/<int:noticia_id>/', api_detalle_noticia, name='api_detalle_noticia'),
path("estadisticas/usuarios/", views.estadisticas_por_usuario, name="estadisticas_por_usuario"),
path("estadisticas/usuarios/<int:usuario_id>/", views.eventos_por_usuario, name="eventos_por_usuario"),
]

+ 21
- 0
JugarAlPadel/gestion_reservas/eventos/views.py View File

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

+ 1
- 1
JugarAlPadel/gestion_reservas/templates/eventos/estadisticas_usuarios.html View File

@ -13,7 +13,7 @@
<tbody>
{% for usuario in usuarios %}
<tr>
<td>{{ usuario.get_full_name|default:usuario.nombre }}</td>
<td><a href="{% url 'eventos:eventos_por_usuario' usuario.id %}">{{ usuario.get_full_name|default:usuario.nombre }}</a></td>
<td>{{ usuario.num_eventos }}</td>
</tr>
{% endfor %}


+ 39
- 0
JugarAlPadel/gestion_reservas/templates/eventos/eventos_por_usuario.html View File

@ -0,0 +1,39 @@
{% extends "base.html" %}
{% block content %}
<h2>Eventos en los que participa o ha participado {{ usuario.get_full_name|default:usuario.nombre }}</h2>
{% if reservas %}
<table class="table table-striped">
<thead>
<tr>
<th>Evento</th>
<th>Fecha</th>
<th>Acciones</th>
</tr>
</thead>
<tbody>
{% for reserva in reservas %}
<tr>
<td><a href="{% url 'eventos:detalle_evento' reserva.evento.id %}">{{ reserva.evento.nombre }}</a></td>
<td>{{ reserva.evento.fecha }}</td>
<td>
<form action="{% url 'eventos:cancelar_reserva_admin' reserva.id %}" method="post" style="display:inline;">
{% csrf_token %}
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('¿Eliminar esta inscripción?')">
Eliminar
</button>
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>No está inscrito en ningún evento.</p>
{% endif %}
<a href="{% url 'eventos:estadisticas_por_usuario' %}">← Volver a estadísticas</a>
{% endblock %}

Loading…
Cancel
Save