From 2bbbfd1c5fbb596c1931af24164781242443e24e Mon Sep 17 00:00:00 2001 From: Celestino Rey Date: Tue, 15 Apr 2025 11:36:00 +0200 Subject: [PATCH] =?UTF-8?q?Estad=C3=ADsticas=20de=20usuarios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JugarAlPadel/K8S/Makefile | 2 +- JugarAlPadel/K8S/env-prod-configmap.yaml | 2 ++ JugarAlPadel/K8S/jugaralpadel-deployment.yaml | 7 +++- JugarAlPadel/gestion_reservas/eventos/urls.py | 2 ++ .../gestion_reservas/eventos/views.py | 11 +++++++ .../gestion_reservas/settings.py | 2 ++ .../gestion_reservas/gestion_reservas/urls.py | 2 ++ .../gestion_reservas/views.py | 32 ++++++++++++------- .../gestion_reservas/templates/acerca_de.html | 21 ++++++++++++ .../gestion_reservas/templates/base.html | 24 ++++++++++++++ .../eventos/estadisticas_usuarios.html | 23 +++++++++++++ 11 files changed, 115 insertions(+), 13 deletions(-) create mode 100644 JugarAlPadel/gestion_reservas/templates/acerca_de.html create mode 100644 JugarAlPadel/gestion_reservas/templates/eventos/estadisticas_usuarios.html diff --git a/JugarAlPadel/K8S/Makefile b/JugarAlPadel/K8S/Makefile index e6fea13..319405b 100644 --- a/JugarAlPadel/K8S/Makefile +++ b/JugarAlPadel/K8S/Makefile @@ -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.46 +export IMG_VERSION = 0.70.57 export IMG_NGINX_VERSION = 2.3 export APP_VERSION = 12.0 diff --git a/JugarAlPadel/K8S/env-prod-configmap.yaml b/JugarAlPadel/K8S/env-prod-configmap.yaml index f89a569..0e7ba92 100644 --- a/JugarAlPadel/K8S/env-prod-configmap.yaml +++ b/JugarAlPadel/K8S/env-prod-configmap.yaml @@ -1,6 +1,8 @@ apiVersion: v1 data: DEBUG: "False" + APP_VERSION: 12.0.0 + DATABASE: postgres kind: ConfigMap metadata: labels: diff --git a/JugarAlPadel/K8S/jugaralpadel-deployment.yaml b/JugarAlPadel/K8S/jugaralpadel-deployment.yaml index 2e60e7f..bb6f9cd 100644 --- a/JugarAlPadel/K8S/jugaralpadel-deployment.yaml +++ b/JugarAlPadel/K8S/jugaralpadel-deployment.yaml @@ -39,8 +39,13 @@ spec: name: jugaralpadel image: $REGISTRY/jugaralpadel-$ARQUITECTURA:$IMG_VERSION env: + - name: IMG_VERSION + value: "$IMG_VERSION" - name: APP_VERSION - value: "$APP_VERSION" + valueFrom: + configMapKeyRef: + key: APP_VERSION + name: env-prod - name: DEBUG valueFrom: configMapKeyRef: diff --git a/JugarAlPadel/gestion_reservas/eventos/urls.py b/JugarAlPadel/gestion_reservas/eventos/urls.py index e4a4ad6..d4790ca 100644 --- a/JugarAlPadel/gestion_reservas/eventos/urls.py +++ b/JugarAlPadel/gestion_reservas/eventos/urls.py @@ -36,4 +36,6 @@ urlpatterns = [ path('api/noticias/', api_lista_noticias, name='api_lista_noticias'), path('api/noticias//', api_detalle_noticia, name='api_detalle_noticia'), + + path("estadisticas/usuarios/", views.estadisticas_por_usuario, name="estadisticas_por_usuario"), ] diff --git a/JugarAlPadel/gestion_reservas/eventos/views.py b/JugarAlPadel/gestion_reservas/eventos/views.py index 5e80595..0fda667 100644 --- a/JugarAlPadel/gestion_reservas/eventos/views.py +++ b/JugarAlPadel/gestion_reservas/eventos/views.py @@ -21,6 +21,11 @@ from .serializers import EventoSerializer, ReservaSerializer, ListaEsperaSeriali from .models import Evento, Reserva, ListaEspera, Noticia 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__) @@ -363,3 +368,9 @@ def enviar_correo_inscritos(request, evento_id): return render(request, 'eventos/enviar_correo_inscritos.html', {'form': form, 'evento': evento}) + +@user_passes_test(es_admin) +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}) + diff --git a/JugarAlPadel/gestion_reservas/gestion_reservas/settings.py b/JugarAlPadel/gestion_reservas/gestion_reservas/settings.py index c1b4b57..3d76606 100644 --- a/JugarAlPadel/gestion_reservas/gestion_reservas/settings.py +++ b/JugarAlPadel/gestion_reservas/gestion_reservas/settings.py @@ -14,7 +14,9 @@ from pathlib import Path import os import logging +APP_NAME = "Jugaralpadel.es" APP_VERSION = os.environ.get("APP_VERSION", "0.0.0-dev") # Valor por defecto si no está definido +IMG_VERSION = os.environ.get("IMG_VERSION", "0.0.0-dev") # Valor por defecto si no está definido # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent diff --git a/JugarAlPadel/gestion_reservas/gestion_reservas/urls.py b/JugarAlPadel/gestion_reservas/gestion_reservas/urls.py index 7442c38..b11d382 100644 --- a/JugarAlPadel/gestion_reservas/gestion_reservas/urls.py +++ b/JugarAlPadel/gestion_reservas/gestion_reservas/urls.py @@ -40,6 +40,8 @@ urlpatterns = [ path('politica-privacidad/', views.politica_privacidad, name='politica_privacidad'), path('api/ayuda/', api_lista_ayuda, name='api_lista_ayuda'), + path("acerca-de/", views.acerca_de, name="acerca_de"), + ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/JugarAlPadel/gestion_reservas/gestion_reservas/views.py b/JugarAlPadel/gestion_reservas/gestion_reservas/views.py index df37b61..9beb446 100644 --- a/JugarAlPadel/gestion_reservas/gestion_reservas/views.py +++ b/JugarAlPadel/gestion_reservas/gestion_reservas/views.py @@ -1,28 +1,29 @@ -from rest_framework.response import Response -from django.utils import timezone -from rest_framework import status +# Imports + +from datetime import date -import os from django.conf import settings from django.contrib.auth.decorators import user_passes_test -from django.shortcuts import render, get_object_or_404 -from datetime import date from django.http import HttpResponseForbidden +from django.shortcuts import render, get_object_or_404 +from django.utils import timezone +from eventos.models import Noticia, Evento +from .models import Ayuda + +from rest_framework import status from rest_framework.decorators import api_view +from rest_framework.response import Response -from eventos.models import Noticia, Evento from .serializers import AyudaSerializer -from .models import Ayuda import markdown # Importa la biblioteca de markdown +import os + @user_passes_test(lambda u: u.is_staff) def ver_variables_entorno(request): - if not settings.DEBUG: - return HttpResponseForbidden("Acceso prohibido") - # Variables a excluir por motivos de seguridad variables_excluidas = {'SECRET_KEY', 'DATABASES', 'EMAIL_HOST_PASSWORD', 'API_KEY'} @@ -69,6 +70,15 @@ def politica_privacidad(request): return render(request, 'politica_privacidad.html', {'fecha_actual': date.today()}) +def acerca_de(request): + context = { + "app_name": settings.APP_NAME, + "app_version": settings.APP_VERSION, + "img_version": settings.IMG_VERSION + } + return render(request, "acerca_de.html", context) + + # # API # diff --git a/JugarAlPadel/gestion_reservas/templates/acerca_de.html b/JugarAlPadel/gestion_reservas/templates/acerca_de.html new file mode 100644 index 0000000..f4a8ae3 --- /dev/null +++ b/JugarAlPadel/gestion_reservas/templates/acerca_de.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} + +{% block content %} +
+

Acerca de...

+
+
+
+
+
    +
  • Nombre de la aplicación: {{ app_name }}
  • +
  • Versión: {{ app_version }}
  • +
  • Versión de la imagen: {{ img_version }}
  • +
+
+
+
+
+
+{% endblock %} + diff --git a/JugarAlPadel/gestion_reservas/templates/base.html b/JugarAlPadel/gestion_reservas/templates/base.html index 0ff5a14..ed2e9d7 100644 --- a/JugarAlPadel/gestion_reservas/templates/base.html +++ b/JugarAlPadel/gestion_reservas/templates/base.html @@ -122,6 +122,17 @@ Crear un nuevo evento + + + + + + + + + Estadísticas por usuario + + {% endif %} @@ -138,6 +149,19 @@ + + diff --git a/JugarAlPadel/gestion_reservas/templates/eventos/estadisticas_usuarios.html b/JugarAlPadel/gestion_reservas/templates/eventos/estadisticas_usuarios.html new file mode 100644 index 0000000..3531b0f --- /dev/null +++ b/JugarAlPadel/gestion_reservas/templates/eventos/estadisticas_usuarios.html @@ -0,0 +1,23 @@ +{% extends "base.html" %} + +{% block content %} +

Estadísticas de Inscripciones por Usuario

+ + + + + + + + + + {% for usuario in usuarios %} + + + + + {% endfor %} + +
UsuarioEventos inscritos
{{ usuario.get_full_name|default:usuario.nombre }}{{ usuario.num_eventos }}
+{% endblock %} +