Améliore l'algo d'inscription à une revente

Au lieu d'inscrire les gens à la première revente qu'on trouve on
les inscrit à celle qui a le moins de participants
This commit is contained in:
Martin Pépin 2016-12-21 02:15:50 +01:00
parent 330b45fb2c
commit 28df0355c2

View file

@ -405,15 +405,23 @@ def list_revente(request, tirage_id):
for spectacle in choices:
qset = SpectacleRevente.objects.filter(
attribution__spectacle=spectacle)
if qset.exists():
# On l'inscrit à l'un des tirages au sort
for revente in qset.all():
if revente.shotgun and not revente.soldTo:
deja_revente = True
else:
revente.answered_mail.add(participant)
revente.save()
break
if qset.filter(shotgun=True, soldTo__isnull=True).exists():
# Une place est disponible au shotgun, on suggère à
# l'utilisateur d'aller la récupérer
deja_revente = True
else:
# La place n'est pas disponible au shotgun, si des reventes
# pour ce spectacle existent déjà, on inscrit la personne à
# la revente ayant le moins d'inscrits
min_resell = (
qset.filter(shotgun=False)
.annotate(nb_subscribers=Count('answered_mail'))
.order_by('nb_subscribers')
.first()
)
if min_resell is not None:
min_resell.answered_mail.add(participant)
min_resell.save()
success = True
else:
form = InscriptionReventeForm(