From 408d4d006e46950d312c040ea19c3c573f59d5e1 Mon Sep 17 00:00:00 2001 From: adrigongv23 Date: Tue, 30 Jun 2026 17:39:25 +0200 Subject: [PATCH] =?UTF-8?q?Gesti=C3=B3n=20de=20temporadas=20a=C3=B1adida?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Plataform_Web/gades_manager/urls.py | 71 +++--- Plataform_Web/templates/base.html | 220 +++++++++--------- Plataform_Web/templates/editar_temporada.html | 96 ++++++++ .../templates/gestion_temporadas.html | 100 ++++++++ Plataform_Web/temporadas/forms.py | 13 ++ Plataform_Web/temporadas/views.py | 56 +++-- 6 files changed, 398 insertions(+), 158 deletions(-) create mode 100644 Plataform_Web/templates/editar_temporada.html create mode 100644 Plataform_Web/templates/gestion_temporadas.html create mode 100644 Plataform_Web/temporadas/forms.py diff --git a/Plataform_Web/gades_manager/urls.py b/Plataform_Web/gades_manager/urls.py index d6ca849..a181953 100644 --- a/Plataform_Web/gades_manager/urls.py +++ b/Plataform_Web/gades_manager/urls.py @@ -1,34 +1,39 @@ -""" -URL configuration for gades_manager project. - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/6.0/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" - -from django.contrib import admin -from django.urls import path -from django.contrib.auth import views as auth_views -from gestion import views -from users import views as users_views - -urlpatterns = [ - path('admin/', admin.site.urls), - path('', views.inicio, name='inicio'), - path('login/', auth_views.LoginView.as_view(template_name='login.html'), name='login'), - path('logout/', auth_views.LogoutView.as_view(next_page='login'), name='logout'), - path('mi-perfil/', users_views.mi_perfil, name='mi_perfil'), - path('miembros/', users_views.listado_miembros, name='listado_miembros'), - path('gestion/usuarios/', users_views.gestion_usuarios, name='gestion_usuarios'), - path('gestion/usuarios//editar/', users_views.editar_usuario, name='editar_usuario'), - path('gestion/usuarios//eliminar/', users_views.eliminar_usuario, name='eliminar_usuario'), +""" +URL configuration for gades_manager project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/6.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" + +from django.contrib import admin +from django.urls import path +from django.contrib.auth import views as auth_views +from gestion import views +from users import views as users_views +from temporadas import views as temporadas_views + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', views.inicio, name='inicio'), + path('login/', auth_views.LoginView.as_view(template_name='login.html'), name='login'), + path('logout/', auth_views.LogoutView.as_view(next_page='login'), name='logout'), + path('mi-perfil/', users_views.mi_perfil, name='mi_perfil'), + path('miembros/', users_views.listado_miembros, name='listado_miembros'), + path('gestion/usuarios/', users_views.gestion_usuarios, name='gestion_usuarios'), + path('gestion/usuarios//editar/', users_views.editar_usuario, name='editar_usuario'), + path('gestion/usuarios//eliminar/', users_views.eliminar_usuario, name='eliminar_usuario'), + path('gestion/temporadas/', temporadas_views.gestion_temporadas, name='gestion_temporadas'), + path('gestion/temporadas/crear/', temporadas_views.crear_temporada, name='crear_temporada'), + path('gestion/temporadas//editar/', temporadas_views.editar_temporada, name='editar_temporada'), + path('gestion/temporadas//eliminar/', temporadas_views.eliminar_temporada, name='eliminar_temporada'), ] \ No newline at end of file diff --git a/Plataform_Web/templates/base.html b/Plataform_Web/templates/base.html index f888191..beb1863 100644 --- a/Plataform_Web/templates/base.html +++ b/Plataform_Web/templates/base.html @@ -1,111 +1,111 @@ -{% load static %} - - - - - - {% block title %}Intranet | Formula Gades{% endblock title %} - - - - - - {% block extra_head %}{% endblock extra_head %} - - - - - - -
- {% block content %} - {% endblock content %} -
- -
-

© 2026 Formula Gades - Universidad de Cádiz. Todos los derechos reservados.

-
- - - - {% block extra_js %}{% endblock extra_js %} - +{% load static %} + + + + + + {% block title %}Intranet | Formula Gades{% endblock title %} + + + + + + {% block extra_head %}{% endblock extra_head %} + + + + + + +
+ {% block content %} + {% endblock content %} +
+ +
+

© 2026 Formula Gades - Universidad de Cádiz. Todos los derechos reservados.

+
+ + + + {% block extra_js %}{% endblock extra_js %} + \ No newline at end of file diff --git a/Plataform_Web/templates/editar_temporada.html b/Plataform_Web/templates/editar_temporada.html new file mode 100644 index 0000000..cd7d320 --- /dev/null +++ b/Plataform_Web/templates/editar_temporada.html @@ -0,0 +1,96 @@ +{% extends 'base.html' %} +{% load static %} + +{% block title %}{% if temporada %}Editar Temporada{% else %}Nueva Temporada{% endif %} | Gades Manager{% endblock title %} + +{% block content %} +
+
+
+

{% if temporada %}Editar Temporada{% else %}Nueva Temporada{% endif %}

+

{% if temporada %}{{ temporada.nombre }}{% else %}Rellena los datos de la nueva temporada.{% endif %}

+
+
+
+ +
+
+
+
+ +
+ {% csrf_token %} + +
+ + + {% for error in form.nombre.errors %} +
{{ error }}
+ {% endfor %} +
+ +
+
+ + {{ form.fecha_inicio }} + {% for error in form.fecha_inicio.errors %} +
{{ error }}
+ {% endfor %} +
+
+ + {{ form.fecha_fin }} + {% for error in form.fecha_fin.errors %} +
{{ error }}
+ {% endfor %} +
+
+ +
+ + + {% for error in form.presupuesto.errors %} +
{{ error }}
+ {% endfor %} +
+ +
+ + +
Solo puede haber una temporada activa. Al marcar esta se desactivarán las demás automáticamente.
+
+ +
+ +
+ {% for checkbox in form.miembros %} +
+ {{ checkbox.tag }} + +
+ {% empty %} + No hay usuarios en el sistema. + {% endfor %} +
+
+ +
+ + Cancelar +
+
+ +
+
+
+
+{% endblock content %} diff --git a/Plataform_Web/templates/gestion_temporadas.html b/Plataform_Web/templates/gestion_temporadas.html new file mode 100644 index 0000000..404f3b9 --- /dev/null +++ b/Plataform_Web/templates/gestion_temporadas.html @@ -0,0 +1,100 @@ +{% extends 'base.html' %} +{% load static %} + +{% block title %}Gestión de Temporadas | Gades Manager{% endblock title %} + +{% block content %} +
+
+
+
+

Gestión de Temporadas

+

Crea, edita y elimina temporadas del equipo.

+
+ + Nueva Temporada +
+
+
+ +
+ + {% if messages %} +
+ {% for message in messages %} +
{{ message }}
+ {% endfor %} +
+ {% endif %} + +
+
+
+ +
+ + + + + + + + + + + + + + {% for temporada in temporadas %} + + + + + + + + + + + + {% empty %} + + + + {% endfor %} + +
NombreFecha inicioFecha finPresupuestoMiembrosEstadoAcciones
{{ temporada.nombre }}{{ temporada.fecha_inicio|date:"d/m/Y" }}{{ temporada.fecha_fin|date:"d/m/Y" }}{{ temporada.presupuesto|floatformat:2 }} €{{ temporada.miembros.count }} + {% if temporada.actual %} + Activa + {% else %} + Anterior + {% endif %} + + Editar + +
No hay temporadas creadas todavía.
+
+ +
+
+
+
+{% endblock content %} diff --git a/Plataform_Web/temporadas/forms.py b/Plataform_Web/temporadas/forms.py new file mode 100644 index 0000000..4788a5d --- /dev/null +++ b/Plataform_Web/temporadas/forms.py @@ -0,0 +1,13 @@ +from django import forms +from .models import Temporada + + +class TemporadaForm(forms.ModelForm): + class Meta: + model = Temporada + fields = ['nombre', 'fecha_inicio', 'fecha_fin', 'presupuesto', 'actual', 'miembros'] + widgets = { + 'fecha_inicio': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}), + 'fecha_fin': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}), + 'miembros': forms.CheckboxSelectMultiple(), + } diff --git a/Plataform_Web/temporadas/views.py b/Plataform_Web/temporadas/views.py index 0cf3519..1db3713 100644 --- a/Plataform_Web/temporadas/views.py +++ b/Plataform_Web/temporadas/views.py @@ -1,16 +1,42 @@ -from django.shortcuts import render -from django.contrib.auth.decorators import login_required -from temporadas.models import Temporada # Importamos tu modelo Temporada +from django.shortcuts import render, redirect, get_object_or_404 +from django.contrib import messages +from django.views.decorators.http import require_POST +from users.decorators import require_rol +from .models import Temporada +from .forms import TemporadaForm -@login_required -def dashboard(request): - # Buscamos en la base de datos la temporada que tenga actual=True. - # Usamos .first() por seguridad para evitar errores si no hubiera ninguna creada todavía. - temporada_activa = Temporada.objects.filter(actual=True).first() - - # Metemos los datos en el diccionario de contexto para mandarlos al HTML - context = { - 'temporada_actual': temporada_activa - } - - return render(request, 'index.html', context) \ No newline at end of file + +@require_rol('directiva') +def gestion_temporadas(request): + temporadas = Temporada.objects.all() + return render(request, 'gestion_temporadas.html', {'temporadas': temporadas}) + + +@require_rol('directiva') +def crear_temporada(request): + form = TemporadaForm(request.POST or None) + if request.method == 'POST' and form.is_valid(): + form.save() + messages.success(request, 'Temporada creada correctamente.') + return redirect('gestion_temporadas') + return render(request, 'editar_temporada.html', {'form': form, 'temporada': None}) + + +@require_rol('directiva') +def editar_temporada(request, pk): + temporada = get_object_or_404(Temporada, pk=pk) + form = TemporadaForm(request.POST or None, instance=temporada) + if request.method == 'POST' and form.is_valid(): + form.save() + messages.success(request, 'Temporada actualizada correctamente.') + return redirect('gestion_temporadas') + return render(request, 'editar_temporada.html', {'form': form, 'temporada': temporada}) + + +@require_rol('directiva') +@require_POST +def eliminar_temporada(request, pk): + temporada = get_object_or_404(Temporada, pk=pk) + temporada.delete() + messages.success(request, f'Temporada "{temporada.nombre}" eliminada.') + return redirect('gestion_temporadas')