Browse Source

Gestión de lista de espera y gitignore

politica
Celestino Rey 1 year ago
parent
commit
df4326fa77
8 changed files with 114 additions and 43 deletions
  1. +4
    -2
      JugarAlPadel/.dockerignore
  2. +2
    -0
      JugarAlPadel/.gitignore
  3. +7
    -0
      JugarAlPadel/gestion_reservas/eventos/forms.py
  4. +25
    -0
      JugarAlPadel/gestion_reservas/eventos/migrations/0003_listaespera.py
  5. +9
    -0
      JugarAlPadel/gestion_reservas/eventos/models.py
  6. +1
    -1
      JugarAlPadel/gestion_reservas/eventos/urls.py
  7. +31
    -40
      JugarAlPadel/gestion_reservas/eventos/views.py
  8. +35
    -0
      JugarAlPadel/gestion_reservas/templates/eventos/apuntar_lista_espera.html

+ 4
- 2
JugarAlPadel/.dockerignore View File

@ -1,5 +1,7 @@
Dockerfile
Makefile
volcadossql/
venv/
reymota/lyrics/management/
eventos/migrations/*
reymotausers/migrations/*
gestion_reservas/db.sqlite

+ 2
- 0
JugarAlPadel/.gitignore View File

@ -0,0 +1,2 @@
db.sqlite3
*initial*

+ 7
- 0
JugarAlPadel/gestion_reservas/eventos/forms.py View File

@ -1,6 +1,7 @@
from django import forms
from .models import Evento
from .models import ListaEspera
class EventoForm(forms.ModelForm):
@ -12,3 +13,9 @@ class EventoForm(forms.ModelForm):
'fecha': forms.DateInput(attrs={'type': 'date'}),
'hora': forms.TimeInput(attrs={'type': 'time'}), # Widget para seleccionar la hora
}
class ListaEsperaForm(forms.ModelForm):
class Meta:
model = ListaEspera
fields = []

+ 25
- 0
JugarAlPadel/gestion_reservas/eventos/migrations/0003_listaespera.py View File

@ -0,0 +1,25 @@
# Generated by Django 4.2 on 2024-10-03 09:44
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('eventos', '0002_initial'),
]
operations = [
migrations.CreateModel(
name='ListaEspera',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('fecha_apuntado', models.DateTimeField(auto_now_add=True)),
('evento', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lista_espera', to='eventos.evento')),
('usuario', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

+ 9
- 0
JugarAlPadel/gestion_reservas/eventos/models.py View File

@ -26,3 +26,12 @@ class Reserva(models.Model):
def __str__(self):
return f'{self.usuario.nombre} - {self.evento.nombre}'
class ListaEspera(models.Model):
evento = models.ForeignKey(Evento, on_delete=models.CASCADE, related_name="lista_espera")
usuario = models.ForeignKey(ReyMotaUser, on_delete=models.CASCADE)
fecha_apuntado = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'{self.usuario.username} en lista de espera para {self.evento.nombre}'

+ 1
- 1
JugarAlPadel/gestion_reservas/eventos/urls.py View File

@ -6,7 +6,7 @@ app_name = 'eventos'
urlpatterns = [
path('eventos/', views.lista_eventos, name='lista_eventos'),
path('eventos/<int:evento_id>/', views.detalle_evento, name='detalle_evento'),
path('eventos/anular_reserva/<int:evento_id>/', views.anular_reserva, name='anular_reserva'),
path('eventos/apuntar_lista_espera/<int:evento_id>/', views.apuntar_lista_espera, name='apuntar_lista_espera'),
path('eventos/ayuda/', views.ayuda, name='ayuda'),
path('eventos/crear/', views.crear_evento, name='crear_evento'), # URL para crear un evento


+ 31
- 40
JugarAlPadel/gestion_reservas/eventos/views.py View File

@ -4,9 +4,8 @@ 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
from .models import Evento, Reserva, ListaEspera
from .forms import ListaEsperaForm, EventoForm
@login_required
@ -51,42 +50,6 @@ def reservar_evento(request, evento_id):
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()
@ -96,6 +59,11 @@ def lista_eventos(request):
for evento in eventos:
inscrito = Reserva.objects.filter(evento=evento, usuario=request.user).exists() if request.user.is_authenticated else False
if ListaEspera.objects.filter(evento=evento, usuario=request.user).exists():
en_espera = True
else:
en_espera = False
eventos_con_reserva.append({
'evento': evento,
'inscrito': inscrito,
@ -103,7 +71,9 @@ def lista_eventos(request):
'nombre': evento.nombre,
'fecha': evento.fecha,
'plazas_disponibles': evento.plazas_disponibles,
'plazas_restantes': evento.plazas_restantes
'plazas_restantes': evento.plazas_restantes,
'en_espera': en_espera,
'usuario': request.user
})
return render(request, 'eventos/lista_eventos.html', {'eventos_con_reserva': eventos_con_reserva})
@ -146,3 +116,24 @@ def crear_evento(request):
form = EventoForm()
return render(request, 'eventos/crear_evento.html', {'form': form})
@login_required
def apuntar_lista_espera(request, evento_id):
evento = get_object_or_404(Evento, id=evento_id)
# Verificar si el usuario ya está en la lista de espera
if ListaEspera.objects.filter(evento=evento, usuario=request.user).exists():
messages.error(request, 'Ya estás en la lista de espera para este evento.')
return redirect('eventos:lista_eventos')
# Crear una entrada en la lista de espera
if request.method == 'POST':
form = ListaEsperaForm(request.POST)
if form.is_valid():
ListaEspera.objects.create(evento=evento, usuario=request.user)
messages.success(request, 'Te has apuntado a la lista de espera para este evento.')
return redirect('eventos:lista_eventos')
form = ListaEsperaForm()
return render(request, 'eventos/apuntar_lista_espera.html', {'form': form, 'evento': evento})

+ 35
- 0
JugarAlPadel/gestion_reservas/templates/eventos/apuntar_lista_espera.html View File

@ -0,0 +1,35 @@
{% extends 'base.html' %}
{% block menuapp %}
{% endblock menuapp %}
{% block content %}
<div class="container-xl">
<div class="row g-3 mb-4 align-items-center justify-content-between">
<div class="col-auto">
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
<div class="row g-3 mb-4 align-items-center justify-content-between">
<div class="col-auto">
<h1 class="app-page-title mb-0">Lista de espera para {{ evento.nombre }}</h1>
<p>Este evento está completo, pero puedes apuntarte a la lista de espera.</p>
<form method="post">
{% csrf_token %}
<button type="submit">Apuntarse a la Lista de Espera</button>
</form>
<a href="{% url 'eventos:lista_eventos' %}">Volver a la lista de eventos</a>
</div>
</div><!--//row-->
</div><!--//container-fluid-->
{% endblock %}

Loading…
Cancel
Save