diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index a9dd7a9..d600d6b 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -16,7 +16,7 @@ from django.forms import Textarea from django.shortcuts import render from .models import (Member, Group, MemberList, MemberOnList, Klettertreff, - KlettertreffAttendee) + KlettertreffAttendee, ActivityCategory) # Register your models here. @@ -28,18 +28,31 @@ class MemberAdmin(admin.ModelAdmin): formfield_overrides = { ManyToManyField: {'widget': forms.CheckboxSelectMultiple} } + change_form_template = "members/change_member.html" + + def change_view(self, request, object_id, form_url="", extra_context=None): + extra_context = extra_context or {} + extra_context['qualities'] =\ + Member.objects.get(pk=object_id).get_skills() + return super(MemberAdmin, self).change_view(request, object_id, + form_url=form_url, + extra_context=extra_context) class GroupAdmin(admin.ModelAdmin): fields = ['name', 'min_age'] list_display = ('name', 'min_age') + +class ActivityCategoryAdmin(admin.ModelAdmin): + fields = ['name', 'description'] + + class MemberListAdminForm(forms.ModelForm): class Meta: model = MemberList exclude = ['add_member'] - def __init__(self, *args, **kwargs): super(MemberListAdminForm, self).__init__(*args, **kwargs) self.fields['jugendleiter'].queryset = Member.objects.filter(group__name='Jugendleiter') @@ -217,3 +230,4 @@ admin.site.register(Member, MemberAdmin) admin.site.register(Group, GroupAdmin) admin.site.register(MemberList, MemberListAdmin) admin.site.register(Klettertreff, KlettertreffAdmin) +admin.site.register(ActivityCategory, ActivityCategoryAdmin) diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index b103e70..5e3e921 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -7,6 +7,22 @@ from django.utils import timezone from multiselectfield import MultiSelectField + +class ActivityCategory(models.Model): + """ + Describes one kind of activity + """ + name = models.CharField(max_length=20, verbose_name=_('Name')) + description = models.TextField(_('Description')) + + def __str__(self): + return self.name + + class Meta: + verbose_name = _('Activity') + verbose_name_plural = _('Activities') + + class Group(models.Model): """ Represents one group of the association @@ -85,22 +101,32 @@ class Member(models.Model): verbose_name = _('member') verbose_name_plural = _('members') + def get_skills(self): + # get skills by summing up all the activities taken part in + skills = {} + for kind in ActivityCategory.objects.all(): + lists = MemberList.objects.filter(activity=kind, + memberonlist__member=self) + skills[kind.name] = len(lists) + return skills + class MemberList(models.Model): """Lets the user create a list of members in pdf format. """ name = models.CharField(verbose_name='Activity', default='', max_length=50) - place = models.CharField(verbose_name=_('Place'), default='', max_length=50) - destination = models.CharField(verbose_name=_('Destination (optional)'), default='', max_length=50, blank=True) + place = models.CharField(verbose_name=_('Place'), default='', max_length=50) + destination = models.CharField(verbose_name=_('Destination (optional)'), default='', max_length=50, blank=True) date = models.DateField(default=datetime.today) end = models.DateField(verbose_name=_('End (optional)'), blank=True, default=datetime.today) #comment = models.TextField(_('Comments'), default='', blank=True) groups = models.ManyToManyField(Group) jugendleiter = models.ManyToManyField(Member) - tour_type_choices = (('Gemeinschaftstour','Gemeinschaftstour'), ('Führungstour', 'Führungstour'), + tour_type_choices = (('Gemeinschaftstour','Gemeinschaftstour'), ('Führungstour', 'Führungstour'), ('Ausbildung', 'Ausbildung')) - tour_type = MultiSelectField(choices=tour_type_choices, default='', max_choices=1) + tour_type = MultiSelectField(choices=tour_type_choices, default='', max_choices=1) + activity = models.ManyToManyField(ActivityCategory, default=None) def __str__(self): @@ -136,7 +162,7 @@ class Klettertreff(models.Model): topic = models.CharField(_('Topic'), 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') @@ -157,7 +183,6 @@ class Klettertreff(models.Model): return True return False - get_jugendleiter.short_description = _('Jugendleiter') class Meta: diff --git a/jdav_web/members/templates/members/change_member.html b/jdav_web/members/templates/members/change_member.html new file mode 100644 index 0000000..c622fd1 --- /dev/null +++ b/jdav_web/members/templates/members/change_member.html @@ -0,0 +1,20 @@ +{% extends "admin/change_form.html" %} +{% load i18n %} +{% load static %} +{% block after_field_sets %} + +
{% trans "Qualities:" %}
+| {% trans "Activity" %} | +{% trans "Skill level" %} | +
|---|---|
| {{ key }} | ++ |