diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index bf7291c..0394801 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -9,18 +9,21 @@ from django.http import HttpResponse from wsgiref.util import FileWrapper from django import forms from django.contrib import admin +from django.contrib.admin import DateFieldListFilter from django.utils.translation import ugettext_lazy as translate from django.db.models import TextField from django.forms import Textarea -from .models import Member, Group, MemberList, MemberOnList +from .models import (Member, Group, MemberList, MemberOnList, Klettertreff, + KlettertreffAttendee) # Register your models here. class MemberAdmin(admin.ModelAdmin): - fields = ['prename', 'lastname', 'email', 'birth_date', 'group', - 'gets_newsletter'] - list_display = ('name', 'birth_date', 'gets_newsletter') + fields = ['prename', 'lastname', 'email', 'street', 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'group', + 'gets_newsletter', 'comments'] + list_display = ('name', 'street', 'town', 'phone_number', + 'phone_number_parents', 'birth_date', 'gets_newsletter', 'get_group', 'comments') list_filter = ('group', 'gets_newsletter') @@ -53,6 +56,9 @@ class MemberListAdmin(admin.ModelAdmin): actions = ['convert_to_pdf'] inlines = [MemberOnListInline] + def __init__(self, *args, **kwargs): + super(MemberListAdmin, self).__init__(*args, **kwargs) + def convert_to_pdf(self, request, queryset): """Converts a member list to pdf. @@ -114,10 +120,33 @@ class MemberListAdmin(admin.ModelAdmin): # provide the user with the resulting pdf file with open('media/memberlists/'+filename_pdf, 'rb') as pdf: response = HttpResponse(FileWrapper(pdf))#, content='application/pdf') + response['Content-Type'] = 'application/pdf' response['Content-Disposition'] = 'attachment; filename='+filename_pdf return response +class KlettertreffAdminForm(forms.ModelForm): + class Meta: + model = Klettertreff + exclude = [] + + def __init__(self, *args, **kwargs): + super(KlettertreffAdminForm, self).__init__(*args, **kwargs) + self.fields['jugendleiter'].queryset = Member.objects.filter(group__name='Jugendleiter') + +class KlettertreffAttendeeInline(admin.StackedInline): + + model = KlettertreffAttendee + extra = 0 + +class KlettertreffAdmin(admin.ModelAdmin): + form = KlettertreffAdminForm + exclude = [] + inlines = [KlettertreffAttendeeInline] + list_display = ['__str__', 'date', 'get_jugendleiter'] + list_filter = [('date', DateFieldListFilter)] + admin.site.register(Member, MemberAdmin) admin.site.register(Group, GroupAdmin) admin.site.register(MemberList, MemberListAdmin) +admin.site.register(Klettertreff, KlettertreffAdmin) diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 2a7619a..d15f7e7 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -30,6 +30,10 @@ class Member(models.Model): """ prename = models.CharField(max_length=20, verbose_name=_('prename')) 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="") birth_date = models.DateField(_('birth date')) # to determine the age group = models.ManyToManyField(Group) @@ -37,6 +41,7 @@ class Member(models.Model): default=True) unsubscribe_key = models.CharField(max_length=32, default="") unsubscribe_expire = models.DateTimeField(default=timezone.now) + comments = models.TextField(_('comments'), default='', blank=True) def __str__(self): """String representation""" @@ -63,6 +68,13 @@ class Member(models.Model): def name(self): """Returning whole name (prename + lastname)""" return "{0} {1}".format(self.prename, self.lastname) + + def get_group(self): + """Returns a string of groups in which the member is.""" + groupstring = ''.join(g.name + ',\n' for g in self.group.all()) + groupstring = groupstring[:-2] + return groupstring + get_group.short_description = _('Group') class Meta: verbose_name = _('member') @@ -88,3 +100,30 @@ class MemberOnList(models.Model): member = models.ForeignKey(Member) memberlist = models.ForeignKey(MemberList) comments = models.TextField(_('Comment'), default='') + + +class Klettertreff(models.Model): + """ This model represents a Klettertreff event. + + A Klettertreff can take a date, location, Jugendleiter, attending members as + input. + """ + date = models.DateField(_('Date'), default=datetime.today) + location = models.CharField(_('Location'), default='', max_length=60) + jugendleiter = models.ManyToManyField(Member) + + def __str__(self): + return self.location + ' ' + self.date.strftime('%d.%m.%Y') + + def get_jugendleiter(self): + jl_string = ''.join(j.name + ',\n' for j in self.jugendleiter.all()) + jl_string = jl_string[:-2] + return jl_string + + get_jugendleiter.short_description = _('Jugendleiter') + +class KlettertreffAttendee(models.Model): + """Connects members to Klettertreffs.""" + member = models.ForeignKey(Member) + klettertreff = models.ForeignKey(Klettertreff) +