Utilise django_custommail

- On installe le package depuis le dépôt COF-Geek
- On supprime tous les fichiers texte des mails
- On charge dans la bdd les mails nécessaires au fonctionnement de
  GestioCOF
- On supprime le modèle CustomMail obsolète de gestioncof
This commit is contained in:
Martin Pépin 2016-12-22 02:00:10 +01:00
parent 2d1a9d8ecb
commit fe8f18ff78
19 changed files with 147 additions and 316 deletions

View file

@ -8,7 +8,7 @@ from django import forms
from django.contrib import admin
from django.utils.translation import ugettext_lazy as _
from gestioncof.models import SurveyQuestionAnswer, SurveyQuestion, \
CofProfile, EventOption, EventOptionChoice, Event, Club, CustomMail, \
CofProfile, EventOption, EventOptionChoice, Event, Club, \
Survey, EventCommentField, EventRegistration
from gestioncof.petits_cours_models import PetitCoursDemande, \
PetitCoursSubject, PetitCoursAbility, PetitCoursAttribution, \
@ -267,10 +267,6 @@ class PetitCoursDemandeAdmin(admin.ModelAdmin):
search_fields = ('name', 'email', 'phone', 'lieu', 'remarques')
class CustomMailAdmin(admin.ModelAdmin):
search_fields = ('shortname', 'title')
class ClubAdminForm(forms.ModelForm):
def clean(self):
cleaned_data = super(ClubAdminForm, self).clean()
@ -297,7 +293,6 @@ admin.site.unregister(User)
admin.site.register(User, UserProfileAdmin)
admin.site.register(CofProfile)
admin.site.register(Club, ClubAdmin)
admin.site.register(CustomMail)
admin.site.register(PetitCoursSubject)
admin.site.register(PetitCoursAbility, PetitCoursAbilityAdmin)
admin.site.register(PetitCoursAttribution, PetitCoursAttributionAdmin)

View file

@ -96,22 +96,6 @@ class Club(models.Model):
return self.name
@python_2_unicode_compatible
class CustomMail(models.Model):
shortname = models.SlugField(max_length=50, blank=False)
title = models.CharField("Titre", max_length=200, blank=False)
content = models.TextField("Contenu", blank=False)
comments = models.TextField("Informations contextuelles sur le mail",
blank=True)
class Meta:
verbose_name = "Mail personnalisable"
verbose_name_plural = "Mails personnalisables"
def __str__(self):
return "%s: %s" % (self.shortname, self.title)
@python_2_unicode_compatible
class Event(models.Model):
title = models.CharField("Titre", max_length=200)

View file

@ -4,9 +4,9 @@ from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from custommail.utils import send_custom_mail, render_mail
from django.shortcuts import render, get_object_or_404, redirect
from django.core import mail
from django.core.mail import EmailMessage
from django.forms import ModelForm
from django import forms
from django.forms.models import inlineformset_factory, BaseInlineFormSet
@ -131,7 +131,7 @@ def _finalize_traitement(request, demande, proposals, proposed_for,
proposed_for = proposed_for.items()
attribdata = list(attribdata.items())
proposed_mails = _generate_eleve_email(demande, proposed_for)
mainmail = loader.render_to_string("petits-cours-mail-demandeur.txt", {
mainmail = render_mail("petits-cours-mail-demandeur", {
"proposals": proposals,
"unsatisfied": unsatisfied,
"extra":
@ -155,14 +155,16 @@ def _finalize_traitement(request, demande, proposals, proposed_for,
def _generate_eleve_email(demande, proposed_for):
proposed_mails = []
for user, matieres in proposed_for:
msg = loader.render_to_string("petits-cours-mail-eleve.txt", {
"demande": demande,
"matieres": matieres
})
proposed_mails.append((user, msg))
return proposed_mails
return [
(
user,
render_mail('petit-cours-mail-eleve', {
"demande": demande,
"matieres": matieres
})[1]
)
for user, matieres in proposed_for
]
def _traitement_other_preparing(request, demande):
@ -274,7 +276,7 @@ def _traitement_post(request, demande):
proposals_list = proposals.items()
proposed_for = proposed_for.items()
proposed_mails = _generate_eleve_email(demande, proposed_for)
mainmail = loader.render_to_string("petits-cours-mail-demandeur.txt", {
mainmail = render_mail("petits-cours-mail-demandeur", {
"proposals": proposals_list,
"unsatisfied": unsatisfied,
"extra": extra,

View file

@ -14,7 +14,7 @@ from django.db import connection
from django.core.mail import send_mail
from django.template import Template, Context
from gestioncof.models import CofProfile, CustomMail
from gestioncof.models import CofProfile
User = get_user_model()
@ -99,18 +99,3 @@ def unlock_tables(*models):
return row
unlock_table = unlock_tables
def send_custom_mail(to, shortname, context=None, from_email="cof@ens.fr"):
if context is None:
context = {}
if isinstance(to, DjangoUser):
context["nom"] = to.get_full_name()
context["prenom"] = to.first_name
to = to.email
mail = CustomMail.objects.get(shortname=shortname)
template = Template(mail.content)
message = template.render(Context(context))
send_mail(mail.title, message,
from_email, [to],
fail_silently=True)

View file

@ -1,17 +0,0 @@
Bonjour,
Je vous contacte au sujet de votre annonce passée sur le site du COF pour rentrer en contact avec un élève normalien pour des cours particuliers. Voici les coordonnées d'élèves qui sont motivés par de tels cours et correspondent aux critères que vous nous aviez transmis :
{% for matiere, proposed in proposals %}¤ {{ matiere }} :{% for user in proposed %}
¤ {{ user.get_full_name }}{% if user.profile.phone %}, {{ user.profile.phone }}{% endif %}{% if user.email %}, {{ user.email }}{% endif %}{% endfor %}
{% endfor %}{% if unsatisfied %}Nous n'avons cependant pas pu trouver d'élève disponible pour des cours de {% for matiere in unsatisfied %}{% if forloop.counter0 > 0 %}, {% endif %}{{ matiere }}{% endfor %}.
{% endif %}Si pour une raison ou une autre ces numéros ne suffisaient pas, n'hésitez pas à répondre à cet e-mail et je vous en ferai parvenir d'autres sans problème.
{% if extra|length > 0 %}
{{ extra|safe }}
{% endif %}
Cordialement,
--
Le COF, BdE de l'ENS

View file

@ -1,28 +0,0 @@
Salut,
Le COF a reçu une demande de petit cours qui te correspond. Tu es en haut de la liste d'attente donc on a transmis tes coordonnées, ainsi que celles de 2 autres qui correspondaient aussi (c'est la vie, on donne les numéros 3 par 3 pour que ce soit plus souple). Voici quelques infos sur l'annonce en question :
¤ Nom : {{ demande.name }}
¤ Période : {{ demande.quand }}
¤ Fréquence : {{ demande.freq }}
¤ Lieu (si préféré) : {{ demande.lieu }}
¤ Niveau : {{ demande.get_niveau_display }}
¤ Remarques diverses (désolé pour les balises HTML) : {{ demande.remarques }}
{% if matieres|length > 1 %}¤ Matières :
{% for matiere in matieres %} ¤ {{ matiere }}
{% endfor %}{% else %}¤ Matière : {% for matiere in matieres %}{{ matiere }}
{% endfor %}{% endif %}
Voilà, cette personne te contactera peut-être sous peu, tu pourras voir les détails directement avec elle (prix, modalités, ...). Pour indication, 30 Euro/h semble être la moyenne.
Si tu te rends compte qu'en fait tu ne peux pas/plus donner de cours en ce moment, ça serait cool que tu décoches la case "Recevoir des propositions de petits cours" sur GestioCOF. Ensuite dès que tu voudras réapparaître tu pourras recocher la case et tu seras à nouveau sur la liste.
À bientôt,
--
Le COF, pour les petits cours

View file

@ -8,6 +8,7 @@ import unicodecsv
import uuid
from datetime import timedelta
from icalendar import Calendar, Event as Vevent
from custommail.utils import send_custom_mail
from django.shortcuts import redirect, get_object_or_404, render
from django.http import Http404, HttpResponse, HttpResponseForbidden
@ -24,7 +25,6 @@ from gestioncof.models import Event, EventRegistration, EventOption, \
EventOptionChoice
from gestioncof.models import EventCommentField, EventCommentValue, \
CalendarSubscription
from gestioncof.shared import send_custom_mail
from gestioncof.models import CofProfile, Clipper, Club
from gestioncof.decorators import buro_required, cof_required
from gestioncof.forms import UserProfileForm, EventStatusFilterForm, \
@ -438,7 +438,11 @@ def registration(request):
# Enregistrement du profil
profile = profile_form.save()
if profile.is_cof and not was_cof:
send_custom_mail(member, "bienvenue")
send_custom_mail(
member.email, "welcome",
context={'member': member},
from_email='cof@ens.fr'
)
# Enregistrement des inscriptions aux événements
for form in event_formset:
if 'status' not in form.cleaned_data:
@ -470,8 +474,12 @@ def registration(request):
registration=current_registration).content
except EventCommentValue.DoesNotExist:
comments = field.default
send_custom_mail(member, "mega",
{"remarques": comments})
# FIXME : il faut faire quelque chose de propre ici,
# par exemple écrire un mail générique pour
# l'inscription aux événements et/ou donner la
# possibilité d'associer un mail aux événements
# send_custom_mail(member, "mega",
# {"remarques": comments})
# Enregistrement des inscriptions aux clubs
member.clubs.clear()
for club in clubs_form.cleaned_data['clubs']: