send mails to memberlist

v1-0-stable
Christian Merten 9 years ago
parent f0f2e01fca
commit f8cade61c0

@ -5,7 +5,7 @@ from django.shortcuts import render
from django.db import models from django.db import models
from django import forms from django import forms
from .models import Message, Attachment from .models import Message, Attachment, MessageForm
class AttachmentInline(admin.StackedInline): class AttachmentInline(admin.StackedInline):
@ -15,7 +15,7 @@ class AttachmentInline(admin.StackedInline):
class MessageAdmin(admin.ModelAdmin): class MessageAdmin(admin.ModelAdmin):
"""Message creation view""" """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" change_form_template = "mailer/change_form.html"
formfield_overrides = { formfield_overrides = {
models.ManyToManyField: {'widget': forms.CheckboxSelectMultiple} models.ManyToManyField: {'widget': forms.CheckboxSelectMultiple}
@ -23,6 +23,7 @@ class MessageAdmin(admin.ModelAdmin):
inlines = [AttachmentInline] inlines = [AttachmentInline]
actions = ['send_message'] actions = ['send_message']
form = MessageForm
def send_message(self, request, queryset): def send_message(self, request, queryset):
print("calling send_message") print("calling send_message")

@ -1,5 +1,6 @@
from django.db import models 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 django.utils.translation import ugettext_lazy as _
from .mailutils import send, get_content from .mailutils import send, get_content
@ -35,15 +36,23 @@ class Message(models.Model):
subject = models.CharField(_('subject'), max_length=50) subject = models.CharField(_('subject'), max_length=50)
content = models.TextField(_('content')) content = models.TextField(_('content'))
to_groups = models.ManyToManyField('members.Group', 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) sent = models.BooleanField(_('sent'), default=False)
def __str__(self): def __str__(self):
return self.subject return self.subject
def get_groups(self): def get_recipients(self):
return ", ".join([g.name for g in self.to_groups.all()]) recipients = [g.name for g in self.to_groups.all()]
get_groups.short_description = _('recipients') if self.to_memberlist is not None:
recipients.append(self.to_memberlist.name)
return ", ".join(recipients)
get_recipients.short_description = _('recipients')
def submit(self): def submit(self):
"""Sends the mail to the specified group of members""" """Sends the mail to the specified group of members"""
@ -54,10 +63,15 @@ class Message(models.Model):
if not member.gets_newsletter: if not member.gets_newsletter:
continue continue
members.add(member) 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) attach = [a.f.path for a in Attachment.objects.filter(msg__id=self.pk)
if a.f.name] if a.f.name]
success = send(self.subject, get_content(self.content), 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) attachments=attach)
for a in Attachment.objects.filter(msg__id=self.pk): for a in Attachment.objects.filter(msg__id=self.pk):
if a.f.name: 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): class Attachment(models.Model):
"""Represents an attachment to an email""" """Represents an attachment to an email"""
msg = models.ForeignKey(Message, on_delete=models.CASCADE) msg = models.ForeignKey(Message, on_delete=models.CASCADE)

Loading…
Cancel
Save