From 797602be04c82e41e58c821e4d9b528efaa3072a Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Sat, 9 Mar 2013 14:55:38 -0800 Subject: [PATCH] Add timerecord hours summary view. --- forms.py | 18 ++++++++++++++++++ templates/roster/front.html | 1 + urls.py | 1 + views.py | 36 +++++++++++++++++++++++++++++++++++- 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/forms.py b/forms.py index 8e5131e..818f9d6 100644 --- a/forms.py +++ b/forms.py @@ -54,6 +54,24 @@ class ContactListForm(TeamReportForm): class TshirtListForm(TeamReportForm): pass +class HoursListForm(forms.Form): + who = forms.MultipleChoiceField( + widget=forms.CheckboxSelectMultiple, + choices=( + ('Mentor', "Mentor"), + ('Student', "Student"), + ), + initial=['Mentor', 'Student']) + + team = forms.MultipleChoiceField( + widget=forms.CheckboxSelectMultiple, + choices=[(x.id, x.name) for x in Team.objects.all()]) + + from_date = forms.DateField(required=False) + to_date = forms.DateField(required=False) + + include_hours = forms.BooleanField(required=False, initial=True) + class EventEmailListForm(forms.Form): who = forms.MultipleChoiceField( widget=forms.CheckboxSelectMultiple, diff --git a/templates/roster/front.html b/templates/roster/front.html index 98a051b..714ba5c 100644 --- a/templates/roster/front.html +++ b/templates/roster/front.html @@ -10,6 +10,7 @@
  • Team Phone List
  • Team Contact List
  • T-Shirt List
  • +
  • Hours List
  • Badge Generation
  • diff --git a/urls.py b/urls.py index 3e002dc..29cb3a8 100644 --- a/urls.py +++ b/urls.py @@ -10,6 +10,7 @@ url(r'^phone/$', 'phone_list', name="phone_list"), url(r'^contact/$', 'contact_list', name="contact_list"), url(r'^tshirt/$', 'tshirt_list', name="tshirt_list"), + url(r'^hours/$', 'hours_list', name="hours_list"), url(r'^event_email/$', 'event_email_list', name="event_email_list"), url(r'^team_reg_verify/$', 'team_reg_verify', name="team_reg_verify"), url(r'^badges/$', 'badges', name="badges"), diff --git a/views.py b/views.py index 6861e23..f8785b1 100644 --- a/views.py +++ b/views.py @@ -4,7 +4,7 @@ from django.shortcuts import render_to_response, get_object_or_404, redirect from django.contrib.auth.decorators import login_required from django.template import RequestContext -from django.db.models import Q, Count +from django.db.models import Q, Count, Sum from django.views.decorators.csrf import csrf_exempt from django.db import transaction from django.contrib.formtools.wizard.views import SessionWizardView @@ -286,6 +286,40 @@ def tshirt_list(request): return render_to_response("roster/tshirt_list.html", locals(), context_instance=RequestContext(request)) +@login_required(login_url='/roster/login/') +def hours_list(request): + """Team hours list.""" + + if request.method == 'GET' and request.GET: + form = HoursListForm(request.GET) + if form.is_valid(): + who = set(form.data.getlist('who')) + + people = PersonTeam.objects.filter(role__in=who, + status='Active', + team__in=form.data.getlist('team')).values('person') + + results = Person.objects.filter(id__in=people) + + from_date = form.cleaned_data.get('from_date', None) + to_date = form.cleaned_data.get('to_date', None) + if from_date and to_date: + results = results.filter(timerecord__clock_in__range=(from_date, to_date)) + elif from_date: + results = results.filter(timerecord__clock_in__gt=from_date) + elif to_date: + results = results.filter(timerecord__clock_in__lt=to_date) + + results = results.annotate(total_hours=Sum('timerecord__hours')).order_by('-total_hours') + + total = sum(x.total_hours for x in results) + show_hours = 'include_hours' in form.data + else: + form = HoursListForm() + + return render_to_response("roster/hours_list.html", locals(), + context_instance=RequestContext(request)) + @login_required(login_url='/roster/login/') def event_email_list(request): """Event email list."""