From 15f929697e7e6f9089a714cefc45f6c87e85dd8d Mon Sep 17 00:00:00 2001 From: relnod Date: Sat, 14 Jan 2017 13:48:12 +0100 Subject: [PATCH 1/5] basic klettertreff view structure --- jdav_web/members/admin.py | 13 +++++++ jdav_web/members/models.py | 10 ++++++ .../admin/klettertreff_overview.html | 36 +++++++++++++++++++ .../members/templatetags/overview_extras.py | 7 ++++ 4 files changed, 66 insertions(+) create mode 100644 jdav_web/members/templates/admin/klettertreff_overview.html create mode 100644 jdav_web/members/templatetags/overview_extras.py diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 0394801..3af5e11 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -13,6 +13,7 @@ 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 django.shortcuts import render from .models import (Member, Group, MemberList, MemberOnList, Klettertreff, KlettertreffAttendee) @@ -145,6 +146,18 @@ class KlettertreffAdmin(admin.ModelAdmin): inlines = [KlettertreffAttendeeInline] list_display = ['__str__', 'date', 'get_jugendleiter'] list_filter = [('date', DateFieldListFilter)] + actions = ['overview'] + + def overview(self, request, queryset): + context = { + 'klettertreffs': queryset, + 'members': Member.objects.all(), + 'attendees': KlettertreffAttendee.objects.all() + } + + return render(request, 'admin/klettertreff_overview.html', + context) + admin.site.register(Member, MemberAdmin) admin.site.register(Group, GroupAdmin) diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index d15f7e7..ff41a82 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -120,8 +120,18 @@ class Klettertreff(models.Model): jl_string = jl_string[:-2] return jl_string + def has_attendee(self, member): + attendees = KlettertreffAttendee.objects.filter( + member__id__contains=member.id, + klettertreff__id__contains=self.id) + if attendees: + return True + return False + + get_jugendleiter.short_description = _('Jugendleiter') + class KlettertreffAttendee(models.Model): """Connects members to Klettertreffs.""" member = models.ForeignKey(Member) diff --git a/jdav_web/members/templates/admin/klettertreff_overview.html b/jdav_web/members/templates/admin/klettertreff_overview.html new file mode 100644 index 0000000..6f27afd --- /dev/null +++ b/jdav_web/members/templates/admin/klettertreff_overview.html @@ -0,0 +1,36 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} +{% load static %} +{% load overview_extras %} + +{% block content %} + + + + {% for klettertreff in klettertreffs %} + + {% endfor %} + + + + {% for klettertreff in klettertreffs %} + + {% endfor %} + + {% for member in members %} + + + {% endfor %} + + {% endfor %} +
Datum{{ klettertreff.date }}
Ort{{ klettertreff.location }}
{{ member.name }} + {% for klettertreff in klettertreffs %} + + {% has_attendee_wrapper klettertreff member as test %} + {% if test %} + yes + {% else %} + no + {% endif %} +
+{% endblock %} diff --git a/jdav_web/members/templatetags/overview_extras.py b/jdav_web/members/templatetags/overview_extras.py new file mode 100644 index 0000000..28fa145 --- /dev/null +++ b/jdav_web/members/templatetags/overview_extras.py @@ -0,0 +1,7 @@ +from django import template + +register = template.Library() + +@register.assignment_tag +def has_attendee_wrapper(klettertreff, member): + return klettertreff.has_attendee(member) From cb768845fb2275971fc0f04b8805773add239d55 Mon Sep 17 00:00:00 2001 From: relnod Date: Sat, 14 Jan 2017 19:40:49 +0100 Subject: [PATCH 2/5] add group field to klettertreff --- jdav_web/members/admin.py | 28 +++++++++++++++--- jdav_web/members/models.py | 10 +++++-- .../admin/klettertreff_overview.html | 29 ++++++++++++------- .../members/templatetags/overview_extras.py | 12 +++++++- 4 files changed, 62 insertions(+), 17 deletions(-) diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 3af5e11..e9f3b48 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -135,24 +135,44 @@ class KlettertreffAdminForm(forms.ModelForm): super(KlettertreffAdminForm, self).__init__(*args, **kwargs) self.fields['jugendleiter'].queryset = Member.objects.filter(group__name='Jugendleiter') -class KlettertreffAttendeeInline(admin.StackedInline): +class KlettertreffAttendeeInlineForm(forms.ModelForm): + class Meta: + model = KlettertreffAttendee + exclude = [] + + """ + def __init__(self, *args, **kwargs): + super(KlettertreffAttendeeInlineForm, self).__init__(*args, **kwargs) + self.fields['member'].queryset = Member.objects.filter(group__name='J1') + """ + +class KlettertreffAttendeeInline(admin.StackedInline): model = KlettertreffAttendee + form = KlettertreffAttendeeInlineForm extra = 0 + class KlettertreffAdmin(admin.ModelAdmin): form = KlettertreffAdminForm exclude = [] inlines = [KlettertreffAttendeeInline] list_display = ['__str__', 'date', 'get_jugendleiter'] - list_filter = [('date', DateFieldListFilter)] + list_filter = [('date', DateFieldListFilter), 'group__name'] actions = ['overview'] def overview(self, request, queryset): + group = request.GET.get('group__name') + if group != 'NONE': + members = Member.objects.filter(group__name__contains=group) + else: + members = Member.objects.all() context = { 'klettertreffs': queryset, - 'members': Member.objects.all(), - 'attendees': KlettertreffAttendee.objects.all() + 'members': members, + 'attendees': KlettertreffAttendee.objects.all(), + 'jugendleiters': + Member.objects.filter(group__name='Jugendleiter') } return render(request, 'admin/klettertreff_overview.html', diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index ff41a82..621004f 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -111,6 +111,7 @@ class Klettertreff(models.Model): date = models.DateField(_('Date'), default=datetime.today) location = models.CharField(_('Location'), default='', max_length=60) jugendleiter = models.ManyToManyField(Member) + group = models.ForeignKey(Group, default='') def __str__(self): return self.location + ' ' + self.date.strftime('%d.%m.%Y') @@ -121,10 +122,15 @@ class Klettertreff(models.Model): return jl_string def has_attendee(self, member): - attendees = KlettertreffAttendee.objects.filter( + queryset = KlettertreffAttendee.objects.filter( member__id__contains=member.id, klettertreff__id__contains=self.id) - if attendees: + if queryset: + return True + return False + + def has_jugendleiter(self, jugendleiter): + if jugendleiter in self.jugendleiter.all(): return True return False diff --git a/jdav_web/members/templates/admin/klettertreff_overview.html b/jdav_web/members/templates/admin/klettertreff_overview.html index 6f27afd..5188f36 100644 --- a/jdav_web/members/templates/admin/klettertreff_overview.html +++ b/jdav_web/members/templates/admin/klettertreff_overview.html @@ -4,9 +4,9 @@ {% load overview_extras %} {% block content %} - +
- + {% for klettertreff in klettertreffs %} {% endfor %} @@ -17,18 +17,27 @@ {% endfor %} + + + + {% for jugendleiter in jugendleiters %} + + + {% endfor %} + + {% endfor %} + + + {% for member in members %} + {% has_attendee_wrapper klettertreff member as color %} + {% endfor %} {% endfor %} diff --git a/jdav_web/members/templatetags/overview_extras.py b/jdav_web/members/templatetags/overview_extras.py index 28fa145..8106749 100644 --- a/jdav_web/members/templatetags/overview_extras.py +++ b/jdav_web/members/templatetags/overview_extras.py @@ -2,6 +2,16 @@ from django import template register = template.Library() +def blToColor(bl): + if bl: + return 'green' + else: + return 'red' + @register.assignment_tag def has_attendee_wrapper(klettertreff, member): - return klettertreff.has_attendee(member) + return blToColor(klettertreff.has_attendee(member)) + +@register.assignment_tag +def has_jugendleiter_wrapper(klettertreff, jugendleiter): + return blToColor(klettertreff.has_jugendleiter(jugendleiter)) From cf2362298032e14efe5ae601587c492b8c328b3b Mon Sep 17 00:00:00 2001 From: relnod Date: Sat, 11 Mar 2017 16:49:04 +0100 Subject: [PATCH 3/5] fix klettertreff overview bug --- jdav_web/members/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 6bc5edc..457d739 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -193,7 +193,7 @@ class KlettertreffAdmin(admin.ModelAdmin): def overview(self, request, queryset): group = request.GET.get('group__name') - if group != 'NONE': + if group != None: members = Member.objects.filter(group__name__contains=group) else: members = Member.objects.all() From 024aede8276c9547b9f1de1f8e1c09eb50e4e86e Mon Sep 17 00:00:00 2001 From: relnod Date: Sat, 11 Mar 2017 18:36:01 +0100 Subject: [PATCH 4/5] add member queue --- jdav_web/members/admin.py | 6 +++--- jdav_web/members/models.py | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 457d739..0767cdd 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -22,9 +22,9 @@ from .models import (Member, Group, MemberList, MemberOnList, Klettertreff, # Register your models here. class MemberAdmin(admin.ModelAdmin): fields = ['prename', 'lastname', 'email', 'street', 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'group', - 'gets_newsletter', 'comments'] - list_display = ('name', 'birth_date', 'gets_newsletter', 'get_group', 'comments') - list_filter = ('group', 'gets_newsletter') + 'gets_newsletter', 'queue', 'comments'] + list_display = ('name', 'birth_date', 'gets_newsletter', 'get_group', 'queue', 'created', 'comments') + list_filter = ('group', 'gets_newsletter', 'queue') formfield_overrides = { ManyToManyField: {'widget': forms.CheckboxSelectMultiple} } diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index d6f664a..2c1f671 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -44,6 +44,8 @@ class Member(models.Model): unsubscribe_key = models.CharField(max_length=32, default="") unsubscribe_expire = models.DateTimeField(default=timezone.now) comments = models.TextField(_('comments'), default='', blank=True) + created = models.DateField(auto_now=True, verbose_name=_('created')) + queue = models.BooleanField(default=False, verbose_name=_('queue')) def __str__(self): """String representation""" From c8db20fcac05cdcb00af29cf969eaea1a18463c9 Mon Sep 17 00:00:00 2001 From: relnod Date: Sat, 11 Mar 2017 18:53:22 +0100 Subject: [PATCH 5/5] add registration form upload --- jdav_web/members/admin.py | 2 +- jdav_web/members/models.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 0767cdd..a9dd7a9 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -22,7 +22,7 @@ from .models import (Member, Group, MemberList, MemberOnList, Klettertreff, # Register your models here. class MemberAdmin(admin.ModelAdmin): fields = ['prename', 'lastname', 'email', 'street', 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'group', - 'gets_newsletter', 'queue', 'comments'] + 'gets_newsletter', 'queue', 'registration_form', 'comments'] list_display = ('name', 'birth_date', 'gets_newsletter', 'get_group', 'queue', 'created', 'comments') list_filter = ('group', 'gets_newsletter', 'queue') formfield_overrides = { diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 2c1f671..421c665 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -46,6 +46,7 @@ class Member(models.Model): comments = models.TextField(_('comments'), default='', blank=True) created = models.DateField(auto_now=True, verbose_name=_('created')) queue = models.BooleanField(default=False, verbose_name=_('queue')) + registration_form = models.ImageField(verbose_name=_('registration form'), blank=True) def __str__(self): """String representation"""
Datum{% trans 'date' %}{{ klettertreff.date }}{{ klettertreff.location }}
Jugendleiter
{{ jugendleiter.name }} + {% for klettertreff in klettertreffs %} + {% has_jugendleiter_wrapper klettertreff jugendleiter as color %} +
Teilnehmer
{{ member.name }} {% for klettertreff in klettertreffs %} - - {% has_attendee_wrapper klettertreff member as test %} - {% if test %} - yes - {% else %} - no - {% endif %} -