diff --git a/aleksis/apps/chronos/admin.py b/aleksis/apps/chronos/admin.py index 8c99c4b5c23d10f027fae74e34da80ecfa6ea8a6..f2fefcd458f610f8cfd265e5b1ed6af8ffae1d6d 100644 --- a/aleksis/apps/chronos/admin.py +++ b/aleksis/apps/chronos/admin.py @@ -4,22 +4,22 @@ from django.contrib import admin from django.utils.html import format_html from .models import ( - TimetableWidget, - Lesson, - LessonSubstitution, - SupervisionSubstitution, - LessonPeriod, Absence, + AbsenceReason, + Break, Event, + ExtraLesson, Holiday, - Supervision, + Lesson, + LessonPeriod, + LessonSubstitution, + Room, Subject, + Supervision, SupervisionArea, - Room, - AbsenceReason, - Break, + SupervisionSubstitution, TimePeriod, - ExtraLesson, + TimetableWidget, ) from .util.format import format_date_period, format_m2m diff --git a/aleksis/apps/chronos/forms.py b/aleksis/apps/chronos/forms.py index ab31b103aeccfd231787f82bae36f80eb8586191..3233cf8915326860c3d5370915c5ae37bd059a08 100644 --- a/aleksis/apps/chronos/forms.py +++ b/aleksis/apps/chronos/forms.py @@ -1,11 +1,13 @@ from django import forms -from django_select2.forms import ModelSelect2MultipleWidget from django.utils.translation import gettext_lazy as _ + +from django_select2.forms import ModelSelect2MultipleWidget from material import Fieldset -from .models import LessonSubstitution from aleksis.core.forms import AnnouncementForm +from .models import LessonSubstitution + class LessonSubstitutionForm(forms.ModelForm): """Form to manage substitutions.""" diff --git a/aleksis/apps/chronos/managers.py b/aleksis/apps/chronos/managers.py index d20e622eb7781e9a1601c689fdee4b191144de6c..ae8a1162c0b106fbc23e2a72bd50e71513675ced 100644 --- a/aleksis/apps/chronos/managers.py +++ b/aleksis/apps/chronos/managers.py @@ -1,14 +1,15 @@ -from datetime import date, timedelta, datetime +from datetime import date, datetime, timedelta from enum import Enum -from typing import Union, Optional, OrderedDict +from typing import Optional, OrderedDict, Union -from aleksis.apps.chronos.util.date import week_weekday_from_date -from calendarweek import CalendarWeek from django.db import models -from django.db.models import F, Q, Count +from django.db.models import Count, F, Q from django.http import QueryDict -from aleksis.core.models import Person, Group +from calendarweek import CalendarWeek + +from aleksis.apps.chronos.util.date import week_weekday_from_date +from aleksis.core.models import Group, Person from aleksis.core.util.core_helpers import get_site_preferences diff --git a/aleksis/apps/chronos/migrations/0007_advanced_models_from_untis.py b/aleksis/apps/chronos/migrations/0007_advanced_models_from_untis.py index ccefed73c6c2cb1be14b4aa9acf87f447da97b08..9079ed95da7d99e78ccd1ce49421bc12ae44f0b7 100644 --- a/aleksis/apps/chronos/migrations/0007_advanced_models_from_untis.py +++ b/aleksis/apps/chronos/migrations/0007_advanced_models_from_untis.py @@ -1,9 +1,10 @@ # Generated by Django 3.0.3 on 2020-03-08 20:16 -import colorfield.fields import django.contrib.postgres.fields.jsonb -from django.db import migrations, models import django.db.models.deletion +from django.db import migrations, models + +import colorfield.fields class Migration(migrations.Migration): diff --git a/aleksis/apps/chronos/migrations/0008_break_period.py b/aleksis/apps/chronos/migrations/0008_break_period.py index 971432ab9282bd68a8a4159d8f9306073d5c9ab0..dd8945d199e69acade0965af58402e9cd0da75a8 100644 --- a/aleksis/apps/chronos/migrations/0008_break_period.py +++ b/aleksis/apps/chronos/migrations/0008_break_period.py @@ -1,7 +1,7 @@ # Generated by Django 3.0.4 on 2020-03-28 20:24 -from django.db import migrations, models import django.db.models.deletion +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/aleksis/apps/chronos/migrations/0011_absence_for_groups_and_rooms.py b/aleksis/apps/chronos/migrations/0011_absence_for_groups_and_rooms.py index cf7df94cb62f676c1e25188e086bf9460483dcd3..a4f9d800a596ab4941a05c8cf3876e46d10e9ed3 100644 --- a/aleksis/apps/chronos/migrations/0011_absence_for_groups_and_rooms.py +++ b/aleksis/apps/chronos/migrations/0011_absence_for_groups_and_rooms.py @@ -1,7 +1,7 @@ # Generated by Django 3.0.5 on 2020-04-13 15:07 -from django.db import migrations, models import django.db.models.deletion +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/aleksis/apps/chronos/migrations/0014_extra_lesson.py b/aleksis/apps/chronos/migrations/0014_extra_lesson.py index d3a497d90560ff263a5e15d01e1e25d017432e19..f93bde3995a221f191fe7f416c01110db47da179 100644 --- a/aleksis/apps/chronos/migrations/0014_extra_lesson.py +++ b/aleksis/apps/chronos/migrations/0014_extra_lesson.py @@ -1,9 +1,10 @@ # Generated by Django 3.0.5 on 2020-04-18 20:21 -import calendarweek.calendarweek import django.contrib.postgres.fields.jsonb -from django.db import migrations, models import django.db.models.deletion +from django.db import migrations, models + +import calendarweek.calendarweek class Migration(migrations.Migration): diff --git a/aleksis/apps/chronos/model_extensions.py b/aleksis/apps/chronos/model_extensions.py index b0fec7505563596898b555f014aafa13a88f4768..774f992d3bd7ca133df0ec0c3591a397c31fe9f1 100644 --- a/aleksis/apps/chronos/model_extensions.py +++ b/aleksis/apps/chronos/model_extensions.py @@ -1,9 +1,10 @@ from typing import Optional, Union from django.utils.translation import gettext_lazy as _ + from jsonstore import BooleanField -from aleksis.core.models import Person, Group, Announcement +from aleksis.core.models import Announcement, Group, Person from .managers import TimetableType from .models import Lesson, LessonPeriod diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index 5ac951030d0a6772b87d895dda38b15c97fe9f84..a35a9332f1ae26ef5d8a23265814c1df366cf54f 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -1,21 +1,8 @@ from __future__ import annotations -from datetime import date, datetime, timedelta, time +from datetime import date, datetime, time, timedelta from typing import Dict, Optional, Tuple, Union -from aleksis.apps.chronos.managers import ( - GroupPropertiesMixin, - TeacherPropertiesMixin, - LessonSubstitutionManager, - LessonSubstitutionQuerySet, - LessonPeriodManager, - LessonPeriodQuerySet, - AbsenceQuerySet, - HolidayQuerySet, - SupervisionQuerySet, - EventQuerySet, - ExtraLessonQuerySet, -) from django.core.exceptions import ValidationError from django.db import models from django.db.models import Max, Min, Q @@ -27,16 +14,28 @@ from django.utils.decorators import classproperty from django.utils.formats import date_format from django.utils.translation import gettext_lazy as _ -from calendarweek.django import CalendarWeek, i18n_day_names_lazy, i18n_day_abbrs_lazy +from calendarweek.django import CalendarWeek, i18n_day_abbrs_lazy, i18n_day_names_lazy from colorfield.fields import ColorField from django_global_request.middleware import get_request +from aleksis.apps.chronos.managers import ( + AbsenceQuerySet, + EventQuerySet, + ExtraLessonQuerySet, + GroupPropertiesMixin, + HolidayQuerySet, + LessonPeriodManager, + LessonPeriodQuerySet, + LessonSubstitutionManager, + LessonSubstitutionQuerySet, + SupervisionQuerySet, + TeacherPropertiesMixin, +) +from aleksis.apps.chronos.util.date import week_weekday_from_date from aleksis.apps.chronos.util.format import format_m2m from aleksis.core.mixins import ExtensibleModel -from aleksis.core.models import Group, Person, DashboardWidget - -from aleksis.apps.chronos.util.date import week_weekday_from_date -from aleksis.core.util.core_helpers import has_person, get_site_preferences +from aleksis.core.models import DashboardWidget, Group, Person +from aleksis.core.util.core_helpers import get_site_preferences, has_person class TimePeriod(ExtensibleModel): diff --git a/aleksis/apps/chronos/preferences.py b/aleksis/apps/chronos/preferences.py index f7e610c509ddb536728af14573255f6f4e2206d6..31b1fdb1a521aa8901206b0ed9f1c579a030cef3 100644 --- a/aleksis/apps/chronos/preferences.py +++ b/aleksis/apps/chronos/preferences.py @@ -3,10 +3,7 @@ from django.utils.translation import gettext as _ from dynamic_preferences.preferences import Section from dynamic_preferences.types import BooleanPreference, IntegerPreference -from aleksis.core.registries import ( - site_preferences_registry, - person_preferences_registry, -) +from aleksis.core.registries import person_preferences_registry, site_preferences_registry chronos = Section("chronos", verbose_name=_("Chronos")) diff --git a/aleksis/apps/chronos/rules.py b/aleksis/apps/chronos/rules.py index 6a0edbc8492f8172d0fadcb80564bc93172c2dc5..6feb45b5f6182800d2979f86ea52909e9d51963e 100644 --- a/aleksis/apps/chronos/rules.py +++ b/aleksis/apps/chronos/rules.py @@ -1,11 +1,12 @@ from rules import add_perm, always_allow from aleksis.core.util.predicates import ( - has_person, - has_global_perm, has_any_object, + has_global_perm, has_object_perm, + has_person, ) + from .models import LessonSubstitution from .util.predicates import has_timetable_perm diff --git a/aleksis/apps/chronos/templatetags/week_helpers.py b/aleksis/apps/chronos/templatetags/week_helpers.py index 054d3f9e2c3feac25e5067db9df324124a771f88..acfb3a3a8859cc50c9e250520d9bcb32f3764ebe 100644 --- a/aleksis/apps/chronos/templatetags/week_helpers.py +++ b/aleksis/apps/chronos/templatetags/week_helpers.py @@ -4,11 +4,7 @@ from typing import Optional, Union from django import template from django.db.models.query import QuerySet -from aleksis.apps.chronos.util.date import ( - CalendarWeek, - week_period_to_date, - week_weekday_to_date, -) +from aleksis.apps.chronos.util.date import CalendarWeek, week_period_to_date, week_weekday_to_date register = template.Library() diff --git a/aleksis/apps/chronos/util/build.py b/aleksis/apps/chronos/util/build.py index 0083ec9c0cb1839e18546aafc3591eaf6513e7e3..d816403f06f422a8e4d0a4bc99bcca3ba14d76d1 100644 --- a/aleksis/apps/chronos/util/build.py +++ b/aleksis/apps/chronos/util/build.py @@ -1,11 +1,12 @@ from collections import OrderedDict from datetime import date -from typing import Union, List, Tuple +from typing import List, Tuple, Union -from calendarweek import CalendarWeek from django.apps import apps from django.db.models import QuerySet +from calendarweek import CalendarWeek + from aleksis.apps.chronos.managers import TimetableType from aleksis.core.models import Person diff --git a/aleksis/apps/chronos/util/date.py b/aleksis/apps/chronos/util/date.py index feb63bc8de2f7e3c9ea0dc68a6d4b187b5c80d0b..68bfcd3829f590feb8970aabfc50471408bd9c3a 100644 --- a/aleksis/apps/chronos/util/date.py +++ b/aleksis/apps/chronos/util/date.py @@ -1,11 +1,12 @@ from datetime import date -from typing import Tuple, List, Union +from typing import List, Tuple, Union -from calendarweek import CalendarWeek -from calendarweek.django import i18n_day_names from django.utils import timezone from django.utils.translation import gettext_lazy as _ +from calendarweek import CalendarWeek +from calendarweek.django import i18n_day_names + def week_weekday_from_date(when: date) -> Tuple[CalendarWeek, int]: """Return a tuple of week and weekday from a given date.""" diff --git a/aleksis/apps/chronos/util/js.py b/aleksis/apps/chronos/util/js.py index eb9082b0e46bcb06090ae853561d5c86c159ce56..9449fd2c56b69f3478c0606b145f11b69d75e324 100644 --- a/aleksis/apps/chronos/util/js.py +++ b/aleksis/apps/chronos/util/js.py @@ -1,4 +1,4 @@ -from datetime import datetime, time, date +from datetime import date, datetime, time def date_unix(value: date) -> int: diff --git a/aleksis/apps/chronos/util/predicates.py b/aleksis/apps/chronos/util/predicates.py index 11b5d7411208a84361baf9bab63d97353541392d..c011acbdd31614638fdf2bddc38acc70a43cbf43 100644 --- a/aleksis/apps/chronos/util/predicates.py +++ b/aleksis/apps/chronos/util/predicates.py @@ -3,8 +3,8 @@ from django.db.models import Model from rules import predicate -from aleksis.core.models import Group, Person from aleksis.apps.chronos.models import Room +from aleksis.core.models import Group, Person @predicate diff --git a/aleksis/apps/chronos/views.py b/aleksis/apps/chronos/views.py index cad223822825f866e8cabc9d8a20a81b234f7b50..87621266133799d3e3ffc3580b1076955c3042ec 100644 --- a/aleksis/apps/chronos/views.py +++ b/aleksis/apps/chronos/views.py @@ -9,19 +9,21 @@ from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse from django.utils import timezone from django.utils.translation import ugettext as _ + from django_tables2 import RequestConfig from rules.contrib.views import permission_required -from aleksis.core.models import Person, Group, Announcement +from aleksis.core.models import Announcement, Group, Person from aleksis.core.util import messages +from aleksis.core.util.core_helpers import get_site_preferences, has_person + from .forms import LessonSubstitutionForm from .managers import TimetableType -from .models import LessonPeriod, LessonSubstitution, TimePeriod, Room, Holiday, Absence +from .models import Absence, Holiday, LessonPeriod, LessonSubstitution, Room, TimePeriod from .tables import LessonsTable -from .util.build import build_timetable, build_substitutions_list, build_weekdays -from .util.js import date_unix +from .util.build import build_substitutions_list, build_timetable, build_weekdays from .util.date import CalendarWeek, get_weeks_for_year -from aleksis.core.util.core_helpers import has_person, get_site_preferences +from .util.js import date_unix @permission_required("chronos.view_timetable_overview")