Merge branch 'master' into member_lists

docker
Schlabonski 9 years ago
commit 8aabfdf4a4

@ -26,6 +26,8 @@ class Message(models.Model):
for group in self.to_groups.all(): for group in self.to_groups.all():
group_members = group.member_set.all() group_members = group.member_set.all()
for member in group_members: for member in group_members:
if not member.gets_newsletter:
continue
members.add(member) members.add(member)
data = [ data = [
(self.subject, self.content, self.from_addr, [member.email]) (self.subject, self.content, self.from_addr, [member.email])

@ -0,0 +1,44 @@
<link rel="stylesheet" href="http://code.jquery.com/ui/1.11.0/themes/smoothness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.11.0/jquery-ui.js"></script>
{% load i18n %}
<p><b>{% trans "Here you can register yourself to the newsletter" %}</b></p>
{% if error_message %}
<p><b>{{ error_message }}</b></p>
{% endif %}
<form action="" method="post">
{% csrf_token %}
<input type="hidden" name="post" value="yes">
<p>
{% trans "Prename" %}
<input type="text" name="prename">
</p>
<p>
{% trans "Lastname" %}
<input type="text" name="lastname">
</p>
<p>
{% trans "Birthdate" %}
<input type="date" name="birthdate" class="datepicker">
</p>
<script>
$(document).ready(function() {
$('.datepicker').datepicker({
dateFormat: "yy-mm-dd"});
});
</script>
<p>
{% trans "Email address" %}
<input type="email" name="email">
</p>
<p>
<input type="submit" value="{% trans "Register" %}">
</p>
</form>

@ -0,0 +1,3 @@
{% load i18n %}
<p><b>{% trans "Subscribed successfully" %}</b></p>

@ -5,6 +5,5 @@ from . import views
app_name = "mailer" app_name = "mailer"
urlpatterns = [ urlpatterns = [
url(r'^$', views.index, name='index'), url(r'^$', views.index, name='index'),
url(r'^send_mail', views.send_mail, name='send_mail'), url(r'^subscribe$', views.subscribe, name='subscribe'),
url(r'^send', views.send, name='send')
] ]

@ -1,40 +1,57 @@
from django.shortcuts import render from django.shortcuts import render
from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.urls import reverse from django.urls import reverse
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import permission_required
from members.models import Group from members.models import Member
from .models import Message
@permission_required('mailer.submit_mails', login_url='/admin/')
def index(request): def index(request):
"""This is the main newsletter view""" return HttpResponseRedirect(reverse('mailer:subscribe'))
return render(request, 'mailer/index.html')
@permission_required('mailer.submit_mails', login_url='/admin/') def render_subscribe(request, error_message=""):
def send(request): date_input = forms.DateInput(attrs={'required': True,
return render(request, 'mailer/send.html', { 'class': 'datepicker',
'groups': Group.objects.all() 'name': 'birthdate'})
}) date_field = date_input.render(_("Birthdate"), "")
context = {'date_field': date_field}
if error_message:
context['error_message'] = error_message
return render(request, 'mailer/subscribe.html', context)
@permission_required('mailer.submit_mails', login_url='/admin/') def subscribe(request):
def send_mail(request):
try: try:
subject = request.POST['subject'] request.POST['post']
content = request.POST['content'] try:
to_group = Group.objects.get(pk=request.POST['to_group']) print("trying to subscribe")
except (KeyError, Group.DoesNotExist): prename = request.POST['prename']
return render(request, 'mailer/send.html', { lastname = request.POST['lastname']
'error_message': _("Please fill in every field!"), email = request.POST['email']
'groups': Group.objects.all() print("email", email)
}) birth_date = request.POST['birthdate']
else: print("birthdate", birth_date)
msg = Message(subject=subject, content=content, to_group=to_group) except KeyError:
msg.submit() return subscribe(request, _("Please fill in every field!"))
msg.save() else:
return HttpResponseRedirect(reverse('mailer:index')) # TODO: check whether member exists
exists = Member.objects.filter(prename=prename,
lastname=lastname)
if len(exists) > 0:
return render_subscribe(request,
error_message=_("Member already exists"))
member = Member(prename=prename,
lastname=lastname,
email=email,
birth_date=birth_date,
gets_newsletter=True)
member.save()
return subscribed(request)
except KeyError:
return render_subscribe(request)
def subscribed(request):
return render(request, 'mailer/subscribed.html')

@ -36,7 +36,7 @@ class NotTooOldFilter(SimpleListFilter):
class MaterialAdmin(admin.ModelAdmin): class MaterialAdmin(admin.ModelAdmin):
"""Edit view of a MaterialPart""" """Edit view of a MaterialPart"""
list_display = ('name', 'buy_date', 'lifetime', 'not_too_old', 'photo') list_display = ('name', 'quantity_real', 'buy_date', 'lifetime', 'not_too_old', 'photo')
inlines = [OwnershipInline] inlines = [OwnershipInline]
list_filter = (NotTooOldFilter,) list_filter = (NotTooOldFilter,)

@ -5,7 +5,8 @@
"fields": { "fields": {
"name": "Seil 40m grün", "name": "Seil 40m grün",
"buy_date": "2016-01-01", "buy_date": "2016-01-01",
"lifetime": "3" "lifetime": "3",
"quantity": "3"
} }
}, },
{ {
@ -14,7 +15,8 @@
"fields": { "fields": {
"name": "Seil 40m blau", "name": "Seil 40m blau",
"buy_date": "2012-01-01", "buy_date": "2012-01-01",
"lifetime": "3" "lifetime": "3",
"quantity": "10"
} }
}, },
{ {
@ -23,7 +25,8 @@
"fields": { "fields": {
"name": "Seil 60m gelb", "name": "Seil 60m gelb",
"buy_date": "2013-01-01", "buy_date": "2013-01-01",
"lifetime": "3" "lifetime": "3",
"quantity": "5"
} }
}, },
{ {
@ -32,7 +35,8 @@
"fields": { "fields": {
"name": "Seil 60m blau", "name": "Seil 60m blau",
"buy_date": "2016-01-01", "buy_date": "2016-01-01",
"lifetime": "3" "lifetime": "3",
"quantity": "2"
} }
} }
] ]

@ -15,15 +15,23 @@ class MaterialPart(models.Model):
members of the association (Ownership) members of the association (Ownership)
""" """
name = models.CharField(_('name'), max_length=30) name = models.CharField(_('name'), max_length=30)
quantity = models.IntegerField(_('quantity'), default=0)
buy_date = models.DateField(_('purchase date'), editable=True) buy_date = models.DateField(_('purchase date'), editable=True)
lifetime = models.DecimalField(_('lifetime (years)'), decimal_places=0, lifetime = models.DecimalField(_('lifetime (years)'), decimal_places=0, max_digits=3)
max_digits=3)
photo = models.ImageField(_('photo'), upload_to='images', blank=True) photo = models.ImageField(_('photo'), upload_to='images', blank=True)
def __str__(self): def __str__(self):
"""String representation""" """String representation"""
return self.name return self.name
def quantity_real(self):
real = sum([o.count for o in Ownership.objects.filter(material__id = self.pk)])
return str(real) + '/' + str(self.quantity)
quantity_real.admin_order_field = 'quantity'
quantity_real.short_description = _('Quantity')
def not_too_old(self): def not_too_old(self):
"""Returns wether the part should be replaced cause of age""" """Returns wether the part should be replaced cause of age"""
buy_time = timezone.make_aware(datetime.combine(self.buy_date, buy_time = timezone.make_aware(datetime.combine(self.buy_date,

@ -20,9 +20,10 @@ from .models import (Member, Group, MemberList, MemberOnList, Klettertreff,
# Register your models here. # Register your models here.
class MemberAdmin(admin.ModelAdmin): class MemberAdmin(admin.ModelAdmin):
fields = ['prename', 'lastname', 'email', 'birth_date', 'group'] fields = ['prename', 'lastname', 'email', 'street', 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'group',
list_display = ('name', 'birth_date') 'gets_newsletter', 'comments']
list_filter = ('group',) list_display = ('name', 'street', 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'gets_newsletter', 'comments')
list_filter = ('group', 'gets_newsletter')
class GroupAdmin(admin.ModelAdmin): class GroupAdmin(admin.ModelAdmin):

@ -28,9 +28,16 @@ class Member(models.Model):
""" """
prename = models.CharField(max_length=20, verbose_name=_('prename')) prename = models.CharField(max_length=20, verbose_name=_('prename'))
lastname = models.CharField(max_length=20, verbose_name=_('last name')) lastname = models.CharField(max_length=20, verbose_name=_('last name'))
street = models.CharField(max_length=30, verbose_name=_('street'), default='', blank=True)
town = models.CharField(max_length=30, verbose_name=_('town'), default='', blank=True)
phone_number = models.CharField(max_length=12, verbose_name=_('phone number'), default='', blank=True)
phone_number_parents = models.CharField(max_length=12, verbose_name=_('parents phone number'), default='', blank=True)
email = models.EmailField(max_length=100, default="") email = models.EmailField(max_length=100, default="")
birth_date = models.DateField(_('birth date')) # to determine the age birth_date = models.DateField(_('birth date')) # to determine the age
group = models.ManyToManyField(Group) group = models.ManyToManyField(Group)
gets_newsletter = models.BooleanField(_('receives newsletter'),
default=True)
comments = models.TextField(_('comments'), default='', blank=True)
def __str__(self): def __str__(self):
"""String representation""" """String representation"""
@ -45,9 +52,11 @@ class Member(models.Model):
verbose_name = _('member') verbose_name = _('member')
verbose_name_plural = _('members') verbose_name_plural = _('members')
class MemberList(models.Model): class MemberList(models.Model):
"""Lets the user create a list of members in pdf format. """ """Lets the user create a list of members in pdf format. """
name = models.CharField(verbose_name='List Name', default='', max_length=50) name = models.CharField(verbose_name='List Name', default='',
max_length=50)
date = models.DateField(default=datetime.today) date = models.DateField(default=datetime.today)
comment = models.TextField(_('Comments'), default='') comment = models.TextField(_('Comments'), default='')

Loading…
Cancel
Save