kpsul/bda/mails.py
Martin Pépin 8ab7fac3be Premier jet pour les mails de rappel
La vue `bda.mails.send_rappel/<id>` envoie des mails aux participants
du spectacle référencé par `<id>`. Elle doit être déclenchée
manuellement.

Le template du mail est dans `bda/templates/mail-rappel.txt`. Tant que
GestioCOF ne sait pas si les spectacles sont sur listing ou non, il
reste une partie pas très belle.
2016-06-10 00:43:48 +02:00

62 lines
2 KiB
Python

# 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
RAPPEL_FROM = 'Le BdA <bda@ens.fr>'
RAPPEL_REPLY_TO = RAPPEL_FROM
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})