diff --git a/.gitignore b/.gitignore index d4282223c22241df28366753b11bca4059fb7ee5..a84d8fd4c8ce065aae6794be7d8f952759a03bee 100755 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ class.pdf class.tex .idea/ media/ -node_modules \ No newline at end of file +node_modules +staticcollect \ No newline at end of file diff --git a/README.md b/README.md index 9b8ad555b20dbe6c2d8e055f08cc1840cebffd74..8ee76aec74553568dbbb44bfeedc3983d3a7bebb 100755 --- a/README.md +++ b/README.md @@ -50,6 +50,7 @@ pip install django-filter pip install django_react_templatetags pip install kanboard pip install PyPDF2 +pip install mator ``` - `example_secure_settings.py` zu `secure_settings.py` kopieren und anpassen diff --git a/schoolapps/aub/migrations/0012_auto_20190410_1416.py b/schoolapps/aub/migrations/0012_auto_20190410_1416.py new file mode 100644 index 0000000000000000000000000000000000000000..20b7ab28c41f45520c530860f39f2b08b4778a95 --- /dev/null +++ b/schoolapps/aub/migrations/0012_auto_20190410_1416.py @@ -0,0 +1,24 @@ +# Generated by Django 2.1.5 on 2019-04-10 12:16 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('aub', '0011_merge_20190318_2004'), + ] + + 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/dashboard/migrations/0003_auto_20190410_1416.py b/schoolapps/dashboard/migrations/0003_auto_20190410_1416.py new file mode 100644 index 0000000000000000000000000000000000000000..31a70937195197551809a7a36ad4ed4c0c9dd44e --- /dev/null +++ b/schoolapps/dashboard/migrations/0003_auto_20190410_1416.py @@ -0,0 +1,27 @@ +# Generated by Django 2.1.5 on 2019-04-10 12:16 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('dashboard', '0002_auto_20190102_1724'), + ] + + operations = [ + migrations.AddField( + model_name='activity', + name='user', + field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='notification', + name='user', + field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, + related_name='notifications', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/schoolapps/schoolapps/settings.py b/schoolapps/schoolapps/settings.py index f96ac682aac6542372deff901714a0a5ff69fcc6..105914410a5d1c951cdd35dafce248918e3ffbcb 100755 --- a/schoolapps/schoolapps/settings.py +++ b/schoolapps/schoolapps/settings.py @@ -55,6 +55,7 @@ INSTALLED_APPS = [ 'django.contrib.staticfiles', 'material', 'django_react_templatetags', + 'martor', ] MIDDLEWARE = [ @@ -148,6 +149,7 @@ USE_TZ = True # https://docs.djangoproject.com/en/2.0/howto/static-files/ STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, "staticcollect") # Redirect to home URL after login (Default redirects to /accounts/profile/) LOGIN_REDIRECT_URL = '/' @@ -229,3 +231,5 @@ logger.setLevel(logging.DEBUG) # Media MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') + +DBSETTINGS_USE_CACHE = False diff --git a/schoolapps/schoolapps/urls.py b/schoolapps/schoolapps/urls.py index 2ca9b41a73e8087898a6012a388d4f7dabeb7f55..b5c7ca47e781edf69fb9e56863b319aac1387a66 100755 --- a/schoolapps/schoolapps/urls.py +++ b/schoolapps/schoolapps/urls.py @@ -69,7 +69,10 @@ urlpatterns = [ # SUPPORT # ########### path('support/', include('support.urls')), - path("pwabuilder-sw.js", serviceworker) + path("pwabuilder-sw.js", serviceworker), + + path('martor/', include('martor.urls')), + ] urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) diff --git a/schoolapps/timetable/admin.py b/schoolapps/timetable/admin.py index 8c38f3f3dad51e4585f3984282c2a4bec5349c1e..967ad9c749908399c2f8df950624439e0c5c20ad 100755 --- a/schoolapps/timetable/admin.py +++ b/schoolapps/timetable/admin.py @@ -1,3 +1,7 @@ from django.contrib import admin # Register your models here. +from timetable.models import Hint, HintClass + +admin.site.register(Hint) +admin.site.register(HintClass) diff --git a/schoolapps/timetable/migrations/0001_initial.py b/schoolapps/timetable/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..d5858985e0d60f1fd3c5e3ac610d112036446054 --- /dev/null +++ b/schoolapps/timetable/migrations/0001_initial.py @@ -0,0 +1,38 @@ +# Generated by Django 2.1.5 on 2019-04-10 12:30 + +import datetime +from django.db import migrations, models +import martor.models + + +class Migration(migrations.Migration): + initial = True + + dependencies = [ + ('untisconnect', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Hint', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('from_date', models.DateField(default=datetime.date.today, verbose_name='Startdatum')), + ('to_date', models.DateField(default=datetime.date.today, verbose_name='Enddatum')), + ('text', martor.models.MartorField(verbose_name='Hinweistext')), + ], + options={ + 'verbose_name': 'Hinweis', + 'verbose_name_plural': 'Hinweise', + }, + ), + migrations.CreateModel( + name='Timetable', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + options={ + 'permissions': (('show_plan', 'Show plan'),), + }, + ), + ] diff --git a/schoolapps/timetable/migrations/0002_hintclass.py b/schoolapps/timetable/migrations/0002_hintclass.py new file mode 100644 index 0000000000000000000000000000000000000000..7f5dd35eaabf06322e7c310ac5e584dfd8d5f090 --- /dev/null +++ b/schoolapps/timetable/migrations/0002_hintclass.py @@ -0,0 +1,19 @@ +# Generated by Django 2.1.5 on 2019-04-10 12:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('timetable', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='HintClass', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('class_id', models.IntegerField()), + ], + ), + ] diff --git a/schoolapps/timetable/migrations/0003_auto_20190410_1634.py b/schoolapps/timetable/migrations/0003_auto_20190410_1634.py new file mode 100644 index 0000000000000000000000000000000000000000..b2111e6ddce35c3b29ac7b64fef787d181c293af --- /dev/null +++ b/schoolapps/timetable/migrations/0003_auto_20190410_1634.py @@ -0,0 +1,27 @@ +# Generated by Django 2.1.5 on 2019-04-10 14:34 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('timetable', '0002_hintclass'), + ] + + operations = [ + migrations.AddField( + model_name='hint', + name='classes', + field=models.ManyToManyField(related_name='hints', to='timetable.HintClass'), + ), + migrations.AlterField( + model_name='hintclass', + name='class_id', + field=models.IntegerField( + choices=[(1, '5a'), (2, '5b'), (3, '5c'), (4, '5d'), (5, '6a'), (6, '6b'), (7, '6c'), (8, '6d'), + (9, '7a'), (10, '7b'), (11, '7c'), (12, '7d'), (13, '8a'), (14, '8b'), (15, '8c'), (16, '8d'), + (17, '9a'), (18, '9b'), (19, '9c'), (20, '9d'), (21, 'Ea'), (22, 'Eb'), (23, 'Ec'), (24, 'Ed'), + (25, 'Q1a'), (26, 'Q1b'), (27, 'Q1c'), (28, 'Q1d'), (29, 'Q2a'), (30, 'Q2b'), (31, 'Q2c'), + (32, 'Q2d')]), + ), + ] diff --git a/schoolapps/timetable/migrations/__init__.py b/schoolapps/timetable/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/schoolapps/timetable/models.py b/schoolapps/timetable/models.py index 6f186228e37d3311f0160f061d3fe7593447742d..e332cc609546f03d997bb349c98ded30d26e837d 100755 --- a/schoolapps/timetable/models.py +++ b/schoolapps/timetable/models.py @@ -1,24 +1,52 @@ -from django import forms -import dbsettings +from datetime import date + from django.db import models +from django.db.models import ManyToManyField +from martor.models import MartorField -from untisconnect.api_helper import get_terms +from untisconnect.api import get_class_by_id, get_all_classes +from untisconnect.models import Class -choices = [] -terms = get_terms() -for term in terms: - choices.append((term.id, term.name)) +classes = get_all_classes() +class_choices = [(x.id, x.name) for x in classes] -class Timetable(models.Model): +class HintClass(models.Model): + class_id = models.IntegerField(choices=class_choices) + + def __str__(self): + try: + _class = get_class_by_id(self.class_id) + return _class.name + except Exception: + return "Unbekannte Klasse" + + +for x in classes: + HintClass.objects.get_or_create(class_id=x.id) + + +class Hint(models.Model): + # Time + from_date = models.DateField(default=date.today, verbose_name="Startdatum") + to_date = models.DateField(default=date.today, verbose_name="Enddatum") + + # Text + text = MartorField(verbose_name="Hinweistext") + + # Relations + classes = ManyToManyField(HintClass, related_name="hints") + class Meta: - permissions = ( - ('show_plan', 'Show plan'), - ) + verbose_name = "Hinweis" + verbose_name_plural = "Hinweise" -class UNTISSettings(dbsettings.Group): - term = dbsettings.IntegerValue(widget=forms.Select, choices=choices) -untis_settings = UNTISSettings() + +class Timetable(models.Model): + class Meta: + permissions = ( + ('show_plan', 'Show plan'), + ) diff --git a/schoolapps/timetable/settings.py b/schoolapps/timetable/settings.py new file mode 100644 index 0000000000000000000000000000000000000000..fc4ffa73a63bb21d84b7870958bd0de7fd9727a6 --- /dev/null +++ b/schoolapps/timetable/settings.py @@ -0,0 +1,16 @@ +import dbsettings +from django import forms + +from untisconnect.api_helper import get_terms + +choices = [] +terms = get_terms() +for term in terms: + choices.append((term.id, term.name)) + + +class UNTISSettings(dbsettings.Group): + term = dbsettings.IntegerValue(widget=forms.Select, choices=choices) + + +untis_settings = UNTISSettings() diff --git a/schoolapps/timetable/views.py b/schoolapps/timetable/views.py index 83b97686a46bb586706963df19f07e6e2603f418..8f5176607aa97fe5ce435a532f9873ca1c67c36c 100755 --- a/schoolapps/timetable/views.py +++ b/schoolapps/timetable/views.py @@ -17,7 +17,7 @@ from userinformation import UserInformation from schoolapps.settings import BASE_DIR - +from .models import Hint def get_all_context(): teachers = get_all_teachers() classes = get_all_classes() diff --git a/schoolapps/untisconnect/api.py b/schoolapps/untisconnect/api.py index 446158d962abb7d56a6dd540aea642035a8e6c97..a840e77f79d18ba9a9dadce7449dfe194621c70a 100755 --- a/schoolapps/untisconnect/api.py +++ b/schoolapps/untisconnect/api.py @@ -2,7 +2,7 @@ from django.conf import settings from untisconnect.api_helper import get_term_by_id, run_using, untis_date_to_date, date_to_untis_date from . import models -from timetable import models as models2 +from timetable.settings import untis_settings def run_all(obj, filter_term=True): @@ -15,7 +15,7 @@ def run_one(obj, filter_term=True): def run_default_filter(obj, filter_term=True): # Get term by settings in db - TERM_ID = models2.untis_settings.term + TERM_ID = untis_settings.term TERM = get_term_by_id(TERM_ID) SCHOOL_ID = TERM.school_id # 705103 SCHOOLYEAR_ID = TERM.schoolyear_id # 20172018