evaluate skills based on activities

v1-0-stable
Christian Merten 9 years ago
parent 77ee6457ba
commit 46320d6dce

@ -16,7 +16,7 @@ from django.forms import Textarea
from django.shortcuts import render from django.shortcuts import render
from .models import (Member, Group, MemberList, MemberOnList, Klettertreff, from .models import (Member, Group, MemberList, MemberOnList, Klettertreff,
KlettertreffAttendee) KlettertreffAttendee, ActivityCategory)
# Register your models here. # Register your models here.
@ -28,18 +28,31 @@ class MemberAdmin(admin.ModelAdmin):
formfield_overrides = { formfield_overrides = {
ManyToManyField: {'widget': forms.CheckboxSelectMultiple} 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): class GroupAdmin(admin.ModelAdmin):
fields = ['name', 'min_age'] fields = ['name', 'min_age']
list_display = ('name', 'min_age') list_display = ('name', 'min_age')
class ActivityCategoryAdmin(admin.ModelAdmin):
fields = ['name', 'description']
class MemberListAdminForm(forms.ModelForm): class MemberListAdminForm(forms.ModelForm):
class Meta: class Meta:
model = MemberList model = MemberList
exclude = ['add_member'] exclude = ['add_member']
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(MemberListAdminForm, self).__init__(*args, **kwargs) super(MemberListAdminForm, self).__init__(*args, **kwargs)
self.fields['jugendleiter'].queryset = Member.objects.filter(group__name='Jugendleiter') 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(Group, GroupAdmin)
admin.site.register(MemberList, MemberListAdmin) admin.site.register(MemberList, MemberListAdmin)
admin.site.register(Klettertreff, KlettertreffAdmin) admin.site.register(Klettertreff, KlettertreffAdmin)
admin.site.register(ActivityCategory, ActivityCategoryAdmin)

@ -7,6 +7,22 @@ from django.utils import timezone
from multiselectfield import MultiSelectField 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): class Group(models.Model):
""" """
Represents one group of the association Represents one group of the association
@ -85,22 +101,32 @@ class Member(models.Model):
verbose_name = _('member') verbose_name = _('member')
verbose_name_plural = _('members') 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): class MemberList(models.Model):
"""Lets the user create a list of members in pdf format. """ """Lets the user create a list of members in pdf format. """
name = models.CharField(verbose_name='Activity', default='', name = models.CharField(verbose_name='Activity', default='',
max_length=50) max_length=50)
place = models.CharField(verbose_name=_('Place'), 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) destination = models.CharField(verbose_name=_('Destination (optional)'), default='', max_length=50, blank=True)
date = models.DateField(default=datetime.today) date = models.DateField(default=datetime.today)
end = models.DateField(verbose_name=_('End (optional)'), blank=True, default=datetime.today) end = models.DateField(verbose_name=_('End (optional)'), blank=True, default=datetime.today)
#comment = models.TextField(_('Comments'), default='', blank=True) #comment = models.TextField(_('Comments'), default='', blank=True)
groups = models.ManyToManyField(Group) groups = models.ManyToManyField(Group)
jugendleiter = models.ManyToManyField(Member) jugendleiter = models.ManyToManyField(Member)
tour_type_choices = (('Gemeinschaftstour','Gemeinschaftstour'), ('Führungstour', 'Führungstour'), tour_type_choices = (('Gemeinschaftstour','Gemeinschaftstour'), ('Führungstour', 'Führungstour'),
('Ausbildung', 'Ausbildung')) ('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): def __str__(self):
@ -136,7 +162,7 @@ class Klettertreff(models.Model):
topic = models.CharField(_('Topic'), default='', max_length=60) topic = models.CharField(_('Topic'), default='', max_length=60)
jugendleiter = models.ManyToManyField(Member) jugendleiter = models.ManyToManyField(Member)
group = models.ForeignKey(Group, default='') 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')
@ -157,7 +183,6 @@ class Klettertreff(models.Model):
return True return True
return False return False
get_jugendleiter.short_description = _('Jugendleiter') get_jugendleiter.short_description = _('Jugendleiter')
class Meta: class Meta:

@ -0,0 +1,20 @@
{% extends "admin/change_form.html" %}
{% load i18n %}
{% load static %}
{% block after_field_sets %}
<p><b>{% trans "Qualities:" %}</b></p>
<table style="width:100%">
<tr>
<th>{% trans "Activity" %}</th>
<th>{% trans "Skill level" %}</th>
</tr>
{% for key, value in qualities.items %}
<tr>
<td>{{ key }}</td>
<td><progress value="{{ value }}" max="100"></progress></td>
</tr>
{% endfor %}
</table>
{% endblock %}
Loading…
Cancel
Save