|
|
@@ -25,9 +25,18 @@ class ReservaForm(forms.ModelForm):
|
|
|
|
|
|
# Solo permitir elegir acompañante si el evento es para parejas
|
|
|
if evento and evento.para_parejas:
|
|
|
+ # Excluir usuarios que ya tienen reserva o están en lista de espera
|
|
|
+ usuarios_excluidos = set(
|
|
|
+ Reserva.objects.filter(evento=evento).values_list('usuario_id', flat=True)
|
|
|
+ ) | set(
|
|
|
+ ListaEspera.objects.filter(evento=evento).values_list('usuario_id', flat=True)
|
|
|
+ )
|
|
|
+
|
|
|
# Ordenar alfabéticamente por nombre y excluir al propio usuario
|
|
|
self.fields['acompanante'].queryset = (
|
|
|
- User.objects.exclude(id=usuario.id)
|
|
|
+ User.objects.exclude(id__in=usuarios_excluidos)
|
|
|
+ .exclude(id=usuario.id)
|
|
|
+ .filter(is_active=True)
|
|
|
.order_by('nombre')
|
|
|
)
|
|
|
|
|
|
@@ -61,7 +70,7 @@ class ListaEsperaForm(forms.ModelForm):
|
|
|
class Meta:
|
|
|
model = ListaEspera
|
|
|
fields = ['acompanante']
|
|
|
-
|
|
|
+
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
evento = kwargs.pop('evento', None)
|
|
|
usuario = kwargs.pop('usuario', None)
|
|
|
@@ -69,9 +78,18 @@ class ListaEsperaForm(forms.ModelForm):
|
|
|
|
|
|
# Solo permitir elegir acompañante si el evento es para parejas
|
|
|
if evento and evento.para_parejas:
|
|
|
+ # Excluir usuarios que ya tienen reserva o están en lista de espera
|
|
|
+ usuarios_excluidos = set(
|
|
|
+ Reserva.objects.filter(evento=evento).values_list('usuario_id', flat=True)
|
|
|
+ ) | set(
|
|
|
+ ListaEspera.objects.filter(evento=evento).values_list('usuario_id', flat=True)
|
|
|
+ )
|
|
|
+
|
|
|
# Ordenar alfabéticamente por nombre y excluir al propio usuario
|
|
|
self.fields['acompanante'].queryset = (
|
|
|
- User.objects.exclude(id=usuario.id)
|
|
|
+ User.objects.exclude(id__in=usuarios_excluidos)
|
|
|
+ .exclude(id=usuario.id)
|
|
|
+ .filter(is_active=True)
|
|
|
.order_by('nombre')
|
|
|
)
|
|
|
|