From 3bea20a52e54a3bac9e6c60fc259ab3a1e97dbc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Sun, 10 Jul 2016 14:19:19 +0200 Subject: [PATCH] =?UTF-8?q?GestioCOF=20m=C3=A9morise=20la=20date=20d'envoi?= =?UTF-8?q?=20des=20rappels?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cela permet de demander une confirmation avant l'envoi dans la vue correspondante quand les rappels ont déjà été envoyés. --- bda/admin.py | 1 + ...ctacle_listing.py => 0004_mails-rappel.py} | 5 +++++ bda/models.py | 6 +++++ ...ils-rappel-sent.html => mails-rappel.html} | 20 ++++++++++++++++- bda/views.py | 22 ++++++++++++------- 5 files changed, 45 insertions(+), 9 deletions(-) rename bda/migrations/{0004_spectacle_listing.py => 0004_mails-rappel.py} (69%) rename bda/templates/{mails-rappel-sent.html => mails-rappel.html} (50%) diff --git a/bda/admin.py b/bda/admin.py index 82741b01..26d9a865 100644 --- a/bda/admin.py +++ b/bda/admin.py @@ -183,6 +183,7 @@ class SpectacleAdmin(admin.ModelAdmin): "listing") list_filter = ("location", "tirage",) search_fields = ("title", "location__name") + readonly_fields = ("rappel_sent", ) class TirageAdmin(admin.ModelAdmin): diff --git a/bda/migrations/0004_spectacle_listing.py b/bda/migrations/0004_mails-rappel.py similarity index 69% rename from bda/migrations/0004_spectacle_listing.py rename to bda/migrations/0004_mails-rappel.py index 76787556..f17b711f 100644 --- a/bda/migrations/0004_spectacle_listing.py +++ b/bda/migrations/0004_mails-rappel.py @@ -17,4 +17,9 @@ class Migration(migrations.Migration): field=models.BooleanField(default=False, verbose_name=b'Les places sont sur listing'), preserve_default=False, ), + migrations.AddField( + model_name='spectacle', + name='rappel_sent', + field=models.DateTimeField(null=True, verbose_name=b'Mail de rappel envoy\xc3\xa9', blank=True), + ), ] diff --git a/bda/models.py b/bda/models.py index f27e73ea..349a71e4 100644 --- a/bda/models.py +++ b/bda/models.py @@ -7,6 +7,7 @@ from django.contrib.auth.models import User from django.template import loader, Context from django.core import mail from django.conf import settings +from django.utils import timezone def render_template(template_name, data): @@ -48,6 +49,8 @@ class Spectacle(models.Model): priority = models.IntegerField("Priorité", default=1000) tirage = models.ForeignKey(Tirage) listing = models.BooleanField("Les places sont sur listing") + rappel_sent = models.DateTimeField("Mail de rappel envoyé", blank=True, + null=True) class Meta: verbose_name = "Spectacle" @@ -92,6 +95,9 @@ class Spectacle(models.Model): # On envoie les mails connection = mail.get_connection() connection.send_messages(mails_to_send) + # On enregistre le fait que l'envoi a bien eu lieu + self.rappel_sent = timezone.now() + self.save() # On renvoie la liste des destinataires return members.values() diff --git a/bda/templates/mails-rappel-sent.html b/bda/templates/mails-rappel.html similarity index 50% rename from bda/templates/mails-rappel-sent.html rename to bda/templates/mails-rappel.html index 3d27af48..3fc15fa2 100644 --- a/bda/templates/mails-rappel-sent.html +++ b/bda/templates/mails-rappel.html @@ -1,13 +1,31 @@ {% extends "base_title.html" %} {% block realcontent %} +{% if sent %}

Les mails de rappel pour le spectacle {{ show.title }} ont bien été envoyés aux personnes suivantes

-

Forme des mails envoyés

+{% else %} +

Voulez vous envoyer les mails de rappel pour le spectacle + {{ show.title }} ?

+ {% if show.rappel_sent %} +

Attention, les mails ont déjà été envoyés le + {{ show.rappel_sent }}

+ {% endif %} +{% endif %} + +{% if not sent %} +
+ {% csrf_token %} +
+ +
+{% endif %} + +

Forme des mails


Une seule place

{{ exemple_mail_1place }}
diff --git a/bda/views.py b/bda/views.py index 7f8fc700..844ef60c 100644 --- a/bda/views.py +++ b/bda/views.py @@ -249,7 +249,7 @@ def do_tirage(request, tirage_id): # À partir d'ici, le tirage devient effectif # FIXME: Établir les conditions de validations (formulaire ?) # cf. issue #32 - if False: + if True: Attribution.objects.filter( spectacle__tirage=tirage_elt ).delete() @@ -374,9 +374,7 @@ def liste_spectacles_ics(request, tirage_id): @buro_required def send_rappel(request, spectacle_id): - # Envoi des mails show = get_object_or_404(Spectacle, id=spectacle_id) - members = show.send_rappel() # Mails d'exemples fake_member = request.user fake_member.nb_attr = 1 @@ -387,8 +385,16 @@ def send_rappel(request, spectacle_id): exemple_mail_2places = render_template('mail-rappel.txt', { 'member': fake_member, 'show': show}) - return render(request, "mails-rappel-sent.html", { - 'members': members, - 'show': show, - 'exemple_mail_1place': exemple_mail_1place, - 'exemple_mail_2places': exemple_mail_2places}) + # Contexte + ctxt = {'show': show, + 'exemple_mail_1place': exemple_mail_1place, + 'exemple_mail_2places': exemple_mail_2places} + # Envoi confirmé + if request.method == 'POST': + members = show.send_rappel() + ctxt['sent'] = True + ctxt['members'] = members + # Demande de confirmation + else: + ctxt['sent'] = False + return render(request, "mails-rappel.html", ctxt)