diff --git a/biscuit/apps/chronos/forms.py b/biscuit/apps/chronos/forms.py new file mode 100644 index 0000000000000000000000000000000000000000..718bfe13a05927fc956c3fac9ac42d3e081295a4 --- /dev/null +++ b/biscuit/apps/chronos/forms.py @@ -0,0 +1,19 @@ +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')) diff --git a/biscuit/apps/chronos/templates/chronos/tt_week.html b/biscuit/apps/chronos/templates/chronos/tt_week.html index 7293aa68541b51d414f45df68ae51d15dc86e750..d590d6fed85156901b966027ef771cbe21357f14 100644 --- a/biscuit/apps/chronos/templates/chronos/tt_week.html +++ b/biscuit/apps/chronos/templates/chronos/tt_week.html @@ -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"> diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py index 1e5694ce16afd0edb8f2f8a820de83004bfc5706..c458fa5671e5932bf584d81565bbd15b012b8b59 100644 --- a/biscuit/apps/chronos/views.py +++ b/biscuit/apps/chronos/views.py @@ -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)