from django.shortcuts import render, get_object_or_404, redirect
|
|
from django.contrib.auth.decorators import login_required, user_passes_test
|
|
from django.contrib import messages
|
|
from django.core.mail import send_mail
|
|
from django.conf import settings
|
|
|
|
from .models import Evento, Reserva
|
|
from .forms import EventoForm
|
|
from reymotausers.models import ReyMotaUser
|
|
|
|
|
|
@login_required
|
|
def reservar_evento(request, evento_id):
|
|
evento = get_object_or_404(Evento, id=evento_id)
|
|
|
|
# Verificar si el usuario ya tiene una reserva para este evento
|
|
if Reserva.objects.filter(evento=evento, usuario=request.user).exists():
|
|
messages.error(request, 'Ya tienes una reserva para este evento.')
|
|
print("Ya tienes una reserva para este evento.")
|
|
return redirect('eventos:lista_eventos')
|
|
|
|
# Verificar si quedan plazas disponibles
|
|
if evento.plazas_restantes() > 0:
|
|
Reserva.objects.create(evento=evento, usuario=request.user)
|
|
|
|
# Enviar un correo con la información del evento
|
|
asunto = f'Confirmación de Reserva para {evento.nombre}'
|
|
mensaje = 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.hour}\n' \
|
|
f'\n¡Gracias por inscribirte!\n\n'
|
|
|
|
send_mail(
|
|
asunto,
|
|
mensaje,
|
|
settings.DEFAULT_FROM_EMAIL,
|
|
[request.user.email],
|
|
fail_silently=False,
|
|
)
|
|
|
|
messages.success(request,
|
|
f'Reserva realizada para el evento {evento.nombre}.')
|
|
|
|
else:
|
|
messages.error(request, 'Lo sentimos, no quedan plazas disponibles.')
|
|
print("Lo sentimos, no quedan plazas disponibles.")
|
|
|
|
return redirect('eventos:lista_eventos')
|
|
|
|
|
|
@login_required
|
|
def anular_reserva(request, evento_id):
|
|
evento = get_object_or_404(Evento, id=evento_id)
|
|
|
|
# Verificar si el usuario ya tiene una reserva para este evento
|
|
if Reserva.objects.filter(evento=evento, usuario=request.user).exists():
|
|
messages.error(request, 'Vamos a solicitar la baja.')
|
|
|
|
admin = ReyMotaUser.objects.filter(is_staff=True)
|
|
|
|
for i in admin:
|
|
if i.nombre == "Tino":
|
|
# Enviar un correo con la información del evento
|
|
asunto = f'Solicitud de cancelación en {evento.nombre}'
|
|
mensaje = f'Hola,\n\n' \
|
|
f'{request.user.nombre} ha solicitado la baja en el "{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.hour}\n' \
|
|
f'\n{request.user.nombre}, recuerda que si no encontramos a nadie y la plaza queda\n' \
|
|
f'desierta el coste de tu plaza en el pozo lo tienes que abonar tú\n\n'
|
|
|
|
send_mail(
|
|
asunto,
|
|
mensaje,
|
|
settings.DEFAULT_FROM_EMAIL,
|
|
[request.user.email, i.email],
|
|
fail_silently=False,
|
|
)
|
|
|
|
return redirect('eventos:lista_eventos')
|
|
|
|
return redirect('eventos:lista_eventos')
|
|
|
|
|
|
@login_required
|
|
def lista_eventos(request):
|
|
eventos = Evento.objects.all()
|
|
|
|
# Crear un diccionario que mapea cada evento con un booleano indicando si el usuario ya ha reservado
|
|
eventos_con_reserva = []
|
|
for evento in eventos:
|
|
inscrito = Reserva.objects.filter(evento=evento, usuario=request.user).exists() if request.user.is_authenticated else False
|
|
|
|
eventos_con_reserva.append({
|
|
'evento': evento,
|
|
'inscrito': inscrito,
|
|
'id': evento.id,
|
|
'nombre': evento.nombre,
|
|
'fecha': evento.fecha,
|
|
'plazas_disponibles': evento.plazas_disponibles,
|
|
'plazas_restantes': evento.plazas_restantes
|
|
})
|
|
|
|
return render(request, 'eventos/lista_eventos.html', {'eventos_con_reserva': eventos_con_reserva})
|
|
|
|
|
|
def principal(request):
|
|
return render(request, 'eventos/lista_eventos.html')
|
|
|
|
|
|
def ayuda(request):
|
|
return render(request, 'eventos/help.html')
|
|
|
|
|
|
@login_required
|
|
def detalle_evento(request, evento_id):
|
|
evento = get_object_or_404(Evento, pk=evento_id)
|
|
|
|
reservas = Reserva.objects.filter(evento=evento_id)
|
|
|
|
for i in reservas:
|
|
print("Reserva: ", i.usuario.nombre)
|
|
|
|
return render(request, 'eventos/detalle_evento.html', {'evento': evento, 'reservas': reservas})
|
|
|
|
|
|
# Verificar si el usuario es administrador
|
|
def es_admin(user):
|
|
return user.is_staff
|
|
|
|
|
|
@user_passes_test(es_admin)
|
|
def crear_evento(request):
|
|
if request.method == 'POST':
|
|
form = EventoForm(request.POST)
|
|
if form.is_valid():
|
|
form.save()
|
|
messages.success(request, 'Evento creado exitosamente.')
|
|
return redirect('eventos:lista_eventos') # Redirige a la lista de eventos
|
|
else:
|
|
form = EventoForm()
|
|
|
|
return render(request, 'eventos/crear_evento.html', {'form': form})
|