forked from DGNum/gestioCOF
Déplace la fonction d'envoi des mails
C'est désormais une méthode des spectacles et la vue `send_rappel` permet de l'appeler.
This commit is contained in:
parent
ab8afc000a
commit
8054e20cce
3 changed files with 56 additions and 58 deletions
58
bda/mails.py
58
bda/mails.py
|
@ -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})
|
|
||||||
|
|
|
@ -6,6 +6,14 @@ from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.db.models.signals import post_save
|
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):
|
class Tirage(models.Model):
|
||||||
title = models.CharField("Titre", max_length=300)
|
title = models.CharField("Titre", max_length=300)
|
||||||
|
@ -55,6 +63,33 @@ class Spectacle(models.Model):
|
||||||
def __unicode__ (self):
|
def __unicode__ (self):
|
||||||
return u"%s - %s, %s, %.02f€" % (self.title, self.date_no_seconds(),
|
return u"%s - %s, %s, %.02f€" % (self.title, self.date_no_seconds(),
|
||||||
self.location, self.price)
|
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 = (
|
PAYMENT_TYPES = (
|
||||||
("cash",u"Cash"),
|
("cash",u"Cash"),
|
||||||
|
|
21
bda/views.py
21
bda/views.py
|
@ -337,3 +337,24 @@ def liste_spectacles_ics(request, tirage_id):
|
||||||
{"spectacles": spectacles, "tirage": tirage},
|
{"spectacles": spectacles, "tirage": tirage},
|
||||||
content_type="text/calendar")
|
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})
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue