diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 8cd5c33..a9dd7a9 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, ManyToManyField from django.forms import Textarea +from django.shortcuts import render from .models import (Member, Group, MemberList, MemberOnList, Klettertreff, KlettertreffAttendee) @@ -21,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', 'registration_form', '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} } @@ -164,17 +165,49 @@ 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': members, + 'attendees': KlettertreffAttendee.objects.all(), + 'jugendleiters': + Member.objects.filter(group__name='Jugendleiter') + } + + return render(request, 'admin/klettertreff_overview.html', + context) + formfield_overrides = { ManyToManyField: {'widget': forms.CheckboxSelectMultiple} } diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 6b7966c..421c665 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -44,6 +44,9 @@ 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')) + registration_form = models.ImageField(verbose_name=_('registration form'), blank=True) def __str__(self): """String representation""" @@ -131,7 +134,8 @@ 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') @@ -139,6 +143,20 @@ class Klettertreff(models.Model): jl_string = ', '.join(j.name for j in self.jugendleiter.all()) return jl_string + def has_attendee(self, member): + queryset = KlettertreffAttendee.objects.filter( + member__id__contains=member.id, + klettertreff__id__contains=self.id) + if queryset: + return True + return False + + def has_jugendleiter(self, jugendleiter): + if jugendleiter in self.jugendleiter.all(): + return True + return False + + get_jugendleiter.short_description = _('Jugendleiter') class Meta: 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..5188f36 --- /dev/null +++ b/jdav_web/members/templates/admin/klettertreff_overview.html @@ -0,0 +1,45 @@ +{% 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 jugendleiter in jugendleiters %} + + + {% endfor %} + + {% endfor %} + + + + {% for member in members %} + + + {% endfor %} + + {% endfor %} +
{% trans 'date' %}{{ klettertreff.date }}
Ort{{ 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 color %} +
+{% 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..8106749 --- /dev/null +++ b/jdav_web/members/templatetags/overview_extras.py @@ -0,0 +1,17 @@ +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 blToColor(klettertreff.has_attendee(member)) + +@register.assignment_tag +def has_jugendleiter_wrapper(klettertreff, jugendleiter): + return blToColor(klettertreff.has_jugendleiter(jugendleiter))