Browse Source

Versión con estadísticas por temporadas

Celestino Rey 1 năm trước cách đây
mục cha
commit
a1fb998dbd
5 tập tin đã thay đổi với 40 bổ sung33 xóa
  1. 1 7
      src/eventos/admin.py
  2. 0 12
      src/eventos/models.py
  3. 30 9
      src/eventos/views.py
  4. 8 5
      src/extraeDatos.sh
  5. 1 0
      src/gestion_reservas/settings.py

+ 1 - 7
src/eventos/admin.py

@@ -1,5 +1,5 @@
 from django.contrib import admin
-from .models import Evento, Reserva, ListaEspera, Noticia, Temporada
+from .models import Evento, Reserva, ListaEspera, Noticia
 
 
 class NoticiaAdmin(admin.ModelAdmin):
@@ -15,12 +15,6 @@ class EventoAdmin(admin.ModelAdmin):
     search_fields = ['titulo', 'descripcion']
 
 
-@admin.register(Temporada)
-class TemporadaAdmin(admin.ModelAdmin):
-    list_display = ('nombre', 'fecha_inicio', 'fecha_fin')
-    list_filter = ('fecha_inicio',)
-
-
 admin.site.register(Evento, EventoAdmin)
 admin.site.register(Reserva)
 admin.site.register(ListaEspera)

+ 0 - 12
src/eventos/models.py

@@ -51,15 +51,3 @@ class Noticia(models.Model):
 
     def __str__(self):
         return self.titulo
-
-
-class Temporada(models.Model):
-    nombre = models.CharField(max_length=100)
-    fecha_inicio = models.DateField()
-    fecha_fin = models.DateField()
-
-    class Meta:
-        ordering = ['-fecha_inicio']
-
-    def __str__(self):
-        return self.nombre

+ 30 - 9
src/eventos/views.py

@@ -7,6 +7,7 @@ from django.core.mail import EmailMultiAlternatives
 from django.conf import settings
 from django.template.loader import render_to_string
 from django.utils import timezone
+from datetime import date
 
 import logging
 
@@ -50,13 +51,13 @@ def reservar_evento(request, evento_id):
         to_email = request.user.email
         cc_email = [settings.ADMIN_EMAIL]
 
-        texto = f'Hola {request.user.nombre},\n\n' \
-                f'Te has inscrito correctamente en el evento "{evento.nombre}".\n' \
-                f'Detalles del evento:\n' \
-                f'Nombre: {evento.nombre}\n' \
-                f'Descripción: {evento.descripcion}\n' \
-                f'Fecha:  {evento.fecha.strftime("%d/%b/%y")}  a las {evento.hora}\n' \
-                f'\n¡Gracias por inscribirte!\n\n'
+        texto = f'Hola {request.user.nombre}, \n\n' \
+                    f'Te has inscrito correctamente en el evento "{evento.nombre}".\n' \
+                    f'Detalles del evento:\n' \
+                    f'Nombre: {evento.nombre}\n' \
+                    f'Descripción: {evento.descripcion}\n' \
+                    f'Fecha: {evento.fecha.strftime("%d/%b/%y")}  a las {evento.hora}\n' \
+                    f'\n¡Gracias por inscribirte!\n\n'
 
         html_content = render_to_string('emails/confirmacion_reserva.html', {'evento': evento, 'usuario': request.user})
 
@@ -365,11 +366,31 @@ def enviar_correo_inscritos(request, evento_id):
     return render(request, 'eventos/enviar_correo_inscritos.html', {'form': form, 'evento': evento})
 
 
+@login_required
 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})
+    today = date.today()
+
+    mes_comienzo_temporada = settings.MES_COMIENZO_TEMPORADA
 
+    if today.month < mes_comienzo_temporada:
+        filtro_fecha = date(today.year - 1, mes_comienzo_temporada, 1)
+    else:
+        filtro_fecha = date(today.year, mes_comienzo_temporada, 1)
 
+    reservas = Reserva.objects.filter(evento__fecha__gte=filtro_fecha)
+
+    datos = (
+        reservas.values('usuario__id', 'usuario__email', 'usuario__nombre')
+        .annotate(eventos_inscritos=Count('evento', distinct=True))
+        .order_by('-eventos_inscritos')
+    )
+
+    return render(request, 'eventos/estadisticas_usuarios.html', {
+        'datos': datos,
+        'desde': filtro_fecha,
+    })
+
+@login_required
 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")

+ 8 - 5
src/extraeDatos.sh

@@ -1,6 +1,9 @@
-curl https://jugaralpadel.es/eventos/api/eventos/ > mediafiles/eventos.json
-curl https://jugaralpadel.es/eventos/api/reservas/ > mediafiles/reservas.json
-curl https://jugaralpadel.es/eventos/api/listaespera/ > mediafiles/listaespera.json
-curl https://jugaralpadel.es/eventos/api/noticias/ > mediafiles/noticias.json
-curl https://jugaralpadel.es/eventos/api/usuarios/ > mediafiles/usuarios.json
+echo "extrayendo usuarios..."
 curl https://jugaralpadel.es/usuarios/api/usuarios/ > mediafiles/usuarios.json
+
+for i in eventos reservas noticias listaespera
+do
+	echo "extrayendo $i..."
+	curl https://jugaralpadel.es/eventos/api/$i/ > mediafiles/$i.json
+done
+

+ 1 - 0
src/gestion_reservas/settings.py

@@ -18,6 +18,7 @@ APP_NAME = "jugaralpadel.es"
 APP_VERSION = os.environ.get("APP_VERSION", "15.0.1")  # 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
 
+MES_COMIENZO_TEMPORADA = int(os.getenv('MES_COMIENZO_TEMPORADA', '9'))  # valor por defecto: septiembre
 
 # Build paths inside the project like this: BASE_DIR / 'subdir'.
 BASE_DIR = Path(__file__).resolve().parent.parent