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/(?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-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/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'^survey/(?P<survey_id>\d+)$', 'gestioncof.views.survey'),
|
||||||
url(r'^event/(?P<event_id>\d+)$', 'gestioncof.views.event'),
|
url(r'^event/(?P<event_id>\d+)$', 'gestioncof.views.event'),
|
||||||
url(r'^survey/(?P<survey_id>\d+)/status$', 'gestioncof.views.survey_status'),
|
url(r'^survey/(?P<survey_id>\d+)/status$', 'gestioncof.views.survey_status'),
|
||||||
|
|
Loading…
Reference in a new issue