diff --git a/src/eventos/management/commands/importar_listaespera.py b/src/eventos/management/commands/importar_listaespera.py index ab3be21..cf9a4ff 100644 --- a/src/eventos/management/commands/importar_listaespera.py +++ b/src/eventos/management/commands/importar_listaespera.py @@ -27,8 +27,8 @@ class Command(BaseCommand): listaesperas_creados = 0 for listaespera_data in datos: try: - evento = Evento.objects.get(id=listaespera_data["evento"]) - usuario = ReyMotaUser.objects.get(id=listaespera_data["usuario"]) + evento = Evento.objects.get(nombre=listaespera_data["evento_nombre"]) + usuario = ReyMotaUser.objects.get(email=listaespera_data["usuario_email"]) creado = ListaEspera.objects.create( evento_id=evento.id, @@ -41,6 +41,9 @@ class Command(BaseCommand): except Evento.DoesNotExist: self.stderr.write(self.style.ERROR(f"Evento '{listaespera_data['evento']}' no encontrado.")) + except ReyMotaUser.DoesNotExist: + self.stderr.write(self.style.ERROR(f"Usuario con email '{listaespera_data['usuario_email']}' no encontrado.")) + self.stdout.write(self.style.SUCCESS(f'Se importaron {listaesperas_creados} listaesperas correctamente.')) except FileNotFoundError: diff --git a/src/eventos/management/commands/importar_noticias.py b/src/eventos/management/commands/importar_noticias.py index 1bb7333..d26114c 100644 --- a/src/eventos/management/commands/importar_noticias.py +++ b/src/eventos/management/commands/importar_noticias.py @@ -27,12 +27,13 @@ class Command(BaseCommand): noticias_creados = 0 for noticia_data in datos: try: - usuario = ReyMotaUser.objects.get(id=noticia_data["autor"]) + usuario = ReyMotaUser.objects.get(email=noticia_data["usuario_email"]) creado = Noticia.objects.create( - autor_id=usuario.id, + autor=usuario, titulo=noticia_data['titulo'], fecha_publicacion=noticia_data['fecha_publicacion'], + contenido=noticia_data['contenido'], publicado=noticia_data['publicado'] ) if creado: diff --git a/src/eventos/management/commands/importar_reservas.py b/src/eventos/management/commands/importar_reservas.py index 496a4ff..8a15dbb 100644 --- a/src/eventos/management/commands/importar_reservas.py +++ b/src/eventos/management/commands/importar_reservas.py @@ -27,14 +27,13 @@ class Command(BaseCommand): reservas_creados = 0 for reserva_data in datos: try: - evento = Evento.objects.get(id=reserva_data["evento"]) + evento = Evento.objects.get(nombre=reserva_data["evento_nombre"]) usuario = ReyMotaUser.objects.get(email=reserva_data["usuario_email"]) creado = Reserva.objects.create( - evento_id=evento.id, - usuario_id=usuario.id, fecha_reserva=reserva_data['fecha_reserva'], - evento=evento + evento=evento, + usuario=usuario ) if creado: reservas_creados += 1 diff --git a/src/eventos/serializers.py b/src/eventos/serializers.py index ede6834..6b2e8dc 100644 --- a/src/eventos/serializers.py +++ b/src/eventos/serializers.py @@ -10,20 +10,26 @@ class EventoSerializer(serializers.ModelSerializer): class ReservaSerializer(serializers.ModelSerializer): usuario_email = serializers.CharField(source='usuario.email', read_only=True) + evento_nombre = serializers.CharField(source='evento.nombre', read_only=True) class Meta: model = Reserva -# fields = '__all__' # Incluir todos los campos del modelo - fields = ['id', 'usuario', 'usuario_email', 'evento', 'fecha_reserva'] + fields = ['id', 'usuario', 'usuario_email', 'evento', 'fecha_reserva', 'evento_nombre'] class ListaEsperaSerializer(serializers.ModelSerializer): + usuario_email = serializers.CharField(source='usuario.email', read_only=True) + evento_nombre = serializers.CharField(source='evento.nombre', read_only=True) + class Meta: model = ListaEspera - fields = '__all__' # Incluir todos los campos del modelo + fields = ['id', 'fecha_apuntado', 'usuario_email', 'evento_nombre'] class NoticiaSerializer(serializers.ModelSerializer): + usuario_email = serializers.CharField(source='autor.email', read_only=True) + class Meta: model = Noticia - fields = '__all__' # Incluir todos los campos del modelo + fields = ['id', 'titulo', 'contenido', 'fecha_publicacion', 'publicado', 'usuario_email'] + diff --git a/src/gestion_reservas/management/__init__.py b/src/gestion_reservas/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/gestion_reservas/management/commands/__init__.py b/src/gestion_reservas/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/gestion_reservas/management/commands/importar_ayuda.py b/src/gestion_reservas/management/commands/importar_ayuda.py new file mode 100644 index 0000000..834ee10 --- /dev/null +++ b/src/gestion_reservas/management/commands/importar_ayuda.py @@ -0,0 +1,41 @@ +import json +from django.core.management.base import BaseCommand +from gestion_reservas.models import Ayuda + + +class Command(BaseCommand): + help = "Importa la ayuda desde un archivo JSON" + + def add_arguments(self, parser): + parser.add_argument('archivo_json', type=str, help="Ruta del archivo JSON") + + def handle(self, *args, **kwargs): + archivo_json = kwargs['archivo_json'] + + try: + with open(archivo_json, 'r', encoding='utf-8') as file: + datos = json.load(file) + + self.stdout.write(self.style.WARNING(f"\nSe encontraron {len(datos)} elementos de ayuda en el archivo '{archivo_json}'.")) + confirmar = input("¿Deseas continuar con la importación? (s/n): ").strip().lower() + + if confirmar != 's': + self.stdout.write(self.style.ERROR("Importación cancelada.")) + return + + ayuda_creados = 0 + for ayuda_data in datos: + creado = Ayuda.objects.create( + titulo=ayuda_data['titulo'], + descripcion=ayuda_data['descripcion'], + apartado=ayuda_data['apartado'], + ) + if creado: + ayuda_creados += 1 + + self.stdout.write(self.style.SUCCESS(f'Se importaron {ayuda_creados} entradas de ayuda correctamente.')) + + except FileNotFoundError: + self.stderr.write(self.style.ERROR(f"El archivo {archivo_json} no se encontró.")) + except json.JSONDecodeError: + self.stderr.write(self.style.ERROR("Error al leer el archivo JSON. Asegúrate de que el formato sea correcto.")) diff --git a/src/gestion_reservas/serializers.py b/src/gestion_reservas/serializers.py index efe0230..b7aebe0 100644 --- a/src/gestion_reservas/serializers.py +++ b/src/gestion_reservas/serializers.py @@ -1,9 +1,8 @@ from rest_framework import serializers -from eventos.models import Evento +from .models import Ayuda -class EventoSerializer(serializers.ModelSerializer): +class AyudaSerializer(serializers.ModelSerializer): class Meta: - model = Evento - fields = ['id', 'nombre', 'descripcion', 'fecha', 'hora', 'plazas_restantes', 'publicado'] - + model = Ayuda + fields = '__all__' # Incluir todos los campos del modelo diff --git a/src/gestion_reservas/settings.py b/src/gestion_reservas/settings.py index 20eb0cc..3ced22e 100644 --- a/src/gestion_reservas/settings.py +++ b/src/gestion_reservas/settings.py @@ -26,7 +26,7 @@ SECRET_KEY = 'hey' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = os.environ["DEBUG"] == 'True' -ALLOWED_HOSTS = [".ocp-cluster.reymota.lab"] +ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS").split(" ") # Application definition @@ -85,14 +85,15 @@ WSGI_APPLICATION = 'gestion_reservas.wsgi.application' DATABASES = { "default": { - "ENGINE": "django.db.backends.postgresql", - "NAME": "jugaralpadel", - "USER": "creylopez", - "PASSWORD": "Dsa-0213", - "HOST": "postgresql", - "PORT": "5432", + "ENGINE": os.environ.get("SQL_ENGINE", "django.db.backends.sqlite3"), + "NAME": os.environ.get("SQL_DATABASE", BASE_DIR / "db.sqlite3"), + "USER": os.environ.get("SQL_USER", "user"), + "PASSWORD": os.environ.get("SQL_PASSWORD", "password"), + "HOST": os.environ.get("SQL_HOST", "localhost"), + "PORT": os.environ.get("SQL_PORT", "5432"), } -} +} + # Password validation # https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators @@ -149,7 +150,10 @@ AUTH_USER_MODEL = "reymotausers.ReyMotaUser" MEDIA_ROOT = BASE_DIR / "mediafiles" MEDIA_URL = '/media/' -CSRF_TRUSTED_ORIGINS = ["https://*.ocp-cluster.reymota.lab"] +if DEBUG is False: + CSRF_TRUSTED_ORIGINS = os.environ.get("CSRF_TRUSTED_ORIGINS").split(" ") + +CSRF_TRUSTED_ORIGINS = os.environ.get("CSRF_TRUSTED_ORIGINS").split(" ") # Configuración de correo con Gmail if DEBUG is True: diff --git a/src/gestion_reservas/urls.py b/src/gestion_reservas/urls.py index 672525a..bbd163d 100644 --- a/src/gestion_reservas/urls.py +++ b/src/gestion_reservas/urls.py @@ -21,6 +21,7 @@ from django.conf import settings from django.views.generic.base import TemplateView # new from . import views +from .views import api_lista_ayuda urlpatterns = [ @@ -36,5 +37,7 @@ urlpatterns = [ path('entorno/', views.ver_variables_entorno, name='ver_variables_entorno'), path('ayuda/', views.ayuda, name='ayuda'), + path('api/ayuda/', api_lista_ayuda, name='api_lista_ayuda'), + ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/src/gestion_reservas/views.py b/src/gestion_reservas/views.py index 896b808..78b657b 100644 --- a/src/gestion_reservas/views.py +++ b/src/gestion_reservas/views.py @@ -8,8 +8,10 @@ from django.contrib.auth.decorators import user_passes_test from django.shortcuts import render, get_object_or_404 from django.http import HttpResponseForbidden +from rest_framework.decorators import api_view + from eventos.models import Noticia, Evento -from .serializers import EventoSerializer +from .serializers import AyudaSerializer from .models import Ayuda import markdown # Importa la biblioteca de markdown @@ -60,3 +62,15 @@ def ayuda(request): item.descripcion = markdown.markdown(item.descripcion) return render(request, 'ayuda.html', {'elementos': elementos_ayuda, 'apartados': apartados}) + + +# +# API +# + +@api_view(['GET']) +def api_lista_ayuda(request): + """Devuelve la lista de toda la ayuda.""" + ayuda = Ayuda.objects.all() + serializer = AyudaSerializer(ayuda, many=True) + return Response(serializer.data) diff --git a/src/reymotausers/management/commands/importar_usuarios.py b/src/reymotausers/management/commands/importar_usuarios.py index 02578f0..25a34b1 100644 --- a/src/reymotausers/management/commands/importar_usuarios.py +++ b/src/reymotausers/management/commands/importar_usuarios.py @@ -32,7 +32,9 @@ class Command(BaseCommand): is_staff=usuario_data['is_staff'], is_active=usuario_data['is_active'], nombre=usuario_data['nombre'], - email=usuario_data['email'] ) + email=usuario_data['email'], + last_login=usuario_data['last_login'] + ) if creado: usuarios_creados += 1 diff --git a/src/reymotausers/serializers.py b/src/reymotausers/serializers.py index 5b9c965..dca3e4b 100644 --- a/src/reymotausers/serializers.py +++ b/src/reymotausers/serializers.py @@ -5,4 +5,4 @@ from .models import ReyMotaUser class ReyMotaUserSerializer(serializers.ModelSerializer): class Meta: model = ReyMotaUser - fields = '__all__' # Incluir todos los campos del modelo + fields = ['email', 'password', 'foto', 'is_superuser', 'is_staff', 'is_active', 'nombre', 'last_login'] diff --git a/src/templates/_head.html b/src/templates/_head.html index 8f9ad19..f1ff7d5 100644 --- a/src/templates/_head.html +++ b/src/templates/_head.html @@ -10,7 +10,7 @@ - + @@ -20,4 +20,4 @@ - \ No newline at end of file + diff --git a/src/templates/eventos/detalle_evento.html b/src/templates/eventos/detalle_evento.html index 0fc1966..5150090 100644 --- a/src/templates/eventos/detalle_evento.html +++ b/src/templates/eventos/detalle_evento.html @@ -1,5 +1,7 @@ {% extends 'base.html' %} +{% load static %} + {% block menuapp %} {% endblock menuapp %} @@ -59,6 +61,11 @@ + {% if evento.url_imagen %} +