From c843a23649247c4bbe5abe0c8dc8134ebfb7571b Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Wed, 29 May 2019 17:11:36 +0200
Subject: [PATCH] +++ WARNING +++ THE BIG MIGRATION RECREATION +++ WARNING +++

IN CASE OF MERGING THIS BRANCH YOU HAVE TO DELETE YOUR WHOLE DATABASE TO DO NEW MIGRATIONS!
---
 .idea/school-apps.iml                         |  2 +-
 schoolapps/aub/filters.py                     | 19 +++---
 schoolapps/aub/migrations/0001_initial.py     | 35 ++++++-----
 schoolapps/aub/migrations/0002_aub_status.py  | 18 ------
 .../aub/migrations/0003_auto_20181031_1551.py | 24 --------
 .../aub/migrations/0003_auto_20181223_0905.py | 43 --------------
 .../aub/migrations/0004_auto_20181031_1617.py | 19 ------
 .../aub/migrations/0005_auto_20181128_1709.py | 19 ------
 .../aub/migrations/0006_auto_20181219_1107.py | 24 --------
 .../migrations/0007_merge_20190426_1620.py    | 14 -----
 .../aub/migrations/0008_auto_20190426_1654.py | 58 -------------------
 schoolapps/aub/models.py                      | 14 ++---
 .../dashboard/migrations/0001_initial.py      | 13 +++--
 schoolapps/dashboard/models.py                |  8 +--
 schoolapps/doc/__init__.py                    |  0
 schoolapps/doc/admin.py                       |  3 -
 schoolapps/doc/apps.py                        |  5 --
 .../doc/migrations/0002_auto_20190106_0905.py | 18 ------
 .../doc/migrations/0003_auto_20190108_1626.py | 18 ------
 schoolapps/doc/migrations/__init__.py         |  0
 schoolapps/doc/models.py                      | 54 -----------------
 schoolapps/doc/tests.py                       |  3 -
 schoolapps/doc/views.py                       |  3 -
 schoolapps/faq/migrations/0001_initial.py     | 23 ++------
 .../faq/migrations/0002_auto_20190429_1329.py | 18 ------
 .../faq/migrations/0003_auto_20190429_1338.py | 23 --------
 .../faq/migrations/0004_auto_20190429_1339.py | 18 ------
 .../faq/migrations/0005_auto_20190429_2121.py | 25 --------
 .../faq/migrations/0006_auto_20190501_1406.py | 22 -------
 schoolapps/menu/migrations/0001_initial.py    | 17 ++++--
 .../migrations/0002_auto_20181129_1743.py     | 17 ------
 .../migrations/0003_auto_20181129_1747.py     | 18 ------
 .../migrations/0004_auto_20181211_1648.py     | 16 -----
 .../migrations/0005_auto_20181211_1743.py     | 33 -----------
 schoolapps/support/migrations/0001_initial.py |  2 +-
 .../migrations/0002_auto_20190120_1640.py     | 17 ------
 .../migrations/0003_auto_20190120_1642.py     | 16 -----
 schoolapps/timetable/failback_view.py         |  7 +++
 schoolapps/timetable/pdf.py                   |  2 +-
 .../templates/timetable/failback.html         |  8 +++
 schoolapps/timetable/urls.py                  | 52 ++++++++++++-----
 41 files changed, 123 insertions(+), 625 deletions(-)
 delete mode 100644 schoolapps/aub/migrations/0002_aub_status.py
 delete mode 100644 schoolapps/aub/migrations/0003_auto_20181031_1551.py
 delete mode 100644 schoolapps/aub/migrations/0003_auto_20181223_0905.py
 delete mode 100644 schoolapps/aub/migrations/0004_auto_20181031_1617.py
 delete mode 100644 schoolapps/aub/migrations/0005_auto_20181128_1709.py
 delete mode 100644 schoolapps/aub/migrations/0006_auto_20181219_1107.py
 delete mode 100644 schoolapps/aub/migrations/0007_merge_20190426_1620.py
 delete mode 100644 schoolapps/aub/migrations/0008_auto_20190426_1654.py
 delete mode 100644 schoolapps/doc/__init__.py
 delete mode 100644 schoolapps/doc/admin.py
 delete mode 100644 schoolapps/doc/apps.py
 delete mode 100644 schoolapps/doc/migrations/0002_auto_20190106_0905.py
 delete mode 100644 schoolapps/doc/migrations/0003_auto_20190108_1626.py
 delete mode 100644 schoolapps/doc/migrations/__init__.py
 delete mode 100644 schoolapps/doc/models.py
 delete mode 100644 schoolapps/doc/tests.py
 delete mode 100644 schoolapps/doc/views.py
 delete mode 100644 schoolapps/faq/migrations/0002_auto_20190429_1329.py
 delete mode 100644 schoolapps/faq/migrations/0003_auto_20190429_1338.py
 delete mode 100644 schoolapps/faq/migrations/0004_auto_20190429_1339.py
 delete mode 100644 schoolapps/faq/migrations/0005_auto_20190429_2121.py
 delete mode 100644 schoolapps/faq/migrations/0006_auto_20190501_1406.py
 delete mode 100644 schoolapps/menu/migrations/0002_auto_20181129_1743.py
 delete mode 100644 schoolapps/menu/migrations/0003_auto_20181129_1747.py
 delete mode 100644 schoolapps/menu/migrations/0004_auto_20181211_1648.py
 delete mode 100644 schoolapps/menu/migrations/0005_auto_20181211_1743.py
 delete mode 100644 schoolapps/support/migrations/0002_auto_20190120_1640.py
 delete mode 100644 schoolapps/support/migrations/0003_auto_20190120_1642.py
 create mode 100644 schoolapps/timetable/failback_view.py
 create mode 100755 schoolapps/timetable/templates/timetable/failback.html

diff --git a/.idea/school-apps.iml b/.idea/school-apps.iml
index 603f44515..d0b5ddd7b 100644
--- a/.idea/school-apps.iml
+++ b/.idea/school-apps.iml
@@ -23,7 +23,7 @@
       <excludeFolder url="file://$MODULE_DIR$/env" />
       <excludeFolder url="file://$MODULE_DIR$/schoolapps/staticcollect" />
     </content>
-    <orderEntry type="inheritedJdk" />
+    <orderEntry type="jdk" jdkName="Python 3.7 (school-apps)" jdkType="Python SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
   </component>
   <component name="TemplatesService">
diff --git a/schoolapps/aub/filters.py b/schoolapps/aub/filters.py
index 880f283c7..23dd84fc7 100644
--- a/schoolapps/aub/filters.py
+++ b/schoolapps/aub/filters.py
@@ -1,22 +1,25 @@
-from django import forms
 from django.contrib.auth.models import User
 import django_filters
 from .models import Aub
+from django.db.utils import ProgrammingError
 
 
-class AUBFilter(django_filters.FilterSet):
-    def getAUBUsers():
-        ''' Find all users who sends an AUB'''
+def get_aub_users():
+    """ Find all users who sends an AUB """
+    try:
         aub_users = Aub.objects.values_list('created_by')
         users = list(User.objects.filter(id__in=aub_users))
         # user_ids = [(str(user.id),user.username) for user in users]
-        user_ids = [(str(user.id),user.last_name+', '+user.first_name) for user in users]
+        user_ids = [(str(user.id), user.last_name + ', ' + user.first_name) for user in users]
         user_ids_sorted = sorted(user_ids, key=lambda user: user[1])
         return user_ids_sorted
+    except ProgrammingError:
+        return []
+
 
-    created_by = django_filters.ChoiceFilter(label='Von', choices=getAUBUsers())
+class AUBFilter(django_filters.FilterSet):
+    created_by = django_filters.ChoiceFilter(label='Von', choices=get_aub_users())
 
     class Meta:
         model = Aub
-        fields = ['created_by',]
-
+        fields = ['created_by', ]
diff --git a/schoolapps/aub/migrations/0001_initial.py b/schoolapps/aub/migrations/0001_initial.py
index 409cd2cc6..ec71e6566 100644
--- a/schoolapps/aub/migrations/0001_initial.py
+++ b/schoolapps/aub/migrations/0001_initial.py
@@ -1,7 +1,9 @@
-# Generated by Django 2.1.2 on 2018-10-27 17:37
+# Generated by Django 2.2.1 on 2019-05-29 15:05
 
+import datetime
 from django.conf import settings
 from django.db import migrations, models
+import django.db.models.deletion
 import django.utils.timezone
 
 
@@ -18,22 +20,27 @@ class Migration(migrations.Migration):
             name='Aub',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('from_dt', models.DateTimeField(default=django.utils.timezone.now)),
-                ('to_dt', models.DateTimeField(default=django.utils.timezone.now)),
+                ('from_date', models.DateField(default=datetime.date.today, verbose_name='Startdatum')),
+                ('from_time', models.TimeField(default=django.utils.timezone.now, verbose_name='Startzeit')),
+                ('to_date', models.DateField(default=datetime.date.today, verbose_name='Enddatum')),
+                ('to_time', models.TimeField(default=django.utils.timezone.now, verbose_name='Endzeit')),
                 ('description', models.TextField()),
-                ('created_at', models.DateTimeField(default=django.utils.timezone.now)),
-                ('created_by', models.ForeignKey(default=1, on_delete=models.SET(1), related_name='aubs', to=settings.AUTH_USER_MODEL)),
+                ('status', models.IntegerField(
+                    choices=[(0, 'In Bearbeitung 1'), (1, 'In Bearbeitung 2'), (2, 'Genehmigt'), (3, 'Abgelehnt')],
+                    default=0, verbose_name='Status')),
+                ('created_at',
+                 models.DateTimeField(default=django.utils.timezone.now, verbose_name='Erstellungszeitpunkt')),
+                ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL,
+                                                 related_name='aubs', to=settings.AUTH_USER_MODEL,
+                                                 verbose_name='Erstellt von')),
             ],
             options={
-                'permissions': (('apply_for_aub', 'Apply for a AUB'), ('cancel_aub', 'Cancel a AUB'), ('allow1_aub', 'First permission'), ('allow2_aub', 'Second permission'), ('check1_aub', 'Check a AUB'), ('check2_aub', 'Check a AUB')),
+                'verbose_name': 'AUB',
+                'verbose_name_plural': 'AUBs',
+                'permissions': (('apply_for_aub', 'Apply for a AUB'), ('cancel_aub', 'Cancel a AUB'),
+                                ('allow1_aub', 'First permission'), ('allow2_aub', 'Second permission'),
+                                ('check1_aub', 'Check a AUB'), ('check2_aub', 'Check a AUB'),
+                                ('view_archive', 'View AUB archive')),
             },
         ),
-        migrations.CreateModel(
-            name='Status',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=100)),
-                ('style_classes', models.CharField(max_length=200)),
-            ],
-        ),
     ]
diff --git a/schoolapps/aub/migrations/0002_aub_status.py b/schoolapps/aub/migrations/0002_aub_status.py
deleted file mode 100644
index b32b83b9e..000000000
--- a/schoolapps/aub/migrations/0002_aub_status.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 2.1.2 on 2018-10-27 17:39
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('aub', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='aub',
-            name='status',
-            field=models.ForeignKey(default=1, on_delete=models.SET(1), related_name='aubs', to='aub.Status'),
-        ),
-    ]
diff --git a/schoolapps/aub/migrations/0003_auto_20181031_1551.py b/schoolapps/aub/migrations/0003_auto_20181031_1551.py
deleted file mode 100644
index c3c527456..000000000
--- a/schoolapps/aub/migrations/0003_auto_20181031_1551.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Generated by Django 2.0.7 on 2018-10-31 14:51
-
-from django.conf import settings
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ('aub', '0002_aub_status'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='aub',
-            name='created_by',
-            field=models.ForeignKey(default=3, on_delete=models.SET(3), related_name='aubs',
-                                    to=settings.AUTH_USER_MODEL),
-        ),
-        migrations.AlterField(
-            model_name='aub',
-            name='status',
-            field=models.ForeignKey(default=5, on_delete=models.SET(5), related_name='aubs', to='aub.Status'),
-        ),
-    ]
diff --git a/schoolapps/aub/migrations/0003_auto_20181223_0905.py b/schoolapps/aub/migrations/0003_auto_20181223_0905.py
deleted file mode 100644
index 4ed0109e2..000000000
--- a/schoolapps/aub/migrations/0003_auto_20181223_0905.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# Generated by Django 2.1.2 on 2018-12-23 08:05
-
-import datetime
-from django.db import migrations, models
-import django.utils.timezone
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('aub', '0002_aub_status'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='aub',
-            name='from_dt',
-        ),
-        migrations.RemoveField(
-            model_name='aub',
-            name='to_dt',
-        ),
-        migrations.AddField(
-            model_name='aub',
-            name='from_date',
-            field=models.DateField(default=datetime.date.today),
-        ),
-        migrations.AddField(
-            model_name='aub',
-            name='from_time',
-            field=models.TimeField(default=django.utils.timezone.now),
-        ),
-        migrations.AddField(
-            model_name='aub',
-            name='to_date',
-            field=models.DateField(default=datetime.date.today),
-        ),
-        migrations.AddField(
-            model_name='aub',
-            name='to_time',
-            field=models.TimeField(default=django.utils.timezone.now),
-        ),
-    ]
diff --git a/schoolapps/aub/migrations/0004_auto_20181031_1617.py b/schoolapps/aub/migrations/0004_auto_20181031_1617.py
deleted file mode 100644
index 200b95a88..000000000
--- a/schoolapps/aub/migrations/0004_auto_20181031_1617.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generated by Django 2.0.4 on 2018-10-31 15:17
-
-from django.conf import settings
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('aub', '0003_auto_20181031_1551'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='aub',
-            name='created_by',
-            field=models.ForeignKey(default=1, on_delete=models.SET(1), related_name='aubs', to=settings.AUTH_USER_MODEL),
-        ),
-    ]
diff --git a/schoolapps/aub/migrations/0005_auto_20181128_1709.py b/schoolapps/aub/migrations/0005_auto_20181128_1709.py
deleted file mode 100644
index 13997ca76..000000000
--- a/schoolapps/aub/migrations/0005_auto_20181128_1709.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generated by Django 2.0.7 on 2018-11-28 16:09
-
-from django.conf import settings
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ('aub', '0004_auto_20181031_1617'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='aub',
-            name='created_by',
-            field=models.ForeignKey(default=3, on_delete=models.SET(3), related_name='aubs',
-                                    to=settings.AUTH_USER_MODEL),
-        ),
-    ]
diff --git a/schoolapps/aub/migrations/0006_auto_20181219_1107.py b/schoolapps/aub/migrations/0006_auto_20181219_1107.py
deleted file mode 100644
index 2d7f31b40..000000000
--- a/schoolapps/aub/migrations/0006_auto_20181219_1107.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Generated by Django 2.0.4 on 2018-12-19 10:07
-
-from django.conf import settings
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('aub', '0005_auto_20181128_1709'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='aub',
-            name='created_by',
-            field=models.ForeignKey(default=1, on_delete=models.SET(1), related_name='aubs', to=settings.AUTH_USER_MODEL),
-        ),
-        migrations.AlterField(
-            model_name='aub',
-            name='status',
-            field=models.ForeignKey(default=7, on_delete=models.SET(7), related_name='aubs', to='aub.Status'),
-        ),
-    ]
diff --git a/schoolapps/aub/migrations/0007_merge_20190426_1620.py b/schoolapps/aub/migrations/0007_merge_20190426_1620.py
deleted file mode 100644
index bb9ad1f46..000000000
--- a/schoolapps/aub/migrations/0007_merge_20190426_1620.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Generated by Django 2.1.5 on 2019-04-26 14:20
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('aub', '0003_auto_20181223_0905'),
-        ('aub', '0006_auto_20181219_1107'),
-    ]
-
-    operations = [
-    ]
diff --git a/schoolapps/aub/migrations/0008_auto_20190426_1654.py b/schoolapps/aub/migrations/0008_auto_20190426_1654.py
deleted file mode 100644
index ca3dab694..000000000
--- a/schoolapps/aub/migrations/0008_auto_20190426_1654.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# Generated by Django 2.1.5 on 2019-04-26 14:54
-
-import datetime
-from django.conf import settings
-from django.db import migrations, models
-import django.utils.timezone
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('aub', '0007_merge_20190426_1620'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='aub',
-            options={'permissions': (('apply_for_aub', 'Apply for a AUB'), ('cancel_aub', 'Cancel a AUB'), ('allow1_aub', 'First permission'), ('allow2_aub', 'Second permission'), ('check1_aub', 'Check a AUB'), ('check2_aub', 'Check a AUB'), ('view_archive', 'View AUB archive')), 'verbose_name': 'AUB', 'verbose_name_plural': 'AUBs'},
-        ),
-        migrations.AlterField(
-            model_name='aub',
-            name='created_at',
-            field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='Erstellungszeitpunkt'),
-        ),
-        migrations.AlterField(
-            model_name='aub',
-            name='created_by',
-            field=models.ForeignKey(default=1, on_delete=models.SET(1), related_name='aubs', to=settings.AUTH_USER_MODEL, verbose_name='Erstellt von'),
-        ),
-        migrations.AlterField(
-            model_name='aub',
-            name='from_date',
-            field=models.DateField(default=datetime.date.today, verbose_name='Startdatum'),
-        ),
-        migrations.AlterField(
-            model_name='aub',
-            name='from_time',
-            field=models.TimeField(default=django.utils.timezone.now, verbose_name='Startzeit'),
-        ),
-        migrations.AlterField(
-            model_name='aub',
-            name='status',
-            field=models.IntegerField(choices=[(0, 'In Bearbeitung 1'), (1, 'In Bearbeitung 2'), (2, 'Genehmigt'), (3, 'Abgelehnt')], default=0, verbose_name='Status'),
-        ),
-        migrations.AlterField(
-            model_name='aub',
-            name='to_date',
-            field=models.DateField(default=datetime.date.today, verbose_name='Enddatum'),
-        ),
-        migrations.AlterField(
-            model_name='aub',
-            name='to_time',
-            field=models.TimeField(default=django.utils.timezone.now, verbose_name='Endzeit'),
-        ),
-        migrations.DeleteModel(
-            name='Status',
-        ),
-    ]
diff --git a/schoolapps/aub/models.py b/schoolapps/aub/models.py
index ce8b64259..6b1ef6807 100755
--- a/schoolapps/aub/models.py
+++ b/schoolapps/aub/models.py
@@ -4,12 +4,12 @@ from django.contrib.auth.models import User
 from datetime import date
 
 
-def get_default_user():
-    user, created = User.objects.get_or_create(username='nouser')
-    return user.id
+# def get_default_user():
+#     user, created = User.objects.get_or_create(username='nouser')
+#     return user.id
 
 
-class Status():
+class Status:
     def __init__(self, name, style_class):
         self.name = name
         self.style_class = style_class
@@ -24,7 +24,7 @@ status_list = [
     Status(name='Genehmigt', style_class='green'),
     Status(name='Abgelehnt', style_class='red'),
 ]
-print("status_list[0].name  :", status_list[0].name)
+# print("status_list[0].name  :", status_list[0].name)
 status_choices = [(x, val.name) for x, val in enumerate(status_list)]
 
 
@@ -40,8 +40,8 @@ class Aub(models.Model):
     status = models.IntegerField(default=0, choices=status_choices, verbose_name="Status")
 
     # Meta
-    created_by = models.ForeignKey(User, related_name='aubs', on_delete=models.SET(get_default_user()),
-                                   default=get_default_user(), verbose_name="Erstellt von")
+    created_by = models.ForeignKey(User, related_name='aubs', on_delete=models.SET_NULL
+                                   , verbose_name="Erstellt von", blank=True, null=True)
     created_at = models.DateTimeField(default=timezone.now, verbose_name="Erstellungszeitpunkt")
 
     def getStatus(self):
diff --git a/schoolapps/dashboard/migrations/0001_initial.py b/schoolapps/dashboard/migrations/0001_initial.py
index 9fe6a8f8b..b98c580d6 100644
--- a/schoolapps/dashboard/migrations/0001_initial.py
+++ b/schoolapps/dashboard/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 2.1.2 on 2018-10-27 16:55
+# Generated by Django 2.2.1 on 2019-05-29 15:06
 
 from django.conf import settings
 from django.db import migrations, models
@@ -16,26 +16,27 @@ class Migration(migrations.Migration):
 
     operations = [
         migrations.CreateModel(
-            name='Activity',
+            name='Notification',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('title', models.CharField(max_length=200)),
                 ('description', models.TextField(max_length=500)),
+                ('link', models.URLField(blank=True)),
                 ('app', models.CharField(max_length=100)),
                 ('created_at', models.DateTimeField(default=django.utils.timezone.now)),
-                ('user', models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notifications',
+                                           to=settings.AUTH_USER_MODEL)),
             ],
         ),
         migrations.CreateModel(
-            name='Notification',
+            name='Activity',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('title', models.CharField(max_length=200)),
                 ('description', models.TextField(max_length=500)),
-                ('link', models.URLField(blank=True)),
                 ('app', models.CharField(max_length=100)),
                 ('created_at', models.DateTimeField(default=django.utils.timezone.now)),
-                ('user', models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='notifications', to=settings.AUTH_USER_MODEL)),
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
             ],
         ),
     ]
diff --git a/schoolapps/dashboard/models.py b/schoolapps/dashboard/models.py
index d1d465126..218eb4e43 100755
--- a/schoolapps/dashboard/models.py
+++ b/schoolapps/dashboard/models.py
@@ -6,14 +6,14 @@ from django.utils import timezone
 from mailer import send_mail_with_template
 
 
-def get_default_user():
-    User.objects.get_or_create(username='nouser')
+# def get_default_user():
+#     User.objects.get_or_create(username='nouser')
 
 
 # Create your models here.
 
 class Activity(models.Model):
-    user = models.ForeignKey(to=User, on_delete=models.CASCADE, default=get_default_user())
+    user = models.ForeignKey(to=User, on_delete=models.CASCADE)
 
     title = models.CharField(max_length=200)
     description = models.TextField(max_length=500)
@@ -28,7 +28,7 @@ class Activity(models.Model):
 
 class Notification(models.Model):
     # to = models.ManyToManyField(User, related_name='notifications')
-    user = models.ForeignKey(to=User, on_delete=models.CASCADE, default=get_default_user(), related_name="notifications")
+    user = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name="notifications")
     title = models.CharField(max_length=200)
     description = models.TextField(max_length=500)
     link = models.URLField(blank=True)
diff --git a/schoolapps/doc/__init__.py b/schoolapps/doc/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/schoolapps/doc/admin.py b/schoolapps/doc/admin.py
deleted file mode 100644
index 8c38f3f3d..000000000
--- a/schoolapps/doc/admin.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.contrib import admin
-
-# Register your models here.
diff --git a/schoolapps/doc/apps.py b/schoolapps/doc/apps.py
deleted file mode 100644
index 1c79f22e3..000000000
--- a/schoolapps/doc/apps.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.apps import AppConfig
-
-
-class DocConfig(AppConfig):
-    name = 'doc'
diff --git a/schoolapps/doc/migrations/0002_auto_20190106_0905.py b/schoolapps/doc/migrations/0002_auto_20190106_0905.py
deleted file mode 100644
index b1cae3196..000000000
--- a/schoolapps/doc/migrations/0002_auto_20190106_0905.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 2.1.2 on 2019-01-06 08:05
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('doc', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='subject',
-            name='abbreviation',
-            field=models.CharField(max_length=5),
-        ),
-    ]
diff --git a/schoolapps/doc/migrations/0003_auto_20190108_1626.py b/schoolapps/doc/migrations/0003_auto_20190108_1626.py
deleted file mode 100644
index 89de0be62..000000000
--- a/schoolapps/doc/migrations/0003_auto_20190108_1626.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 2.1.2 on 2019-01-08 15:26
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('doc', '0002_auto_20190106_0905'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='subject',
-            name='abbreviation',
-            field=models.CharField(max_length=5, unique=True),
-        ),
-    ]
diff --git a/schoolapps/doc/migrations/__init__.py b/schoolapps/doc/migrations/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/schoolapps/doc/models.py b/schoolapps/doc/models.py
deleted file mode 100644
index a7e425d40..000000000
--- a/schoolapps/doc/models.py
+++ /dev/null
@@ -1,54 +0,0 @@
-from django.db import models
-
-# Create your models here.
-class Teacher(models.Model):
-    abbreviation = models.CharField(max_length=5, primary_key=True, unique=True)
-    firstname = models.CharField(max_length=20)
-    lastname = models.CharField(max_length=40)
-
-
-class Certificate(models.Model):
-    teacher = models.ForeignKey(to=Teacher.abbreviation, on_delete=models.CASCADE)
-    subject = models.ForeignKey(to=Subject.abbreviation, on_delete=models.CASCADE)
-
-
-class WorkingTime(models.Model):
-    teacher = models.ForeignKey(to=Teacher.abbreviation)
-    term = models.ForeignKey('Term', on_delete=models.CASCADE)
-    debit = models.DecimalField(max_digits=5, decimal_places=1)
-    
-
-
-class Subject(models.Model):
-    abbreviation = models.CharField(max_length=5, primary_key=True, unique=True)
-    name = models.CharField(max_length=30)
-
-
-class SubjectTitle(models.Model):
-    subject_title = models.CharField(max_length=6, primary_key=True, unique=True)
-    abbreviation = models.ForeignKey(to=Subject.abbreviation, on_delete=models.CASCADE)
-
-
-class Course(models.Model):
-    grade = models.CharField(max_length=6)
-    group = models.CharField(max_length=6)
-    subject_title = models.ForeignKey(to=SubjectTitle.subject_title, on_delete=models.CASCADE)
-    teacher = models.ForeignKey(to=Teacher.abbreviation, on_delete=models.CASCADE)
-
-
-class NoLessons(models.Model):
-    day = models.DateField()
-    reason = models.CharField(max_length=50)
-
-
-class Schoolyear(models.Model):
-    begin = models.DateField()
-    end = models.DateField()
-
-
-class Term(models.Model):
-    begin = models.DateField()
-    end = models.DateField()
-
-
-
diff --git a/schoolapps/doc/tests.py b/schoolapps/doc/tests.py
deleted file mode 100644
index 7ce503c2d..000000000
--- a/schoolapps/doc/tests.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.test import TestCase
-
-# Create your tests here.
diff --git a/schoolapps/doc/views.py b/schoolapps/doc/views.py
deleted file mode 100644
index 91ea44a21..000000000
--- a/schoolapps/doc/views.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.shortcuts import render
-
-# Create your views here.
diff --git a/schoolapps/faq/migrations/0001_initial.py b/schoolapps/faq/migrations/0001_initial.py
index f399d43ad..8f23b0f83 100644
--- a/schoolapps/faq/migrations/0001_initial.py
+++ b/schoolapps/faq/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 2.1.5 on 2019-04-29 10:58
+# Generated by Django 2.2.1 on 2019-05-29 15:05
 
 from django.conf import settings
 from django.db import migrations, models
@@ -14,25 +14,14 @@ class Migration(migrations.Migration):
     ]
 
     operations = [
-        migrations.CreateModel(
-            name='FAQAnswer',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('answer_text', models.CharField(max_length=1000)),
-            ],
-            options={
-                'verbose_name': 'FAQ-Antwort',
-                'verbose_name_plural': 'FAQ-Antworten',
-            },
-        ),
         migrations.CreateModel(
             name='FAQQuestion',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('question_text', models.CharField(max_length=200)),
-                ('icon', models.CharField(max_length=20)),
-                ('answered', models.BooleanField(default=False, verbose_name='Beantwortet')),
-                ('answer', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='faq.FAQAnswer')),
+                ('question_text', models.TextField()),
+                ('icon', models.CharField(blank=True, default='question_answer', max_length=20)),
+                ('show', models.BooleanField(default=False, verbose_name='Veröffentlicht')),
+                ('answer_text', models.TextField(blank=True)),
             ],
             options={
                 'verbose_name': 'FAQ-Frage',
@@ -43,7 +32,7 @@ class Migration(migrations.Migration):
             name='Question',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('question_text', models.CharField(max_length=200)),
+                ('question_text', models.TextField()),
                 ('pub_date', models.DateTimeField(verbose_name='date published')),
                 ('answered', models.BooleanField(default=False, verbose_name='Beantwortet')),
                 ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
diff --git a/schoolapps/faq/migrations/0002_auto_20190429_1329.py b/schoolapps/faq/migrations/0002_auto_20190429_1329.py
deleted file mode 100644
index b0975ee6e..000000000
--- a/schoolapps/faq/migrations/0002_auto_20190429_1329.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 2.1.5 on 2019-04-29 11:29
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('faq', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='faqquestion',
-            name='icon',
-            field=models.CharField(blank=True, default='question_answer', max_length=20),
-        ),
-    ]
diff --git a/schoolapps/faq/migrations/0003_auto_20190429_1338.py b/schoolapps/faq/migrations/0003_auto_20190429_1338.py
deleted file mode 100644
index ee0b13532..000000000
--- a/schoolapps/faq/migrations/0003_auto_20190429_1338.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Generated by Django 2.1.5 on 2019-04-29 11:38
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('faq', '0002_auto_20190429_1329'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='faqquestion',
-            name='question_text',
-            field=models.TextField(),
-        ),
-        migrations.AlterField(
-            model_name='question',
-            name='question_text',
-            field=models.TextField(),
-        ),
-    ]
diff --git a/schoolapps/faq/migrations/0004_auto_20190429_1339.py b/schoolapps/faq/migrations/0004_auto_20190429_1339.py
deleted file mode 100644
index 8e578ab06..000000000
--- a/schoolapps/faq/migrations/0004_auto_20190429_1339.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 2.1.5 on 2019-04-29 11:39
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('faq', '0003_auto_20190429_1338'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='faqanswer',
-            name='answer_text',
-            field=models.TextField(),
-        ),
-    ]
diff --git a/schoolapps/faq/migrations/0005_auto_20190429_2121.py b/schoolapps/faq/migrations/0005_auto_20190429_2121.py
deleted file mode 100644
index c9d466fae..000000000
--- a/schoolapps/faq/migrations/0005_auto_20190429_2121.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# Generated by Django 2.1.5 on 2019-04-29 19:21
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('faq', '0004_auto_20190429_1339'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='faqquestion',
-            name='answer',
-        ),
-        migrations.AddField(
-            model_name='faqquestion',
-            name='answer_text',
-            field=models.TextField(blank=True),
-        ),
-        migrations.DeleteModel(
-            name='FAQAnswer',
-        ),
-    ]
diff --git a/schoolapps/faq/migrations/0006_auto_20190501_1406.py b/schoolapps/faq/migrations/0006_auto_20190501_1406.py
deleted file mode 100644
index 568a818df..000000000
--- a/schoolapps/faq/migrations/0006_auto_20190501_1406.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Generated by Django 2.2 on 2019-05-01 12:06
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('faq', '0005_auto_20190429_2121'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='faqquestion',
-            name='answered',
-        ),
-        migrations.AddField(
-            model_name='faqquestion',
-            name='show',
-            field=models.BooleanField(default=False, verbose_name='Veröffentlicht'),
-        ),
-    ]
diff --git a/schoolapps/menu/migrations/0001_initial.py b/schoolapps/menu/migrations/0001_initial.py
index ba1c3a0c1..e1433af66 100644
--- a/schoolapps/menu/migrations/0001_initial.py
+++ b/schoolapps/menu/migrations/0001_initial.py
@@ -1,9 +1,11 @@
-# Generated by Django 2.0.7 on 2018-11-28 16:14
+# Generated by Django 2.2.1 on 2019-05-29 15:05
 
 from django.db import migrations, models
+import helper
 
 
 class Migration(migrations.Migration):
+
     initial = True
 
     dependencies = [
@@ -11,12 +13,17 @@ class Migration(migrations.Migration):
 
     operations = [
         migrations.CreateModel(
-            name='MealPlan',
+            name='Menu',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('calendar_week', models.IntegerField()),
-                ('year', models.IntegerField()),
-                ('pdf', models.FileField(upload_to='mealplan/%Y/')),
+                ('calendar_week', models.IntegerField(verbose_name='KW')),
+                ('year', models.IntegerField(verbose_name='Jahr')),
+                ('pdf', models.FileField(upload_to=helper.path_and_rename, verbose_name='PDF')),
             ],
+            options={
+                'verbose_name': 'Speiseplan',
+                'verbose_name_plural': 'Speisepläne',
+                'unique_together': {('calendar_week', 'year')},
+            },
         ),
     ]
diff --git a/schoolapps/menu/migrations/0002_auto_20181129_1743.py b/schoolapps/menu/migrations/0002_auto_20181129_1743.py
deleted file mode 100644
index f1a9d77ca..000000000
--- a/schoolapps/menu/migrations/0002_auto_20181129_1743.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Generated by Django 2.0.7 on 2018-11-29 16:43
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ('menu', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='mealplan',
-            name='pdf',
-            field=models.FileField(upload_to='menus/'),
-        ),
-    ]
diff --git a/schoolapps/menu/migrations/0003_auto_20181129_1747.py b/schoolapps/menu/migrations/0003_auto_20181129_1747.py
deleted file mode 100644
index 4976b2af8..000000000
--- a/schoolapps/menu/migrations/0003_auto_20181129_1747.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 2.0.7 on 2018-11-29 16:47
-
-from django.db import migrations, models
-import helper
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ('menu', '0002_auto_20181129_1743'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='mealplan',
-            name='pdf',
-            field=models.FileField(upload_to=helper.path_and_rename),
-        ),
-    ]
diff --git a/schoolapps/menu/migrations/0004_auto_20181211_1648.py b/schoolapps/menu/migrations/0004_auto_20181211_1648.py
deleted file mode 100644
index 1dd555897..000000000
--- a/schoolapps/menu/migrations/0004_auto_20181211_1648.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Generated by Django 2.0.7 on 2018-12-11 15:48
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ('menu', '0003_auto_20181129_1747'),
-    ]
-
-    operations = [
-        migrations.AlterUniqueTogether(
-            name='mealplan',
-            unique_together={('calendar_week', 'year')},
-        ),
-    ]
diff --git a/schoolapps/menu/migrations/0005_auto_20181211_1743.py b/schoolapps/menu/migrations/0005_auto_20181211_1743.py
deleted file mode 100644
index 0947f0d80..000000000
--- a/schoolapps/menu/migrations/0005_auto_20181211_1743.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Generated by Django 2.0.7 on 2018-12-11 16:43
-
-from django.db import migrations, models
-import helper
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ('menu', '0004_auto_20181211_1648'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Menu',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('calendar_week', models.IntegerField(verbose_name='KW')),
-                ('year', models.IntegerField(verbose_name='Jahr')),
-                ('pdf', models.FileField(upload_to=helper.path_and_rename, verbose_name='PDF')),
-            ],
-            options={
-                'verbose_name': 'Speiseplan',
-                'verbose_name_plural': 'Speisepläne',
-            },
-        ),
-        migrations.DeleteModel(
-            name='MealPlan',
-        ),
-        migrations.AlterUniqueTogether(
-            name='menu',
-            unique_together={('calendar_week', 'year')},
-        ),
-    ]
diff --git a/schoolapps/support/migrations/0001_initial.py b/schoolapps/support/migrations/0001_initial.py
index a4552536d..1bd02efd7 100644
--- a/schoolapps/support/migrations/0001_initial.py
+++ b/schoolapps/support/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 2.1.5 on 2019-01-20 15:39
+# Generated by Django 2.2.1 on 2019-05-29 15:05
 
 from django.db import migrations, models
 
diff --git a/schoolapps/support/migrations/0002_auto_20190120_1640.py b/schoolapps/support/migrations/0002_auto_20190120_1640.py
deleted file mode 100644
index 703fc14c1..000000000
--- a/schoolapps/support/migrations/0002_auto_20190120_1640.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Generated by Django 2.1.5 on 2019-01-20 15:40
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ('support', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='support',
-            options={'permissions': (('use_rebus', 'Can use REBUS'), ('send_feedback', 'Can send feedback'),
-                                     ('can_edit_support_settings', 'Can edit support settings'))},
-        ),
-    ]
diff --git a/schoolapps/support/migrations/0003_auto_20190120_1642.py b/schoolapps/support/migrations/0003_auto_20190120_1642.py
deleted file mode 100644
index a78f349d4..000000000
--- a/schoolapps/support/migrations/0003_auto_20190120_1642.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Generated by Django 2.1.5 on 2019-01-20 15:42
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ('support', '0002_auto_20190120_1640'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='support',
-            options={'permissions': (('use_rebus', 'Can use REBUS'), ('send_feedback', 'Can send feedback'))},
-        ),
-    ]
diff --git a/schoolapps/timetable/failback_view.py b/schoolapps/timetable/failback_view.py
new file mode 100644
index 000000000..c1a4ac139
--- /dev/null
+++ b/schoolapps/timetable/failback_view.py
@@ -0,0 +1,7 @@
+from django.contrib.auth.decorators import login_required
+from django.shortcuts import render
+
+
+@login_required
+def failback(request, *args, **kwargs):
+    return render(request, "timetable/failback.html")
diff --git a/schoolapps/timetable/pdf.py b/schoolapps/timetable/pdf.py
index 52f8cb879..d4d39a1ae 100644
--- a/schoolapps/timetable/pdf.py
+++ b/schoolapps/timetable/pdf.py
@@ -7,7 +7,7 @@ from django.utils import formats
 from schoolapps.settings import BASE_DIR
 
 # LaTeX constants
-from untisconnect.sub import get_header_information
+# from untisconnect.sub import get_header_information
 
 DIR = os.path.join(BASE_DIR, "static", "common", "logo.png")
 TEX_HEADER_1 = """\\documentclass[11pt]{article}
diff --git a/schoolapps/timetable/templates/timetable/failback.html b/schoolapps/timetable/templates/timetable/failback.html
new file mode 100755
index 000000000..b68dbeed2
--- /dev/null
+++ b/schoolapps/timetable/templates/timetable/failback.html
@@ -0,0 +1,8 @@
+{% include 'partials/header.html' %}
+
+<main>
+    <h3>Die Stundenpläne sind aktuell noch nicht einsehbar.</h3>
+
+</main>
+
+{% include 'partials/footer.html' %}
diff --git a/schoolapps/timetable/urls.py b/schoolapps/timetable/urls.py
index 61eb454ca..aac4d06f0 100755
--- a/schoolapps/timetable/urls.py
+++ b/schoolapps/timetable/urls.py
@@ -1,17 +1,39 @@
 from django.urls import path
-from . import views
+from untisconnect.models import Terms
 
-urlpatterns = [
-    path('', views.all, name='timetable_admin_all'),
-    path('my', views.my_plan, name='timetable_my_plan'),
-    path('my/<int:year>/<int:month>/<int:day>/', views.my_plan, name='timetable_my_plan'),
-    path('quick/', views.quicklaunch, name='timetable_quicklaunch'),
-    # plan_type = ["teacher", "class", "room"]
-    path('<str:plan_type>/<int:plan_id>', views.plan, name='timetable_smart_plan'),
-    path('<str:plan_type>/<int:plan_id>/<str:regular>', views.plan, name='timetable_regular_plan'),
-    path('<str:plan_type>/<int:plan_id>/<int:year>/<int:calendar_week>', views.plan,
-         name='timetable_smart_plan_week'),
-    path('substitutions/', views.substitutions, name='timetable_substitutions'),
-    path('substitutions/<int:year>/<int:month>/<int:day>/', views.substitutions, name='timetable_substitutions_date'),
-    path('class.pdf', views.sub_pdf, name="timetable_substitutions_pdf")
-]
+try:
+    from . import views
+
+    urlpatterns = [
+        path('', views.all, name='timetable_admin_all'),
+        path('my', views.my_plan, name='timetable_my_plan'),
+        path('my/<int:year>/<int:month>/<int:day>/', views.my_plan, name='timetable_my_plan'),
+        path('quick/', views.quicklaunch, name='timetable_quicklaunch'),
+        # plan_type = ["teacher", "class", "room"]
+        path('<str:plan_type>/<int:plan_id>', views.plan, name='timetable_smart_plan'),
+        path('<str:plan_type>/<int:plan_id>/<str:regular>', views.plan, name='timetable_regular_plan'),
+        path('<str:plan_type>/<int:plan_id>/<int:year>/<int:calendar_week>', views.plan,
+             name='timetable_smart_plan_week'),
+        path('substitutions/', views.substitutions, name='timetable_substitutions'),
+        path('substitutions/<int:year>/<int:month>/<int:day>/', views.substitutions,
+             name='timetable_substitutions_date'),
+        path('class.pdf', views.sub_pdf, name="timetable_substitutions_pdf")
+    ]
+
+except Terms.DoesNotExist:
+    from . import failback_view
+
+    urlpatterns = [
+        path('', failback_view.failback, name='timetable_admin_all'),
+        path('my', failback_view.failback, name='timetable_my_plan'),
+        path('my/<int:year>/<int:month>/<int:day>/', failback_view.failback, name='timetable_my_plan'),
+        path('quick/', failback_view.failback, name='timetable_quicklaunch'),
+        path('<str:plan_type>/<int:plan_id>', failback_view.failback, name='timetable_smart_plan'),
+        path('<str:plan_type>/<int:plan_id>/<str:regular>', failback_view.failback, name='timetable_regular_plan'),
+        path('<str:plan_type>/<int:plan_id>/<int:year>/<int:calendar_week>', failback_view.failback,
+             name='timetable_smart_plan_week'),
+        path('substitutions/', failback_view.failback, name='timetable_substitutions'),
+        path('substitutions/<int:year>/<int:month>/<int:day>/', failback_view.failback,
+             name='timetable_substitutions_date'),
+        path('class.pdf', failback_view.failback, name="timetable_substitutions_pdf")
+    ]
-- 
GitLab