From 69aee6b8ac71eef0e5308b67bb55ff14bcdc9b78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Sun, 18 Jun 2017 16:52:53 +0100 Subject: [PATCH] Move bda.get_generic_user + optimize send_rappels --- bda/__init__.py | 9 --------- bda/models.py | 36 +++++++++++++++++++++--------------- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/bda/__init__.py b/bda/__init__.py index a5eecc65..8b137891 100644 --- a/bda/__init__.py +++ b/bda/__init__.py @@ -1,10 +1 @@ -from django.contrib.auth.models import User - -def get_generic_user(): - generic, created = User.objects.get_or_create(username="bda_generic") - if created: - generic.email = "bda@ens.fr" - generic.first_name = "Bureau des Arts" - generic.save() - return generic diff --git a/bda/models.py b/bda/models.py index 42090374..41462d70 100644 --- a/bda/models.py +++ b/bda/models.py @@ -7,11 +7,18 @@ from custommail.shortcuts import send_mass_custom_mail from django.contrib.sites.models import Site from django.db import models +from django.db.models import Count from django.contrib.auth.models import User from django.conf import settings from django.utils import timezone, formats -from . import get_generic_user + +def get_generic_user(): + generic, _ = User.objects.get_or_create( + username="bda_generic", + defaults={"email": "bda@ens.fr", "first_name": "Bureau des arts"} + ) + return generic class Tirage(models.Model): @@ -98,30 +105,29 @@ class Spectacle(models.Model): Envoie un mail de rappel à toutes les personnes qui ont une place pour ce spectacle. """ - # On récupère la liste des participants - members = {} - for attr in Attribution.objects.filter(spectacle=self).all(): - member = attr.participant.user - if member.id in members: - members[member.id][1] = 2 - else: - members[member.id] = [member, 1] - # On écrit un mail personnalisé à chaque participant + # On récupère la liste des participants + le BdA + members = list( + User.objects + .filter(participant__attributions=self) + .annotate(nb_attr=Count("id")).order_by() + ) bda_generic = get_generic_user() - members[-1] = [bda_generic, 1] + bda_generic.nb_attr = 1 + members.append(bda_generic) + # On écrit un mail personnalisé à chaque participant datatuple = [( 'bda-rappel', - {'member': member[0], 'nb_attr': member[1], 'show': self}, + {'member': member, "nb_attr": member.nb_attr, 'show': self}, settings.MAIL_DATA['rappels']['FROM'], - [member[0].email]) - for member in members.values() + [member.email]) + for member in members ] send_mass_custom_mail(datatuple) # On enregistre le fait que l'envoi a bien eu lieu self.rappel_sent = timezone.now() self.save() # On renvoie la liste des destinataires - return map(lambda t: t[0], members.values()) + return members @property def is_past(self):