From f8cade61c0b57241e39a244943caa0e0865aff49 Mon Sep 17 00:00:00 2001 From: erichhasl Date: Sun, 12 Mar 2017 19:00:08 +0100 Subject: [PATCH] send mails to memberlist --- jdav_web/mailer/admin.py | 5 +++-- jdav_web/mailer/models.py | 41 +++++++++++++++++++++++++++++++++------ 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/jdav_web/mailer/admin.py b/jdav_web/mailer/admin.py index c12c4b1..db8a265 100644 --- a/jdav_web/mailer/admin.py +++ b/jdav_web/mailer/admin.py @@ -5,7 +5,7 @@ from django.shortcuts import render from django.db import models from django import forms -from .models import Message, Attachment +from .models import Message, Attachment, MessageForm class AttachmentInline(admin.StackedInline): @@ -15,7 +15,7 @@ class AttachmentInline(admin.StackedInline): class MessageAdmin(admin.ModelAdmin): """Message creation view""" - list_display = ('subject', 'from_addr', 'get_groups', 'sent') + list_display = ('subject', 'from_addr', 'get_recipients', 'sent') change_form_template = "mailer/change_form.html" formfield_overrides = { models.ManyToManyField: {'widget': forms.CheckboxSelectMultiple} @@ -23,6 +23,7 @@ class MessageAdmin(admin.ModelAdmin): inlines = [AttachmentInline] actions = ['send_message'] + form = MessageForm def send_message(self, request, queryset): print("calling send_message") diff --git a/jdav_web/mailer/models.py b/jdav_web/mailer/models.py index d76ae5f..ceb619d 100644 --- a/jdav_web/mailer/models.py +++ b/jdav_web/mailer/models.py @@ -1,5 +1,6 @@ from django.db import models -from django.forms import forms +from django.core.exceptions import ValidationError +from django import forms from django.utils.translation import ugettext_lazy as _ from .mailutils import send, get_content @@ -35,15 +36,23 @@ class Message(models.Model): subject = models.CharField(_('subject'), max_length=50) content = models.TextField(_('content')) to_groups = models.ManyToManyField('members.Group', - verbose_name=_('to group')) + verbose_name=_('to group'), + blank=True) + to_memberlist = models.ForeignKey('members.MemberList', + verbose_name=_('to member list'), + blank=True, + null=True) sent = models.BooleanField(_('sent'), default=False) def __str__(self): return self.subject - def get_groups(self): - return ", ".join([g.name for g in self.to_groups.all()]) - get_groups.short_description = _('recipients') + def get_recipients(self): + recipients = [g.name for g in self.to_groups.all()] + if self.to_memberlist is not None: + recipients.append(self.to_memberlist.name) + return ", ".join(recipients) + get_recipients.short_description = _('recipients') def submit(self): """Sends the mail to the specified group of members""" @@ -54,10 +63,15 @@ class Message(models.Model): if not member.gets_newsletter: continue members.add(member) + if self.to_memberlist is not None: + for memberonlist in self.to_memberlist.memberonlist_set.all(): + if memberonlist.member.gets_newsletter: + members.add(memberonlist.member) attach = [a.f.path for a in Attachment.objects.filter(msg__id=self.pk) if a.f.name] success = send(self.subject, get_content(self.content), - self.from_addr, [member.email for member in members], + self.from_addr, + set([member.email for member in members]), attachments=attach) for a in Attachment.objects.filter(msg__id=self.pk): if a.f.name: @@ -78,6 +92,21 @@ class Message(models.Model): ) +class MessageForm(forms.ModelForm): + + class Meta: + model = Message + exclude = [] + + def clean(self): + group = self.cleaned_data.get('to_groups') + memberlist = self.cleaned_data.get('to_memberlist') + print("group", group, "memberlist", memberlist) + if not group and memberlist is None: + raise ValidationError(_('Either a group is required or a ' + 'memberlist as recipient')) + + class Attachment(models.Model): """Represents an attachment to an email""" msg = models.ForeignKey(Message, on_delete=models.CASCADE)