Skip to content
Snippets Groups Projects
Verified Commit 122cb456 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Make timetable view aware of current week and lesson dates. Closes #15, #16.

parent 4e8fba49
No related branches found
No related tags found
No related merge requests found
......@@ -125,7 +125,7 @@ class LessonPeriod(models.Model):
room = models.ForeignKey('Room', models.CASCADE, null=True, related_name='lesson_periods')
def get_substitution(self, week: Optional[int] = None) -> LessonSubstitution:
wanted_week = week or current_week()
wanted_week = week or getattr(self, '_week', None) or current_week()
return self.substitutions.filter(week=wanted_week).first()
def get_subject(self) -> Optional[Subject]:
......
......@@ -10,6 +10,20 @@
{% block page_title %}Timetable{% endblock %}
{% block content %}
<div class="d-flex justify-content-between">
<div>
<h1>{{ day }}</h1>
</div>
<div class="btn-group" role="group" aria-label="Day actions">
<a href="{% url 'timetable_by_week' week_prev %}" class="btn btn-secondary">
{% fa 'arrow-left' %}
</a>
<a href="{% url 'timetable_by_week' week_next %}" class="btn btn-secondary">
{% fa 'arrow-right' %}
</a>
</div>
</div>
<form method="get">
<ul id="timetable_select_form">
{{ select_form.as_ul }}
......
......@@ -5,6 +5,7 @@ from . import views
urlpatterns = [
path('timetable', views.timetable, name='timetable'),
path('timetable/<int:week>', views.timetable, name='timetable_by_week'),
path('lessons', views.lessons_day, name='lessons_day'),
path('lessons/<when>', views.lessons_day, name='lessons_day_by_date'),
path('lessons/<int:id_>/<int:week>/substition', views.edit_substitution, name='edit_substitution')
......
......@@ -23,10 +23,15 @@ from .tables import LessonsTable
@login_required
@cache_page(60 * 60 * 12)
def timetable(request: HttpRequest) -> HttpResponse:
def timetable(request: HttpRequest, week: Optional[int] = None) -> HttpResponse:
context = {}
lesson_periods = LessonPeriod.objects.all()
wanted_week = week or current_week()
lesson_periods = LessonPeriod.objects.filter(
lesson__date_start__gte=week_days(wanted_week)[0],
lesson__date_end__lte=week_days(wanted_week)[-1]
).extra(select={'_week': wanted_week})
if request.GET.get('group', None) or request.GET.get('teacher', None) or request.GET.get('room', None):
# Incrementally filter lesson periods by GET parameters
......@@ -81,7 +86,9 @@ def timetable(request: HttpRequest) -> HttpResponse:
context['lesson_periods'] = OrderedDict(sorted(per_day.items()))
context['periods'] = TimePeriod.get_times_dict()
context['weekdays'] = dict(TimePeriod.WEEKDAY_CHOICES)
context['current_week'] = current_week()
context['week'] = wanted_week
context['week_prev'] = wanted_week - 1
context['week_next'] = wanted_week + 1
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