forked from DGNum/gestioCOF
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.
This commit is contained in:
parent
15fdf4f5f9
commit
8ab7fac3be
4 changed files with 100 additions and 0 deletions
61
bda/mails.py
Normal file
61
bda/mails.py
Normal file
|
@ -0,0 +1,61 @@
|
|||
# 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})
|
||||
|
21
bda/templates/mail-rappel.txt
Normal file
21
bda/templates/mail-rappel.txt
Normal file
|
@ -0,0 +1,21 @@
|
|||
Bonjour {{ member.get_full_name }},
|
||||
|
||||
Nous te rappellons que tu as eu la chance d'obtenir {{ member.nb_attr|pluralize:"une place,deux places" }}
|
||||
pour {{ show.title }}, le {{ show.date_no_seconds }} au {{ show.location }}. N'oublie pas de t'y rendre !
|
||||
{% if member.nb_attr == 2 %}
|
||||
Tu as obtenu deux places pour ce spectacle. Nous te rappelons que
|
||||
ces places sont strictement réservées aux personnes de moins de 28 ans.
|
||||
{% endif %}
|
||||
SI BILLETS DISTRIBUÉS Pour assister à ce spectacle, tu dois présenter les billets qui ont
|
||||
été distribués au burô. OU BIEN SI LISTING Pour ce spectacle, tu as reçu des places sur
|
||||
listing. Il te faudra donc te rendre 15 minutes en avance sur les lieux de la représentation
|
||||
pour retirer {{ member.nb_attr|pluralize:"ta place,tes places" }}.
|
||||
|
||||
Si tu ne peux plus assister à cette représentation, tu peux
|
||||
revendre ta place via BdA-revente, accessible directement sur
|
||||
GestioCOF (lien "revendre une place du premier tirage" sur la page
|
||||
d'accueil https://www.cof.ens.fr/gestion/).
|
||||
|
||||
En te souhaitant un excellent spectacle,
|
||||
|
||||
Le Bureau des Arts
|
17
bda/templates/mails-rappel-sent.html
Normal file
17
bda/templates/mails-rappel-sent.html
Normal file
|
@ -0,0 +1,17 @@
|
|||
{% extends "base_title.html" %}
|
||||
|
||||
{% block realcontent %}
|
||||
<h3>Les mails de rappel pour le spectacle {{ show.title }} ont bien été envoyés aux personnes suivantes</h3>
|
||||
<ul>
|
||||
{% for member in members %}
|
||||
<li>{{ member.get_full_name }} ({{ member.email }})</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<h3>Forme des mails envoyés</h3>
|
||||
|
||||
<br />Une seule place<br /><br />
|
||||
<pre>{{ example1 }}</pre>
|
||||
|
||||
<br />Deux places<br /><br />
|
||||
<pre>{{ example2 }}</pre>
|
||||
{% endblock %}
|
|
@ -52,6 +52,7 @@ urlpatterns = patterns('',
|
|||
url(r'^bda/spectacles/(?P<tirage_id>\d+)/(?P<spectacle_id>\d+)$', "bda.views.spectacle", name = "bda-spectacle"),
|
||||
url(r'^bda/spectacles-ics/(?P<tirage_id>\d+)$', 'bda.views.liste_spectacles_ics', name ="bda-liste-spectacles-ics"),
|
||||
url(r'^bda/spectacles/unpaid/(?P<tirage_id>\d+)$', "bda.views.unpaid", name = "bda-unpaid"),
|
||||
url(r'bda/mails-rappel/(?P<spectacle_id>\d+)$', "bda.mails.send_rappel"),
|
||||
url(r'^survey/(?P<survey_id>\d+)$', 'gestioncof.views.survey'),
|
||||
url(r'^event/(?P<event_id>\d+)$', 'gestioncof.views.event'),
|
||||
url(r'^survey/(?P<survey_id>\d+)/status$', 'gestioncof.views.survey_status'),
|
||||
|
|
Loading…
Reference in a new issue