|
|
@ -4,6 +4,11 @@ from django.contrib import messages |
|
|
from django.core.mail import EmailMultiAlternatives |
|
|
from django.core.mail import EmailMultiAlternatives |
|
|
from django.conf import settings |
|
|
from django.conf import settings |
|
|
from django.template.loader import render_to_string |
|
|
from django.template.loader import render_to_string |
|
|
|
|
|
from django.utils import timezone |
|
|
|
|
|
|
|
|
|
|
|
from rest_framework.response import Response |
|
|
|
|
|
from rest_framework.decorators import api_view |
|
|
|
|
|
from .serializers import EventoSerializer, ReservaSerializer, ListaEsperaSerializer, NoticiaSerializer |
|
|
|
|
|
|
|
|
from .models import Evento, Reserva, ListaEspera, Noticia |
|
|
from .models import Evento, Reserva, ListaEspera, Noticia |
|
|
from .forms import ListaEsperaForm, EventoForm |
|
|
from .forms import ListaEsperaForm, EventoForm |
|
|
@ -72,11 +77,14 @@ def publicar_evento(request, evento_id): |
|
|
|
|
|
|
|
|
@login_required |
|
|
@login_required |
|
|
def lista_eventos(request): |
|
|
def lista_eventos(request): |
|
|
|
|
|
# anno_actual = timezone.now().year |
|
|
|
|
|
|
|
|
# Solo mostrar los eventos publicados a los usuarios normales |
|
|
# Solo mostrar los eventos publicados a los usuarios normales |
|
|
if request.user.is_staff: |
|
|
if request.user.is_staff: |
|
|
eventos = Evento.objects.all() # Los administradores ven todos los eventos |
|
|
|
|
|
|
|
|
eventos = Evento.objects.all().order_by('-fecha', '-hora') |
|
|
else: |
|
|
else: |
|
|
eventos = Evento.objects.filter(publicado=True) # Los usuarios ven solo eventos publicados |
|
|
|
|
|
|
|
|
eventos = Evento.objects.filter(publicado=True).order_by('-fecha', '-hora') |
|
|
|
|
|
# eventos = Evento.objects.filter(publicado=True, fecha__year=anno_actual) # Los usuarios ven solo eventos publicados y del año en curso |
|
|
|
|
|
|
|
|
# Crear un diccionario que mapea cada evento con un booleano indicando si el usuario ya ha reservado |
|
|
# Crear un diccionario que mapea cada evento con un booleano indicando si el usuario ya ha reservado |
|
|
eventos_con_reserva = [] |
|
|
eventos_con_reserva = [] |
|
|
@ -99,7 +107,8 @@ def lista_eventos(request): |
|
|
'plazas_restantes': evento.plazas_restantes, |
|
|
'plazas_restantes': evento.plazas_restantes, |
|
|
'en_espera': en_espera, |
|
|
'en_espera': en_espera, |
|
|
'usuario': request.user, |
|
|
'usuario': request.user, |
|
|
'publicado': evento.publicado |
|
|
|
|
|
|
|
|
'publicado': evento.publicado, |
|
|
|
|
|
'url_imagen': evento.url_imagen |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
return render(request, 'eventos/lista_eventos.html', {'eventos_con_reserva': eventos_con_reserva}) |
|
|
return render(request, 'eventos/lista_eventos.html', {'eventos_con_reserva': eventos_con_reserva}) |
|
|
@ -144,7 +153,8 @@ def detalle_evento(request, evento_id): |
|
|
'plazas_restantes': evento.plazas_restantes, |
|
|
'plazas_restantes': evento.plazas_restantes, |
|
|
'en_espera': en_espera, |
|
|
'en_espera': en_espera, |
|
|
'usuario': request.user, |
|
|
'usuario': request.user, |
|
|
'publicado': evento.publicado |
|
|
|
|
|
|
|
|
'publicado': evento.publicado, |
|
|
|
|
|
'url_imagen': evento.url_imagen |
|
|
} |
|
|
} |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
@ -202,3 +212,83 @@ def apuntar_lista_espera(request, evento_id): |
|
|
|
|
|
|
|
|
form = ListaEsperaForm() |
|
|
form = ListaEsperaForm() |
|
|
return render(request, 'eventos/apuntar_lista_espera.html', {'form': form, 'evento': evento}) |
|
|
return render(request, 'eventos/apuntar_lista_espera.html', {'form': form, 'evento': evento}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# |
|
|
|
|
|
# API |
|
|
|
|
|
# |
|
|
|
|
|
|
|
|
|
|
|
@api_view(['GET']) |
|
|
|
|
|
def api_lista_eventos(request): |
|
|
|
|
|
"""Devuelve la lista de todos los eventos.""" |
|
|
|
|
|
eventos = Evento.objects.all() |
|
|
|
|
|
serializer = EventoSerializer(eventos, many=True) |
|
|
|
|
|
return Response(serializer.data) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@api_view(['GET']) |
|
|
|
|
|
def api_detalle_evento(request, evento_id): |
|
|
|
|
|
"""Devuelve los detalles de un evento específico.""" |
|
|
|
|
|
try: |
|
|
|
|
|
evento = Evento.objects.get(id=evento_id) |
|
|
|
|
|
serializer = EventoSerializer(evento) |
|
|
|
|
|
return Response(serializer.data) |
|
|
|
|
|
except Evento.DoesNotExist: |
|
|
|
|
|
return Response({'error': 'Evento no encontrado'}, status=404) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@api_view(['GET']) |
|
|
|
|
|
def api_lista_reservas(request): |
|
|
|
|
|
"""Devuelve la lista de todos los reservas.""" |
|
|
|
|
|
reservas = Reserva.objects.all() |
|
|
|
|
|
serializer = ReservaSerializer(reservas, many=True) |
|
|
|
|
|
return Response(serializer.data) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@api_view(['GET']) |
|
|
|
|
|
def api_detalle_reserva(request, reserva_id): |
|
|
|
|
|
"""Devuelve los detalles de un reserva específico.""" |
|
|
|
|
|
try: |
|
|
|
|
|
reserva = Reserva.objects.get(id=reserva_id) |
|
|
|
|
|
serializer = ReservaSerializer(reserva) |
|
|
|
|
|
return Response(serializer.data) |
|
|
|
|
|
except Reserva.DoesNotExist: |
|
|
|
|
|
return Response({'error': 'Reserva no encontrado'}, status=404) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@api_view(['GET']) |
|
|
|
|
|
def api_lista_listaespera(request): |
|
|
|
|
|
"""Devuelve la lista de todos los listaespera.""" |
|
|
|
|
|
listaesperas = ListaEspera.objects.all() |
|
|
|
|
|
serializer = ListaEsperaSerializer(listaesperas, many=True) |
|
|
|
|
|
return Response(serializer.data) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@api_view(['GET']) |
|
|
|
|
|
def api_detalle_listaespera(request, listaespera_id): |
|
|
|
|
|
"""Devuelve los detalles de un listaespera específico.""" |
|
|
|
|
|
try: |
|
|
|
|
|
listaespera = ListaEspera.objects.get(id=listaespera_id) |
|
|
|
|
|
serializer = ListaEsperaSerializer(listaespera) |
|
|
|
|
|
return Response(serializer.data) |
|
|
|
|
|
except ListaEspera.DoesNotExist: |
|
|
|
|
|
return Response({'error': 'ListaEspera no encontrado'}, status=404) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@api_view(['GET']) |
|
|
|
|
|
def api_lista_noticias(request): |
|
|
|
|
|
"""Devuelve la lista de todos los noticias.""" |
|
|
|
|
|
noticias = Noticia.objects.all() |
|
|
|
|
|
serializer = NoticiaSerializer(noticias, many=True) |
|
|
|
|
|
return Response(serializer.data) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@api_view(['GET']) |
|
|
|
|
|
def api_detalle_noticia(request, noticia_id): |
|
|
|
|
|
"""Devuelve los detalles de un noticia específico.""" |
|
|
|
|
|
try: |
|
|
|
|
|
noticia = Noticia.objects.get(id=noticia_id) |
|
|
|
|
|
serializer = NoticiaSerializer(noticia) |
|
|
|
|
|
return Response(serializer.data) |
|
|
|
|
|
except Noticia.DoesNotExist: |
|
|
|
|
|
return Response({'error': 'Noticia no encontrado'}, status=404) |