From deca8dcb84edc3133842e7ad02e41a267f7fd60e Mon Sep 17 00:00:00 2001 From: Paul Schiffers Date: Sun, 20 Nov 2016 13:00:26 +0100 Subject: [PATCH 1/3] updated member model --- jdav_web/members/admin.py | 6 +++--- jdav_web/members/models.py | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index bf7291c..69561bb 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -18,9 +18,9 @@ from .models import Member, Group, MemberList, MemberOnList # 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', 'comments') list_filter = ('group', 'gets_newsletter') diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index d2fcf42..6bfce44 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -28,11 +28,16 @@ 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) gets_newsletter = models.BooleanField(_('receives newsletter'), default=True) + comments = models.TextField(_('comments'), default='', blank=True) def __str__(self): """String representation""" From 201323214d134e277cd5d65044044799cfc72290 Mon Sep 17 00:00:00 2001 From: Schlabonski Date: Sun, 20 Nov 2016 14:12:09 +0100 Subject: [PATCH 2/3] implements klettertreff basic model --- jdav_web/members/admin.py | 30 +++++++++++++++++++++++++++++- jdav_web/members/models.py | 29 ++++++++++++++++++++++++++++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 0a35d1c..35ce7ef 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -9,11 +9,13 @@ 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. @@ -52,6 +54,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. @@ -113,10 +118,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 0dc545a..d92bfa4 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -61,5 +61,32 @@ class MemberOnList(models.Model): Connects members to a list of members. """ member = models.ForeignKey(Member) - memberlist = models.ForeignKey(MemberList) + 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) + From c137a5e691b2d2ee71734a3c62bf60a31b52c5b8 Mon Sep 17 00:00:00 2001 From: Schlabonski Date: Sun, 20 Nov 2016 17:58:36 +0100 Subject: [PATCH 3/3] add group to list display in member app --- jdav_web/members/admin.py | 3 ++- jdav_web/members/models.py | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 7622147..0394801 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -22,7 +22,8 @@ from .models import (Member, Group, MemberList, MemberOnList, Klettertreff, class MemberAdmin(admin.ModelAdmin): 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', 'comments') + list_display = ('name', 'street', 'town', 'phone_number', + 'phone_number_parents', 'birth_date', 'gets_newsletter', 'get_group', 'comments') list_filter = ('group', 'gets_newsletter') diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 956cab8..fde92ad 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -47,6 +47,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')