From 2791b27729e08564463b7085ef5d04c9a6da6082 Mon Sep 17 00:00:00 2001 From: Gabriel Augendre Date: Tue, 22 May 2018 10:24:21 +0200 Subject: [PATCH] Allow to send mail via admin interface --- manuels/admin.py | 8 ++++++++ manuels/models.py | 24 ++++++++++++++++++++++++ manuels/views.py | 17 +---------------- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/manuels/admin.py b/manuels/admin.py index ca23fb3..b576355 100644 --- a/manuels/admin.py +++ b/manuels/admin.py @@ -7,6 +7,14 @@ from manuels.models import Teacher, Book, Level, Editor, SuppliesRequirement class TeacherAdmin(admin.ModelAdmin): list_display = ['full_name', 'email', 'phone_number'] + def send_link(modeladmin, request, queryset): + for teacher in queryset: + teacher.send_link(request) + + send_link.short_description = 'Envoyer le lien' + + actions = [send_link] + @admin.register(Level) class LevelAdmin(admin.ModelAdmin): diff --git a/manuels/models.py b/manuels/models.py index 537c929..1dedbf1 100644 --- a/manuels/models.py +++ b/manuels/models.py @@ -1,8 +1,14 @@ +import os import re import uuid as uuid + +from django.conf import settings from django.core.exceptions import ValidationError +from django.core.mail import EmailMultiAlternatives from django.db import models +from django.template.loader import render_to_string +from django.urls import reverse class BaseModel(models.Model): @@ -37,6 +43,24 @@ class Teacher(BaseModel): def __str__(self): return self.full_name + def send_link(self, request): + dest = self.email + link = request.build_absolute_uri(reverse('list_books', args=[str(self.pk)])) + msg = EmailMultiAlternatives( + subject='Gestion des manuels scolaires', + body=f'Bonjour {self.first_name},\n' + f'Voici votre lien pour la gestion des manuels scolaires : {link}', + from_email=settings.SERVER_EMAIL, + to=[dest], + ) + reply_to = [os.getenv('REPLY_TO')] + if reply_to: + msg.reply_to = reply_to + msg.attach_alternative( + render_to_string('manuels/email.html', {'link': link, 'teacher': self}), "text/html" + ) + msg.send() + class Level(BaseModel): class Meta: diff --git a/manuels/views.py b/manuels/views.py index c7a9e89..846b782 100644 --- a/manuels/views.py +++ b/manuels/views.py @@ -26,22 +26,7 @@ class HomePageView(CreateView): def form_valid(self, form): response = super().form_valid(form) - dest = form.cleaned_data['email'] - link = self.request.build_absolute_uri(reverse('list_books', args=[str(self.object.pk)])) - msg = EmailMultiAlternatives( - subject='Gestion des manuels scolaires', - body=f'Bonjour {self.object.first_name},\n' - f'Voici votre lien pour la gestion des manuels scolaires : {link}', - from_email=settings.SERVER_EMAIL, - to=[dest], - ) - reply_to = [os.getenv('REPLY_TO')] - if reply_to: - msg.reply_to = reply_to - msg.attach_alternative( - render_to_string('manuels/email.html', {'link': link, 'teacher': self.object}), "text/html" - ) - msg.send() + self.object.send_link(self.request) return response