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 @@ ...@@ -10,9 +10,13 @@
{% block page_title %}Timetable{% endblock %} {% block page_title %}Timetable{% endblock %}
{% block content %} {% block content %}
<p> <form method="get">
{{ filter_descs }} {% csrf_token %}
</p> <ul id="timetable_select_form">
{{ select_form.as_ul }}
</ul>
<input type="submit" value="Select" />
</form>
<div class="row"> <div class="row">
<div class="col-sm px-0"> <div class="col-sm px-0">
......
...@@ -10,6 +10,7 @@ from django.utils.translation import ugettext as _ ...@@ -10,6 +10,7 @@ from django.utils.translation import ugettext as _
from biscuit.core.decorators import admin_required from biscuit.core.decorators import admin_required
from biscuit.core.models import Group, Person from biscuit.core.models import Group, Person
from .forms import SelectForm
from .models import LessonPeriod, TimePeriod, Room from .models import LessonPeriod, TimePeriod, Room
from .util import current_week from .util import current_week
...@@ -20,23 +21,16 @@ def timetable(request: HttpRequest) -> HttpResponse: ...@@ -20,23 +21,16 @@ def timetable(request: HttpRequest) -> HttpResponse:
context = {} context = {}
lesson_periods = LessonPeriod.objects.all() lesson_periods = LessonPeriod.objects.all()
filter_descs = []
if 'group' in request.GET: if 'group' in request.GET:
lesson_periods = lesson_periods.filter( lesson_periods = lesson_periods.filter(
lesson__groups__pk=int(request.GET['group'])) 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: elif 'teacher' in request.GET:
lesson_periods = lesson_periods.filter( lesson_periods = lesson_periods.filter(
lesson__teachers__pk=int(request.GET['teacher'])) 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: elif 'room' in request.GET:
lesson_periods = lesson_periods.filter( lesson_periods = lesson_periods.filter(
room__pk=int(request.GET['room'])) room__pk=int(request.GET['room']))
filter_descs.append(_('Room: %s') % Room.objects.get(
pk=int(request.GET['room'])))
else: else:
if request.user.person: if request.user.person:
if request.user.person.primary_group: if request.user.person.primary_group:
...@@ -72,10 +66,13 @@ def timetable(request: HttpRequest) -> HttpResponse: ...@@ -72,10 +66,13 @@ def timetable(request: HttpRequest) -> HttpResponse:
per_day[weekday_num] = OrderedDict( per_day[weekday_num] = OrderedDict(
sorted(per_day[weekday_num].items())) 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['lesson_periods'] = OrderedDict(sorted(per_day.items()))
context['filter_descs'] = ', '.join(filter_descs)
context['periods'] = TimePeriod.get_times_dict() context['periods'] = TimePeriod.get_times_dict()
context['weekdays'] = dict(TimePeriod.WEEKDAY_CHOICES) context['weekdays'] = dict(TimePeriod.WEEKDAY_CHOICES)
context['current_week'] = current_week() context['current_week'] = current_week()
context['select_form'] = select_form
return render(request, 'chronos/tt_week.html', context) 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