Christian Merten 9 years ago
commit b02010ae6c

@ -13,6 +13,7 @@ from django.contrib.admin import DateFieldListFilter
from django.utils.translation import ugettext_lazy as translate from django.utils.translation import ugettext_lazy as translate
from django.db.models import TextField, ManyToManyField from django.db.models import TextField, ManyToManyField
from django.forms import Textarea from django.forms import Textarea
from django.shortcuts import render
from .models import (Member, Group, MemberList, MemberOnList, Klettertreff, from .models import (Member, Group, MemberList, MemberOnList, Klettertreff,
KlettertreffAttendee) KlettertreffAttendee)
@ -21,9 +22,9 @@ 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', 'street', 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'group', fields = ['prename', 'lastname', 'email', 'street', 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'group',
'gets_newsletter', 'comments'] 'gets_newsletter', 'queue', 'registration_form', 'comments']
list_display = ('name', 'birth_date', 'gets_newsletter', 'get_group', 'comments') list_display = ('name', 'birth_date', 'gets_newsletter', 'get_group', 'queue', 'created', 'comments')
list_filter = ('group', 'gets_newsletter') list_filter = ('group', 'gets_newsletter', 'queue')
formfield_overrides = { formfield_overrides = {
ManyToManyField: {'widget': forms.CheckboxSelectMultiple} ManyToManyField: {'widget': forms.CheckboxSelectMultiple}
} }
@ -164,17 +165,49 @@ class KlettertreffAdminForm(forms.ModelForm):
super(KlettertreffAdminForm, self).__init__(*args, **kwargs) super(KlettertreffAdminForm, self).__init__(*args, **kwargs)
self.fields['jugendleiter'].queryset = Member.objects.filter(group__name='Jugendleiter') 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 model = KlettertreffAttendee
form = KlettertreffAttendeeInlineForm
extra = 0 extra = 0
class KlettertreffAdmin(admin.ModelAdmin): class KlettertreffAdmin(admin.ModelAdmin):
form = KlettertreffAdminForm form = KlettertreffAdminForm
exclude = [] exclude = []
inlines = [KlettertreffAttendeeInline] inlines = [KlettertreffAttendeeInline]
list_display = ['__str__', 'date', 'get_jugendleiter'] 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 = { formfield_overrides = {
ManyToManyField: {'widget': forms.CheckboxSelectMultiple} ManyToManyField: {'widget': forms.CheckboxSelectMultiple}
} }

@ -44,6 +44,9 @@ class Member(models.Model):
unsubscribe_key = models.CharField(max_length=32, default="") unsubscribe_key = models.CharField(max_length=32, default="")
unsubscribe_expire = models.DateTimeField(default=timezone.now) unsubscribe_expire = models.DateTimeField(default=timezone.now)
comments = models.TextField(_('comments'), default='', blank=True) 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): def __str__(self):
"""String representation""" """String representation"""
@ -131,7 +134,8 @@ class Klettertreff(models.Model):
date = models.DateField(_('Date'), default=datetime.today) date = models.DateField(_('Date'), default=datetime.today)
location = models.CharField(_('Location'), default='', max_length=60) location = models.CharField(_('Location'), default='', max_length=60)
jugendleiter = models.ManyToManyField(Member) jugendleiter = models.ManyToManyField(Member)
group = models.ForeignKey(Group, default='')
def __str__(self): def __str__(self):
return self.location + ' ' + self.date.strftime('%d.%m.%Y') 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()) jl_string = ', '.join(j.name for j in self.jugendleiter.all())
return jl_string 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') get_jugendleiter.short_description = _('Jugendleiter')
class Meta: class Meta:

@ -0,0 +1,45 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% load static %}
{% load overview_extras %}
{% block content %}
<table style="height=100%">
<tr>
<th>{% trans 'date' %}</th>
{% for klettertreff in klettertreffs %}
<td>{{ klettertreff.date }}</td>
{% endfor %}
</tr>
<tr>
<th>Ort</th>
{% for klettertreff in klettertreffs %}
<td>{{ klettertreff.location }}</td>
{% endfor %}
</tr>
<tr>
<th>Jugendleiter</th>
</tr>
{% for jugendleiter in jugendleiters %}
<tr>
<th>{{ jugendleiter.name }}
{% for klettertreff in klettertreffs %}
{% has_jugendleiter_wrapper klettertreff jugendleiter as color %}
<td style="background-color:{{ color }}"></td>
{% endfor %}
</tr>
{% endfor %}
<tr>
<th>Teilnehmer</th>
</tr>
{% for member in members %}
<tr>
<th>{{ member.name }}
{% for klettertreff in klettertreffs %}
{% has_attendee_wrapper klettertreff member as color %}
<td style="background-color:{{ color }}"></td>
{% endfor %}
</tr>
{% endfor %}
</table>
{% endblock %}

@ -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))
Loading…
Cancel
Save