From 8054e20ccec212c665eb042686a2e24a379c08e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Fri, 10 Jun 2016 23:53:29 +0200 Subject: [PATCH] =?UTF-8?q?D=C3=A9place=20la=20fonction=20d'envoi=20des=20?= =?UTF-8?q?mails?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit C'est désormais une méthode des spectacles et la vue `send_rappel` permet de l'appeler. --- bda/mails.py | 58 --------------------------------------------------- bda/models.py | 35 +++++++++++++++++++++++++++++++ bda/views.py | 21 +++++++++++++++++++ 3 files changed, 56 insertions(+), 58 deletions(-) delete mode 100644 bda/mails.py diff --git a/bda/mails.py b/bda/mails.py deleted file mode 100644 index c11693f8..00000000 --- a/bda/mails.py +++ /dev/null @@ -1,58 +0,0 @@ -# coding: utf-8 - -from django.shortcuts import get_object_or_404, render -from django.core import mail -from django.template import loader, Context - -from gestioncof.decorators import buro_required - -from bda.models import Spectacle, Attribution - -def render_template(template_name, data): - tmpl = loader.get_template(template_name) - ctxt = Context(data) - return tmpl.render(ctxt) - -@buro_required -def send_rappel(request, spectacle_id): - # On récupère la liste des participants - show = get_object_or_404(Spectacle, id=spectacle_id) - members = {} - for attr in Attribution.objects.filter(spectacle=show).all(): - member = attr.participant.user - if member.id in members: - members[member.id].nb_attr = 2 - else: - member.nb_attr = 1 - members[member.id] = member - # On écrit un mail personnalisé à chaque participant - mails_to_send = [] - mail_object = "%s - %s - %s" % (show.title, show.date_no_seconds(), - show.location) - for member in members.values(): - mail_body = render_template('mail-rappel.txt', { - 'member': member, - 'show': show}) - mail_tot = mail.EmailMessage(mail_object, mail_body, - RAPPEL_FROM, [member.email], - [], headers={'Reply-To': RAPPEL_REPLY_TO}) - mails_to_send.append(mail_tot) - # On envoie les mails - connection = mail.get_connection(fail_silently=True) - connection.send_messages(mails_to_send) - # Mails d'exemples - fake_member = request.user - fake_member.nb_attr = 1 - example1 = render_template('mail-rappel.txt', { - 'member': fake_member, - 'show': show}) - fake_member.nb_attr = 2 - example2 = render_template('mail-rappel.txt', { - 'member': fake_member, - 'show': show}) - return render(request, "mails-rappel-sent.html", { - 'members': members.values(), - 'show': show, - 'example1': example1, - 'example2': example2}) - diff --git a/bda/models.py b/bda/models.py index 2b4dfe5d..295e2b65 100644 --- a/bda/models.py +++ b/bda/models.py @@ -6,6 +6,14 @@ from django.db import models from django.contrib.auth.models import User from django.utils.translation import ugettext_lazy as _ from django.db.models.signals import post_save +from django.template import loader, Context +from django.core import mail +from django.conf import settings + +def render_template(template_name, data): + tmpl = loader.get_template(template_name) + ctxt = Context(data) + return tmpl.render(ctxt) class Tirage(models.Model): title = models.CharField("Titre", max_length=300) @@ -55,6 +63,33 @@ class Spectacle(models.Model): def __unicode__ (self): return u"%s - %s, %s, %.02f€" % (self.title, self.date_no_seconds(), self.location, self.price) + def send_rappel(self): + # 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].nb_attr = 2 + else: + member.nb_attr = 1 + members[member.id] = member + # On écrit un mail personnalisé à chaque participant + mails_to_send = [] + mail_object = "%s - %s - %s" % (self.title, self.date_no_seconds(), + self.location) + for member in members.values(): + mail_body = render_template('mail-rappel.txt', { + 'member': member, + 'show': self}) + mail_tot = mail.EmailMessage(mail_object, mail_body, + settings.RAPPEL_FROM, [member.email], + [], headers={'Reply-To': settings.RAPPEL_REPLY_TO}) + mails_to_send.append(mail_tot) + # On envoie les mails + connection = mail.get_connection(fail_silently=True) + connection.send_messages(mails_to_send) + # On renvoie la liste des destinataires + return members.values() PAYMENT_TYPES = ( ("cash",u"Cash"), diff --git a/bda/views.py b/bda/views.py index f4495f55..efe82208 100644 --- a/bda/views.py +++ b/bda/views.py @@ -337,3 +337,24 @@ def liste_spectacles_ics(request, tirage_id): {"spectacles": spectacles, "tirage": tirage}, content_type="text/calendar") +@buro_required +def send_rappel(request, spectacle_id): + # Envoi des mails + show = get_object_or_404(Spectacle, id=spectacle_id) + show.send_rappel() + # Mails d'exemples + fake_member = request.user + fake_member.nb_attr = 1 + example1 = render_template('mail-rappel.txt', { + 'member': fake_member, + 'show': show}) + fake_member.nb_attr = 2 + example2 = render_template('mail-rappel.txt', { + 'member': fake_member, + 'show': show}) + return render(request, "mails-rappel-sent.html", { + 'members': members.values(), + 'show': show, + 'example1': example1, + 'example2': example2}) +