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 .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)

@ -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:

@ -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