From 7abdccfbdb3da53341e06ff6edb60e0d8061eaf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Tue, 27 Sep 2016 17:57:53 +0200 Subject: [PATCH 1/8] =?UTF-8?q?Meilleure=20gestion=20des=20donn=C3=A9es=20?= =?UTF-8?q?mails?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les valeurs de champs FROM, REPLY-TO et BCC des mails envoyés par GestioCOF sont enregistrées dans un dictionnaire `settings.MAIL_DATA` plutôt que d'être toutes enregistrées comme variables indépendantes --- bda/models.py | 17 +++++++++++------ cof/settings_dev.py | 21 ++++++++++++--------- gestioncof/petits_cours_views.py | 6 +++--- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/bda/models.py b/bda/models.py index 1074e58b..cc96e525 100644 --- a/bda/models.py +++ b/bda/models.py @@ -119,8 +119,9 @@ class Spectacle(models.Model): 'show': self}) mail_tot = mail.EmailMessage( mail_object, mail_body, - settings.RAPPEL_FROM, [member.email], - [], headers={'Reply-To': settings.RAPPEL_REPLY_TO}) + settings.MAIL_DATA['rappels']['FROM'], [member.email], + [], headers={ + 'Reply-To': settings.MAIL_DATA['rappels']['REPLYTO']}) mails_to_send.append(mail_tot) # On envoie les mails connection = mail.get_connection() @@ -273,8 +274,10 @@ class SpectacleRevente(models.Model): 'revente': self}) mail_tot = mail.EmailMessage( mail_object, mail_body, - settings.REVENTE_FROM, [participant.user.email], - [], headers={'Reply-To': settings.REVENTE_REPLY_TO}) + settings.MAIL_DATA['revente']['FROM'], + [participant.user.email], + [], headers={ + 'Reply-To': settings.MAIL_DATA['revente']['REPLYTO']}) mails_to_send.append(mail_tot) connection = mail.get_connection() @@ -294,8 +297,10 @@ class SpectacleRevente(models.Model): 'mail': self.attribution.participant.user.email}) mail_tot = mail.EmailMessage( mail_object, mail_body, - settings.REVENTE_FROM, [participant.user.email], - [], headers={'Reply-To': settings.REVENTE_REPLY_TO}) + settings.MAIL_DATA['revente']['FROM'], + [participant.user.email], + [], headers={ + 'Reply-To': settings.MAIL_DATA['revente']['REPLYTO']}) mails_to_send.append(mail_tot) connection = mail.get_connection() diff --git a/cof/settings_dev.py b/cof/settings_dev.py index 7d270648..5e092635 100644 --- a/cof/settings_dev.py +++ b/cof/settings_dev.py @@ -145,15 +145,18 @@ ADMIN_MEDIA_PREFIX = '/static/grappelli/' GRAPPELLI_ADMIN_HEADLINE = "GestioCOF" GRAPPELLI_ADMIN_TITLE = "GestioCOF" -PETITS_COURS_FROM = "Le COF " -PETITS_COURS_BCC = "archivescof@gmail.com" -PETITS_COURS_REPLYTO = "cof@ens.fr" - -RAPPEL_FROM = 'Le BdA ' -RAPPEL_REPLY_TO = RAPPEL_FROM - -REVENTE_FROM = 'BDA-Revente ' -REVENTE_REPLY_TO = REVENTE_FROM +MAIL_DATA = { + 'petits_cours': { + 'FROM': "Le COF ", + 'BCC': "archivescof@gmail.com", + 'REPLYTO': "cof@ens.fr"}, + 'rappels': { + 'FROM': 'Le BdA ', + 'REPLYTO': 'Le BdA '}, + 'revente': { + 'FROM': 'BDA-Revente ', + 'REPLYTO': 'BDA-Revente '}, +} LOGIN_URL = "/gestion/login" LOGIN_REDIRECT_URL = "/gestion/" diff --git a/gestioncof/petits_cours_views.py b/gestioncof/petits_cours_views.py index 1a31115d..e9fe511e 100644 --- a/gestioncof/petits_cours_views.py +++ b/gestioncof/petits_cours_views.py @@ -282,9 +282,9 @@ def _traitement_post(request, demande): {"proposals": proposals_list, "unsatisfied": unsatisfied, "extra": extra}) - frommail = settings.PETITS_COURS_FROM - bccaddress = settings.PETITS_COURS_BCC - replyto = settings.PETITS_COURS_REPLYTO + frommail = settings.MAIL_DATA['petits_cours']['FROM'] + bccaddress = settings.MAIL_DATA['petits_cours']['BCC'] + replyto = settings.MAIL_DATA['petits_cours']['REPLYTO'] mails_to_send = [] for (user, msg) in proposed_mails: msg = EmailMessage("Petits cours ENS par le COF", msg, From 1dad85882b7ce5b5b4ab20e32a3625e6fb27bb5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Fri, 30 Sep 2016 00:35:51 +0200 Subject: [PATCH 2/8] Ajoute le BdA dans les destinataires des rappels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modifie légérement la façon dont est généré le mail au passage --- bda/models.py | 13 ++++++++----- bda/templates/mail-rappel.txt | 8 ++++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/bda/models.py b/bda/models.py index 1074e58b..4b2acdd3 100644 --- a/bda/models.py +++ b/bda/models.py @@ -105,21 +105,24 @@ class Spectacle(models.Model): for attr in Attribution.objects.filter(spectacle=self).all(): member = attr.participant.user if member.id in members: - members[member.id].nb_attr = 2 + members[member.id][1] = 2 else: - member.nb_attr = 1 - members[member.id] = member + members[member.id] = [member.get_full_name(), 1, member.email] + # Pour le BdA + members[0] = ['BdA', 1, 'bda@ens.fr'] + members[-1] = ['BdA', 2, 'bda@ens.fr'] # 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, + 'name': member[0], + 'nb_attr': member[1], 'show': self}) mail_tot = mail.EmailMessage( mail_object, mail_body, - settings.RAPPEL_FROM, [member.email], + settings.RAPPEL_FROM, [member[2]], [], headers={'Reply-To': settings.RAPPEL_REPLY_TO}) mails_to_send.append(mail_tot) # On envoie les mails diff --git a/bda/templates/mail-rappel.txt b/bda/templates/mail-rappel.txt index 5152b1db..4759a849 100644 --- a/bda/templates/mail-rappel.txt +++ b/bda/templates/mail-rappel.txt @@ -1,14 +1,14 @@ -Bonjour {{ member.get_full_name }}, +Bonjour {{ name }}, -Nous te rappellons que tu as eu la chance d'obtenir {{ member.nb_attr|pluralize:"une place,deux places" }} +Nous te rappellons que tu as eu la chance d'obtenir {{ 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 %} +{% if 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 %} {% if show.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" }}. +pour retirer {{ nb_attr|pluralize:"ta place,tes places" }}. {% else %}Pour assister à ce spectacle, tu dois présenter les billets qui ont été distribués au burô. {% endif %} From 60a11a8ba470aa4a830a67e26a3d34585b3f7c8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Mon, 3 Oct 2016 16:08:29 +0200 Subject: [PATCH 3/8] Changement mineur dans le mail --- bda/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bda/models.py b/bda/models.py index 4b2acdd3..e45393f1 100644 --- a/bda/models.py +++ b/bda/models.py @@ -107,7 +107,7 @@ class Spectacle(models.Model): if member.id in members: members[member.id][1] = 2 else: - members[member.id] = [member.get_full_name(), 1, member.email] + members[member.id] = [member.first_name, 1, member.email] # Pour le BdA members[0] = ['BdA', 1, 'bda@ens.fr'] members[-1] = ['BdA', 2, 'bda@ens.fr'] From dff0b3ffdddeec754ec8664b1d850b94c4cb8ac7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Mon, 3 Oct 2016 20:06:33 +0200 Subject: [PATCH 4/8] Corrections dans les mails de revente - full_name -> first_name - Date - Url --- bda/models.py | 10 +++++++++- bda/templates/mail-revente.txt | 10 +++++++--- bda/templates/mail-shotgun.txt | 9 ++++++--- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/bda/models.py b/bda/models.py index 085bd548..90ea6b1d 100644 --- a/bda/models.py +++ b/bda/models.py @@ -8,6 +8,7 @@ import calendar import random from datetime import timedelta +from django.contrib.sites.models import Site from django.db import models from django.contrib.auth.models import User from django.template import loader, Context @@ -244,6 +245,11 @@ class SpectacleRevente(models.Model): # On a aussi 1h pour changer d'avis return self.date + delay + timedelta(hours=1) + def expiration_time_str(self): + return self.expiration_time \ + .astimezone(timezone.get_current_timezone()) \ + .strftime('%D à %H:%M') + @property def shotgun(self): # Soit on a dépassé le délai du tirage, soit il reste peu de @@ -270,7 +276,8 @@ class SpectacleRevente(models.Model): mail_body = render_template('mail-revente.txt', { 'user': participant.user, 'spectacle': self.attribution.spectacle, - 'revente': self}) + 'revente': self, + 'domain': Site.objects.get_current().domain}) mail_tot = mail.EmailMessage( mail_object, mail_body, settings.REVENTE_FROM, [participant.user.email], @@ -291,6 +298,7 @@ class SpectacleRevente(models.Model): mail_body = render_template('mail-shotgun.txt', { 'user': participant.user, 'spectacle': self.attribution.spectacle, + 'domain': Site.objects.get_current(), 'mail': self.attribution.participant.user.email}) mail_tot = mail.EmailMessage( mail_object, mail_body, diff --git a/bda/templates/mail-revente.txt b/bda/templates/mail-revente.txt index 94cab1b1..6d125988 100644 --- a/bda/templates/mail-revente.txt +++ b/bda/templates/mail-revente.txt @@ -1,8 +1,12 @@ -Bonjour {{ user.get_full_name }} +Bonjour {{ user.first_name }} -Une place pour le spectacle {{ spectacle.title }} ({{spectacle.date_no_seconds}}) a été postée sur BdA-Revente. +Une place pour le spectacle {{ spectacle.title }} ({{ spectacle.date_no_seconds }}) +a été postée sur BdA-Revente. -Si ce spectacle t'intéresse toujours, merci de nous le signaler en cliquant sur ce lien : {% url "bda-revente-interested" revente.id %}. Dans le cas où plusieurs personnes seraient intéressées, nous procèderons à un tirage au sort le {{revente.date_no_seconds}} +Si ce spectacle t'intéresse toujours, merci de nous le signaler en cliquant +sur ce lien : http://{{ domain }}{% url "bda-revente-interested" revente.id %}. +Dans le cas où plusieurs personnes seraient intéressées, nous procèderons à +un tirage au sort le {{ revente.expiration_time_str }} Chaleureusement, Le BdA diff --git a/bda/templates/mail-shotgun.txt b/bda/templates/mail-shotgun.txt index 4f972cf9..899d5c85 100644 --- a/bda/templates/mail-shotgun.txt +++ b/bda/templates/mail-shotgun.txt @@ -1,8 +1,11 @@ -Bonjour {{ user.get_full_name }} +Bonjour {{ user.first_name }} -Une place pour le spectacle {{ spectacle.title }} ({{spectacle.date_no_seconds}}) a été postée sur BdA-Revente. +Une place pour le spectacle {{ spectacle.title }} ({{ spectacle.date_no_seconds }}) +a été postée sur BdA-Revente. -Puisque ce spectacle a lieu dans moins de 24h, il n'y a pas de tirage au sort pour cette place : elle est disponible immédiatement à l'addresse {%url "bda-buy-revente" spectacle.id%}, à la disposition de tous. +Puisque ce spectacle a lieu dans moins de 24h, il n'y a pas de tirage au sort pour +cette place : elle est disponible immédiatement à l'addresse +http://{{ domain }}{% url "bda-buy-revente" spectacle.id %}, à la disposition de tous. Chaleureusement, Le BdA From a49bb5a799c6c1fbc535cc6650f2232f07bef349 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Mon, 3 Oct 2016 20:21:42 +0200 Subject: [PATCH 5/8] Typos --- bda/models.py | 2 +- bda/templates/mail-revente.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bda/models.py b/bda/models.py index 90ea6b1d..72590dac 100644 --- a/bda/models.py +++ b/bda/models.py @@ -321,7 +321,7 @@ class SpectacleRevente(models.Model): mail_buyer = """Bonjour, Tu as été tiré-e au sort pour racheter une place pour %s le %s (%s) à %0.02f€. -Tu peux contacter le vendeur à l'adresse %s. +Tu peux contacter le/la vendeur-se à l'adresse %s. Chaleureusement, Le BdA""" % (spectacle.title, spectacle.date_no_seconds(), diff --git a/bda/templates/mail-revente.txt b/bda/templates/mail-revente.txt index 6d125988..899afe3b 100644 --- a/bda/templates/mail-revente.txt +++ b/bda/templates/mail-revente.txt @@ -6,7 +6,7 @@ a été postée sur BdA-Revente. Si ce spectacle t'intéresse toujours, merci de nous le signaler en cliquant sur ce lien : http://{{ domain }}{% url "bda-revente-interested" revente.id %}. Dans le cas où plusieurs personnes seraient intéressées, nous procèderons à -un tirage au sort le {{ revente.expiration_time_str }} +un tirage au sort le {{ revente.expiration_time_str }}. Chaleureusement, Le BdA From 0a85eaa0cf0c14c3bb256c05cd260d0c2d2897ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Thu, 6 Oct 2016 10:28:13 +0200 Subject: [PATCH 6/8] Hot fix `participant.email` -> `participant.user.email` --- bda/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bda/models.py b/bda/models.py index 0debec36..d61f6b9b 100644 --- a/bda/models.py +++ b/bda/models.py @@ -333,7 +333,7 @@ Tu peux contacter le/la vendeur-se à l'adresse %s. Chaleureusement, Le BdA""" % (spectacle.title, spectacle.date_no_seconds(), - spectacle.location, spectacle.price, seller.email) + spectacle.location, spectacle.price, seller.user.email) mail.send_mail("BdA-Revente : %s" % spectacle.title, mail_buyer, "bda@ens.fr", [winner.user.email], @@ -346,7 +346,7 @@ Chaleureusement, Le BdA""" % (spectacle.title, winner.user.get_full_name(), winner.user.email) mail.send_mail("BdA-Revente : %s" % spectacle.title, - mail_seller, "bda@ens.fr", [seller.email], + mail_seller, "bda@ens.fr", [seller.user.email], fail_silently=False) self.tirage_done = True self.save() From 7ec6d2398763e3b6eaff32ff069e1daa6abccc2c Mon Sep 17 00:00:00 2001 From: Ludovic Stephan Date: Thu, 6 Oct 2016 14:26:47 +0200 Subject: [PATCH 7/8] fix reinit --- bda/forms.py | 2 +- bda/models.py | 1 + bda/views.py | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/bda/forms.py b/bda/forms.py index c2eec894..fe20e565 100644 --- a/bda/forms.py +++ b/bda/forms.py @@ -68,7 +68,7 @@ class AnnulForm(forms.Form): self.fields['attributions'].queryset = participant.attribution_set\ .filter(spectacle__date__gte=timezone.now(), revente__isnull=False, - revente__date__gte=timezone.now()-timedelta(hours=1))\ + revente__date__gt=timezone.now()-timedelta(hours=1))\ .filter(Q(revente__soldTo__isnull=True) | Q(revente__soldTo=participant)) diff --git a/bda/models.py b/bda/models.py index d1b5ba3c..a10fe5b4 100644 --- a/bda/models.py +++ b/bda/models.py @@ -223,6 +223,7 @@ class SpectacleRevente(models.Model): answered_mail = models.ManyToManyField(Participant, related_name="wanted", blank=True) + seller = models.ForeignKey(Participant, related_name="original_shows", verbose_name="Vendeur") diff --git a/bda/views.py b/bda/views.py index 4f1ba977..b87b90d4 100644 --- a/bda/views.py +++ b/bda/views.py @@ -333,7 +333,9 @@ def revente(request, tirage_id): revente = rev.get() revente.date = timezone.now() - timedelta(hours=1) revente.soldTo = None - revente.answered_mail = None + if revente.answered_mail: + revente.answered_mail.clear() + revente.save() else: resellform = ResellForm(participant, prefix='resell') From ca175fdf506d3e0a96ac19384c570729a3bb09d5 Mon Sep 17 00:00:00 2001 From: Ludovic Stephan Date: Thu, 6 Oct 2016 14:41:26 +0200 Subject: [PATCH 8/8] remove other work --- bda/templates/liste-reventes.html | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/bda/templates/liste-reventes.html b/bda/templates/liste-reventes.html index a619ed4c..78f3ac08 100644 --- a/bda/templates/liste-reventes.html +++ b/bda/templates/liste-reventes.html @@ -11,20 +11,7 @@ {% endif %}
{% csrf_token %} -
-

Spectacles

-
- - - -
-
    - {% for checkbox in form.spectacles %} -
  • {{checkbox}}
  • - {%endfor%} -
-
-
+ {{form | bootstrap}}
@@ -36,13 +23,4 @@
  • {{spectacle}}
  • {% endfor %} {% endif %} - - {% endblock %}