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

Respect year and use new week API everywhere. Closes #27.

parent db79ecc5
No related branches found
No related tags found
No related merge requests found
......@@ -9,7 +9,7 @@ from django.utils.translation import ugettext_lazy as _
from biscuit.core.mixins import SchoolRelated
from .util import current_week
from .util import CalendarWeek
class TimePeriod(SchoolRelated):
......@@ -102,6 +102,13 @@ class Lesson(SchoolRelated):
def group_names(self, sep: Optional[str] = ', ') -> str:
return sep.join([group.short_name for group in self.groups.all()])
def get_calendar_week(self, week: int):
year = self.date_start.year
if week < int(self.date_start.strftime('%V')):
year += 1
return CalendarWeek(year=year, week=week)
class Meta:
ordering = ['date_start']
indexes = [models.Index(fields=['date_start', 'date_end'])]
......@@ -109,7 +116,7 @@ class Lesson(SchoolRelated):
class LessonSubstitution(SchoolRelated):
week = models.IntegerField(verbose_name=_('Week'),
default=current_week)
default=CalendarWeek().week)
lesson_period = models.ForeignKey(
'LessonPeriod', models.CASCADE, 'substitutions')
......@@ -146,7 +153,7 @@ class LessonPeriod(SchoolRelated):
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 getattr(self, '_week', None) or current_week()
wanted_week = week or getattr(self, '_week', None) or CalendarWeek().week
# We iterate over all substitutions because this can make use of
# prefetching when this model is loaded from outside, in contrast
......
......@@ -5,7 +5,7 @@ from . import views
urlpatterns = [
path('timetable', views.timetable, name='timetable'),
path('timetable/<int:week>', views.timetable, name='timetable_by_week'),
path('timetable/<int:year>/<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'),
......
......@@ -22,11 +22,11 @@ from .tables import LessonsTable
@login_required
def timetable(request: HttpRequest, week: Optional[int] = None) -> HttpResponse:
def timetable(request: HttpRequest, year: Optional[int], week: Optional[int] = None) -> HttpResponse:
context = {}
if week:
wanted_week = CalendarWeek(week) # FIXME Respect year as well
if year and week:
wanted_week = CalendarWeek(year=year, week=week)
else:
wanted_week = CalendarWeek()
......@@ -38,7 +38,7 @@ def timetable(request: HttpRequest, week: Optional[int] = None) -> HttpResponse:
).prefetch_related(
'lesson__groups', 'lesson__teachers', 'substitutions'
).extra(
select={'_week': wanted_week.week} # FIXME respect year as well
select={'_week': wanted_week.week}
)
if request.GET.get('group', None) or request.GET.get('teacher', None) or request.GET.get('room', None):
......@@ -48,7 +48,7 @@ def timetable(request: HttpRequest, week: Optional[int] = None) -> HttpResponse:
Q(lesson__groups__pk=int(request.GET['group'])) | Q(lesson__groups__parent_groups__pk=int(request.GET['group'])))
if 'teacher' in request.GET and request.GET['teacher']:
lesson_periods = lesson_periods.filter(
Q(substitutions__teachers__pk=int(request.GET['teacher']), substitutions__week=wanted_week.week) | Q(lesson__teachers__pk=int(request.GET['teacher']))) # FIXME Respect year as well
Q(substitutions__teachers__pk=int(request.GET['teacher']), substitutions__week=wanted_week.week) | Q(lesson__teachers__pk=int(request.GET['teacher'])))
if 'room' in request.GET and request.GET['room']:
lesson_periods = lesson_periods.filter(
room__pk=int(request.GET['room']))
......@@ -124,7 +124,7 @@ def lessons_day(request: HttpRequest, when: Optional[str] = None) -> HttpRespons
)
# Build table
lessons_table = LessonsTable(lesson_periods.extra(select={'_week': week.week}).all()) # FIXME Respect year as well
lessons_table = LessonsTable(lesson_periods.extra(select={'_week': week.week}).all())
RequestConfig(request).configure(lessons_table)
context['current_head'] = _('Lessons')
......@@ -142,18 +142,15 @@ def lessons_day(request: HttpRequest, when: Optional[str] = None) -> HttpRespons
def edit_substitution(request: HttpRequest, id_: int, week: int) -> HttpResponse:
context = {}
wanted_week = CalendarWeek(week=week) # FIXME Respect year as well
lesson_period = get_object_or_404(LessonPeriod, pk=id_)
lesson_substitution = LessonSubstitution.objects.filter(
week=wanted_week.week, lesson_period=lesson_period).first() # FIXME Respect year as well
week=wanted_week.week, lesson_period=lesson_period).first()
if lesson_substitution:
edit_substitution_form = LessonSubstitutionForm(
request.POST or None, instance=lesson_substitution)
else:
edit_substitution_form = LessonSubstitutionForm(
request.POST or None, initial={'week': wanted_week.week, 'lesson_period': lesson_period}) # FIXME Respect year as well
request.POST or None, initial={'week': wanted_week.week, 'lesson_period': lesson_period})
context['substitution'] = lesson_substitution
......@@ -173,10 +170,11 @@ def edit_substitution(request: HttpRequest, id_: int, week: int) -> HttpResponse
def delete_substitution(request: HttpRequest, id_: int, week: int) -> HttpResponse:
context = {}
wanted_week = CalendarWeek(week=week) # FIXME Respect year as well
lesson_period = get_object_or_404(LessonPeriod, pk=id_)
wanted_week = lesson_period.lesson.get_calendar_week(week)
LessonSubstitution.objects.filter(
week=wanted_week.week, lesson_period__id=id_ # FIXME Respect year as well
week=wanted_week.week, lesson_period=lesson_period
).delete()
messages.success(request, _('The substitution has been deleted.'))
......
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