Ver Fonte

Añado elegir acompañante a la lista de espera en caso de parejas

Celestino Rey há 1 ano atrás
pai
commit
6eb3e7e4df

+ 27 - 1
src/eventos/forms.py

@@ -52,9 +52,35 @@ class EventoForm(forms.ModelForm):
 
 
 
 
 class ListaEsperaForm(forms.ModelForm):
 class ListaEsperaForm(forms.ModelForm):
+    acompanante = forms.ModelChoiceField(
+        queryset=User.objects.none(),
+        required=False,
+        label="Acompañante"
+    )
+
     class Meta:
     class Meta:
         model = ListaEspera
         model = ListaEspera
-        fields = []
+        fields = ['acompanante']
+    def __init__(self, *args, **kwargs):
+        evento = kwargs.pop('evento', None)
+        usuario = kwargs.pop('usuario', None)
+        super().__init__(*args, **kwargs)
+
+        # Solo permitir elegir acompañante si el evento es para parejas
+        if evento and evento.para_parejas:
+            # Ordenar alfabéticamente por nombre y excluir al propio usuario
+            self.fields['acompanante'].queryset = (
+                User.objects.exclude(id=usuario.id)
+                .order_by('nombre')
+            )
+
+            # Mostrar el nombre completo o username en las opciones
+            self.fields['acompanante'].label_from_instance = (
+                lambda obj: f"{obj.nombre}"
+            )
+        else:
+            # Si no es evento de parejas, ocultamos el campo
+            self.fields.pop('acompanante')  
 
 
 
 
 class MensajeCorreoForm(forms.Form):
 class MensajeCorreoForm(forms.Form):

+ 7 - 0
src/eventos/models.py

@@ -45,6 +45,13 @@ class Reserva(models.Model):
 class ListaEspera(models.Model):
 class ListaEspera(models.Model):
     evento = models.ForeignKey(Evento, on_delete=models.CASCADE, related_name="lista_espera")
     evento = models.ForeignKey(Evento, on_delete=models.CASCADE, related_name="lista_espera")
     usuario = models.ForeignKey(ReyMotaUser, on_delete=models.CASCADE)
     usuario = models.ForeignKey(ReyMotaUser, on_delete=models.CASCADE)
+    acompanante = models.ForeignKey(
+        ReyMotaUser,
+        on_delete=models.SET_NULL,
+        null=True,
+        blank=True,
+        related_name='lista_espera_como_acompanante'
+    )
     fecha_apuntado = models.DateTimeField(auto_now_add=True)
     fecha_apuntado = models.DateTimeField(auto_now_add=True)
 
 
     def __str__(self):
     def __str__(self):

+ 3 - 0
src/eventos/urls.py

@@ -13,6 +13,7 @@ urlpatterns = [
     path('eventos/', views.lista_eventos, name='lista_eventos'),
     path('eventos/', views.lista_eventos, name='lista_eventos'),
     path('eventos/<int:evento_id>/', views.detalle_evento, name='detalle_evento'),
     path('eventos/<int:evento_id>/', views.detalle_evento, name='detalle_evento'),
     path('eventos/apuntar_lista_espera/<int:evento_id>/', views.apuntar_lista_espera, name='apuntar_lista_espera'),
     path('eventos/apuntar_lista_espera/<int:evento_id>/', views.apuntar_lista_espera, name='apuntar_lista_espera'),
+    path('eventos/apuntar_lista_espera_parejas/<int:evento_id>/', views.apuntar_lista_espera, name='apuntar_lista_espera'),
     path('eventos/ayuda/', views.ayuda, name='ayuda'),
     path('eventos/ayuda/', views.ayuda, name='ayuda'),
     path('eventos/crear/', views.crear_evento, name='crear_evento'),  # URL para crear un evento
     path('eventos/crear/', views.crear_evento, name='crear_evento'),  # URL para crear un evento
     path('eventos/editar/', views.editar_evento, name='editar_evento'),  # URL para crear un evento
     path('eventos/editar/', views.editar_evento, name='editar_evento'),  # URL para crear un evento
@@ -30,6 +31,8 @@ urlpatterns = [
 
 
     path("reservar/<int:reserva_id>/eliminar/", views.cancelar_reserva_admin, name="cancelar_reserva_admin"),
     path("reservar/<int:reserva_id>/eliminar/", views.cancelar_reserva_admin, name="cancelar_reserva_admin"),
 
 
+# API endpoints
+
     path('api/eventos/', api_lista_eventos, name='api_lista_eventos'),
     path('api/eventos/', api_lista_eventos, name='api_lista_eventos'),
     path('api/eventos/<int:evento_id>/', api_detalle_evento, name='api_detalle_evento'),
     path('api/eventos/<int:evento_id>/', api_detalle_evento, name='api_detalle_evento'),
 
 

+ 28 - 0
src/eventos/views.py

@@ -305,6 +305,34 @@ def apuntar_lista_espera(request, evento_id):
     return render(request, 'eventos/apuntar_lista_espera.html', {'form': form, 'evento': evento})
     return render(request, 'eventos/apuntar_lista_espera.html', {'form': form, 'evento': evento})
 
 
 
 
+@login_required
+def apuntar_lista_espera_parejas(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, evento=evento, usuario=request.user)
+        if form.is_valid():
+            acompanante = form.cleaned_data.get('acompanante')
+
+            ListaEspera.objects.create(
+                evento=evento, 
+                usuario=request.user,
+                acompanante=acompanante if evento.para_parejas else None
+            )
+            
+            messages.success(request, 'Te has apuntado a la lista de espera para este evento.')
+            return redirect('eventos:lista_eventos')
+    else:
+        form = ListaEsperaForm(evento=evento, usuario=request.user)
+
+    return render(request, 'eventos/apuntar_lista_espera.html', {'form': form, 'evento': evento})
+
 #
 #
 # API
 # API
 #
 #

+ 5 - 1
src/templates/eventos/detalle_evento.html

@@ -54,7 +54,11 @@
                            {% endif %}
                            {% endif %}
                         {% else %}
                         {% else %}
                             {% if not evento.en_espera %}
                             {% if not evento.en_espera %}
-                                <a class="btn btn-warning" href="{% url 'eventos:apuntar_lista_espera' evento.evento.id %}">Apuntarse a la lista de espera</a>
+                                {% if evento.para_parejas %}
+                                   <a class="btn btn-warning" href="{% url 'eventos:apuntar_lista_espera_parejas' evento.evento.id %}">Apuntarse a la lista de espera</a>
+                                {% else %}
+                                   <a class="btn btn-warning" href="{% url 'eventos:apuntar_lista_espera' evento.evento.id %}">Apuntarse a la lista de espera</a>
+                                {% endif %}
                             {% endif %}
                             {% endif %}
                         {% endif %}
                         {% endif %}
                     {% endif %}
                     {% endif %}