Skip to content
Snippets Groups Projects
Commit 7f47f710 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Add filter selection form for timetables. Advances #4.

parent f0819ae5
No related branches found
No related tags found
No related merge requests found
from django import forms
from django.db.models import Count
from django.utils.translation import ugettext_lazy as _
from biscuit.core.models import Person, Group
from .models import Room
class SelectForm(forms.Form):
group = forms.ModelChoiceField(
queryset=Group.objects.annotate(lessons_count=Count('lessons')).filter(lessons_count__gt=0),
label=_('Group'))
teacher = forms.ModelChoiceField(
queryset=Person.objects.annotate(lessons_count=Count('lessons')).filter(lessons_count__gt=0),
label=_('Teacher'))
room = forms.ModelChoiceField(
queryset=Room.objects.annotate(lessons_count=Count('lesson_periods')).filter(lessons_count__gt=0),
label=_('Room'))
......@@ -10,9 +10,13 @@
{% block page_title %}Timetable{% endblock %}
{% block content %}
<p>
{{ filter_descs }}
</p>
<form method="get">
{% csrf_token %}
<ul id="timetable_select_form">
{{ select_form.as_ul }}
</ul>
<input type="submit" value="Select" />
</form>
<div class="row">
<div class="col-sm px-0">
......
......@@ -10,6 +10,7 @@ from django.utils.translation import ugettext as _
from biscuit.core.decorators import admin_required
from biscuit.core.models import Group, Person
from .forms import SelectForm
from .models import LessonPeriod, TimePeriod, Room
from .util import current_week
......@@ -20,23 +21,16 @@ def timetable(request: HttpRequest) -> HttpResponse:
context = {}
lesson_periods = LessonPeriod.objects.all()
filter_descs = []
if 'group' in request.GET:
lesson_periods = lesson_periods.filter(
lesson__groups__pk=int(request.GET['group']))
filter_descs.append(_('Group: %s') % Group.objects.get(
pk=int(request.GET['group'])))
elif 'teacher' in request.GET:
lesson_periods = lesson_periods.filter(
lesson__teachers__pk=int(request.GET['teacher']))
filter_descs.append(_('Teacher: %s') % Person.objects.get(
pk=int(request.GET['teacher'])))
elif 'room' in request.GET:
lesson_periods = lesson_periods.filter(
room__pk=int(request.GET['room']))
filter_descs.append(_('Room: %s') % Room.objects.get(
pk=int(request.GET['room'])))
else:
if request.user.person:
if request.user.person.primary_group:
......@@ -72,10 +66,13 @@ def timetable(request: HttpRequest) -> HttpResponse:
per_day[weekday_num] = OrderedDict(
sorted(per_day[weekday_num].items()))
# Add a form to filter the view
select_form = SelectForm(request.GET or None)
context['lesson_periods'] = OrderedDict(sorted(per_day.items()))
context['filter_descs'] = ', '.join(filter_descs)
context['periods'] = TimePeriod.get_times_dict()
context['weekdays'] = dict(TimePeriod.WEEKDAY_CHOICES)
context['current_week'] = current_week()
context['select_form'] = select_form
return render(request, 'chronos/tt_week.html', context)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment