From 28df0355c2e8c10d766ac723ceb5ca524ae5f44b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Wed, 21 Dec 2016 02:15:50 +0100 Subject: [PATCH] =?UTF-8?q?Am=C3=A9liore=20l'algo=20d'inscription=20=C3=A0?= =?UTF-8?q?=20une=20revente?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Au lieu d'inscrire les gens à la première revente qu'on trouve on les inscrit à celle qui a le moins de participants --- bda/views.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/bda/views.py b/bda/views.py index 378912a8..efd2e1cb 100644 --- a/bda/views.py +++ b/bda/views.py @@ -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(