diff --git a/biscuit/apps/chronos/migrations/0004_auto_20190821_1550.py b/biscuit/apps/chronos/migrations/0004_auto_20190821_1550.py new file mode 100644 index 0000000000000000000000000000000000000000..af74299244f2c098b8aaefe313e28848a2e1e515 --- /dev/null +++ b/biscuit/apps/chronos/migrations/0004_auto_20190821_1550.py @@ -0,0 +1,30 @@ +# Generated by Django 2.2.4 on 2019-08-21 15:50 + +import biscuit.apps.chronos.util +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('chronos', '0003_lesson_substitution'), + ] + + operations = [ + migrations.RemoveField( + model_name='lessonperiod', + name='substitution', + ), + migrations.AddField( + model_name='lessonsubstitution', + name='lesson_period', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='substitutions', to='chronos.LessonPeriod'), + preserve_default=False, + ), + migrations.AddField( + model_name='lessonsubstitution', + name='week', + field=models.IntegerField(default=biscuit.apps.chronos.util.current_week, verbose_name='Kalenderwoche'), + ), + ] diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py index 3842b5e46246a9426de74dde13dd8060e8863bce..82680c95792a885d4b001530ff2bab785bfe2169 100644 --- a/biscuit/apps/chronos/models.py +++ b/biscuit/apps/chronos/models.py @@ -2,6 +2,8 @@ from django.core import validators from django.db import models from django.utils.translation import ugettext_lazy as _ +from .util import current_week + class TimePeriod(models.Model): WEEKDAY_CHOICES = [ @@ -82,24 +84,25 @@ class LessonPeriod(models.Model): room = models.ForeignKey('Room', models.CASCADE, null=True) - substitution = models.OneToOneField('LessonSubstitution', models.CASCADE, - related_name='lesson_period', null=True) + def get_substitution(self, week=None): + wanted_week = week or current_week() + return self.substitutions.filter(week=wanted_week).first() def get_subject(self): - if self.substitution: - return self.substitution.subject + if self.get_substitution(): + return self.get_substitution().subject else: return self.lesson.subject def get_teachers(self): - if self.substitution: - return self.substitution.teachers + if self.get_substitution(): + return self.get_substitution().teachers else: return self.lesson.teachers def get_room(self): - if self.substitution: - return self.substitution.room + if self.get_substitution(): + return self.get_substitution().room else: return self.room @@ -108,6 +111,12 @@ class LessonPeriod(models.Model): class LessonSubstitution(models.Model): + week = models.IntegerField(verbose_name=_('Kalenderwoche'), + default=current_week) + + lesson_period = models.ForeignKey( + 'LessonPeriod', models.CASCADE, 'substitutions') + subject = models.ForeignKey( 'Subject', on_delete=models.CASCADE, related_name='lesson_substitutions', null=True) diff --git a/biscuit/apps/chronos/util.py b/biscuit/apps/chronos/util.py new file mode 100644 index 0000000000000000000000000000000000000000..8d5c781a350b2bf9667fdbcaa34b0e7e5eb508ec --- /dev/null +++ b/biscuit/apps/chronos/util.py @@ -0,0 +1,5 @@ +from datetime import datetime + + +def current_week(): + return int(datetime.now().strftime('%V')) diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py index e4bb8898268b4923a8f8db0f9289324aa2f53d52..7822866a18270707919b382111f1cc041be07493 100644 --- a/biscuit/apps/chronos/views.py +++ b/biscuit/apps/chronos/views.py @@ -9,6 +9,7 @@ from biscuit.core.decorators import admin_required from biscuit.core.models import Group, Person from .models import LessonPeriod, TimePeriod, Room +from .util import current_week @login_required @@ -73,5 +74,6 @@ def timetable(request): context['filter_descs'] = ', '.join(filter_descs) context['periods'] = TimePeriod.get_times_dict() context['weekdays'] = dict(TimePeriod.WEEKDAY_CHOICES) + context['current_week'] = current_week() return render(request, 'chronos/tt_week.html', context)