Skip to content
Snippets Groups Projects
Verified Commit 9ee4be88 authored by Tom Teichler's avatar Tom Teichler :beers:
Browse files

[Reformat] black

parent 87ebea45
No related branches found
No related tags found
No related merge requests found
......@@ -24,6 +24,4 @@ class LessonSubstitutionForm(forms.ModelForm):
}
AnnouncementForm.add_node_to_layout(
Fieldset(_("Options for timetables"), "show_in_timetables")
)
AnnouncementForm.add_node_to_layout(Fieldset(_("Options for timetables"), "show_in_timetables"))
......@@ -116,10 +116,8 @@ class LessonDataQuerySet(models.QuerySet, WeekQuerySetMixin):
""" Filter for all lessons within a calendar week. """
return self.within_dates(
wanted_week[0]
+ timedelta(days=1) * (F(self._period_path + "period__weekday") - 1),
wanted_week[0]
+ timedelta(days=1) * (F(self._period_path + "period__weekday") - 1),
wanted_week[0] + timedelta(days=1) * (F(self._period_path + "period__weekday") - 1),
wanted_week[0] + timedelta(days=1) * (F(self._period_path + "period__weekday") - 1),
).annotate_week(wanted_week)
def on_day(self, day: date):
......@@ -154,9 +152,7 @@ class LessonDataQuerySet(models.QuerySet, WeekQuerySetMixin):
return self.filter(
Q(**{self._period_path + "lesson__groups__members": person})
| Q(
**{self._period_path + "lesson__groups__parent_groups__members": person}
)
| Q(**{self._period_path + "lesson__groups__parent_groups__members": person})
)
def filter_group(self, group: Union[Group, int]):
......@@ -179,10 +175,7 @@ class LessonDataQuerySet(models.QuerySet, WeekQuerySetMixin):
qs1 = self.filter(**{self._period_path + "lesson__teachers": teacher})
qs2 = self.filter(
**{
self._subst_path + "teachers": teacher,
self._subst_path + "week": F("_week"),
}
**{self._subst_path + "teachers": teacher, self._subst_path + "week": F("_week"),}
)
return qs1.union(qs2)
......@@ -197,9 +190,7 @@ class LessonDataQuerySet(models.QuerySet, WeekQuerySetMixin):
return qs1.union(qs2)
def filter_from_type(
self, type_: TimetableType, pk: int
) -> Optional[models.QuerySet]:
def filter_from_type(self, type_: TimetableType, pk: int) -> Optional[models.QuerySet]:
"""Filter lesson data for a group, teacher or room by provided type."""
if type_ == TimetableType.GROUP:
......@@ -242,9 +233,7 @@ class LessonDataQuerySet(models.QuerySet, WeekQuerySetMixin):
return lesson_periods
def next(
self, reference: "LessonPeriod", offset: Optional[int] = 1
) -> "LessonPeriod":
def next(self, reference: "LessonPeriod", offset: Optional[int] = 1) -> "LessonPeriod":
""" Get another lesson in an ordered set of lessons.
By default, it returns the next lesson in the set. By passing the offset argument,
......@@ -287,8 +276,7 @@ class LessonSubstitutionQuerySet(LessonDataQuerySet):
""" Return all teachers which are affected by selected substitutions (as substituted or substituting) """
return Person.objects.filter(
Q(lessons_as_teacher__in=self.affected_lessons())
| Q(lesson_substitutions__in=self)
Q(lessons_as_teacher__in=self.affected_lessons()) | Q(lesson_substitutions__in=self)
).annotate(lessons_count=Count("lessons_as_teacher"))
def affected_groups(self):
......@@ -334,19 +322,13 @@ class AbsenceQuerySet(DateRangeQuerySet):
"""QuerySet with custom query methods for absences."""
def absent_teachers(self):
return Person.objects.filter(absences__in=self).annotate(
absences_count=Count("absences")
)
return Person.objects.filter(absences__in=self).annotate(absences_count=Count("absences"))
def absent_groups(self):
return Group.objects.filter(absences__in=self).annotate(
absences_count=Count("absences")
)
return Group.objects.filter(absences__in=self).annotate(absences_count=Count("absences"))
def absent_rooms(self):
return Person.objects.filter(absences__in=self).annotate(
absences_count=Count("absences")
)
return Person.objects.filter(absences__in=self).annotate(absences_count=Count("absences"))
class HolidayQuerySet(DateRangeQuerySet):
......@@ -426,9 +408,7 @@ class TimetableQuerySet(models.QuerySet):
else:
return self.filter(room=room)
def filter_from_type(
self, type_: TimetableType, pk: int
) -> Optional[models.QuerySet]:
def filter_from_type(self, type_: TimetableType, pk: int) -> Optional[models.QuerySet]:
"""Filter data for a group, teacher or room by provided type."""
if type_ == TimetableType.GROUP:
......
......@@ -94,7 +94,5 @@ def for_timetables(cls):
Announcement.class_method(for_timetables)
Announcement.field(
show_in_timetables=BooleanField(
verbose_name=_("Show announcement in timetable views?")
)
show_in_timetables=BooleanField(verbose_name=_("Show announcement in timetable views?"))
)
......@@ -43,9 +43,7 @@ class TimePeriod(ExtensibleModel):
WEEKDAY_CHOICES = list(enumerate(i18n_day_names_lazy()))
WEEKDAY_CHOICES_SHORT = list(enumerate(i18n_day_abbrs_lazy()))
weekday = models.PositiveSmallIntegerField(
verbose_name=_("Week day"), choices=WEEKDAY_CHOICES
)
weekday = models.PositiveSmallIntegerField(verbose_name=_("Week day"), choices=WEEKDAY_CHOICES)
period = models.PositiveSmallIntegerField(verbose_name=_("Number of period"))
time_start = models.TimeField(verbose_name=_("Start time"))
......@@ -120,15 +118,11 @@ class TimePeriod(ExtensibleModel):
@classproperty
def period_min(cls) -> int:
return cls.objects.aggregate(period__min=Coalesce(Min("period"), 1)).get(
"period__min"
)
return cls.objects.aggregate(period__min=Coalesce(Min("period"), 1)).get("period__min")
@classproperty
def period_max(cls) -> int:
return cls.objects.aggregate(period__max=Coalesce(Max("period"), 7)).get(
"period__max"
)
return cls.objects.aggregate(period__max=Coalesce(Max("period"), 7)).get("period__max")
@classproperty
def time_min(cls) -> Optional[time]:
......@@ -140,15 +134,11 @@ class TimePeriod(ExtensibleModel):
@classproperty
def weekday_min(cls) -> int:
return cls.objects.aggregate(weekday__min=Coalesce(Min("weekday"), 0)).get(
"weekday__min"
)
return cls.objects.aggregate(weekday__min=Coalesce(Min("weekday"), 0)).get("weekday__min")
@classproperty
def weekday_max(cls) -> int:
return cls.objects.aggregate(weekday__max=Coalesce(Max("weekday"), 6)).get(
"weekday__max"
)
return cls.objects.aggregate(weekday__max=Coalesce(Max("weekday"), 6)).get("weekday__max")
class Meta:
unique_together = [["weekday", "period"]]
......@@ -159,9 +149,7 @@ class TimePeriod(ExtensibleModel):
class Subject(ExtensibleModel):
short_name = models.CharField(
verbose_name=_("Short name"), max_length=255, unique=True
)
short_name = models.CharField(verbose_name=_("Short name"), max_length=255, unique=True)
name = models.CharField(verbose_name=_("Long name"), max_length=255, unique=True)
colour_fg = ColorField(verbose_name=_("Foreground colour"), blank=True)
......@@ -177,9 +165,7 @@ class Subject(ExtensibleModel):
class Room(ExtensibleModel):
short_name = models.CharField(
verbose_name=_("Short name"), max_length=255, unique=True
)
short_name = models.CharField(verbose_name=_("Short name"), max_length=255, unique=True)
name = models.CharField(verbose_name=_("Long name"), max_length=255)
def __str__(self) -> str:
......@@ -193,23 +179,15 @@ class Room(ExtensibleModel):
class Lesson(ExtensibleModel, GroupPropertiesMixin, TeacherPropertiesMixin):
subject = models.ForeignKey(
"Subject",
on_delete=models.CASCADE,
related_name="lessons",
verbose_name=_("Subject"),
"Subject", on_delete=models.CASCADE, related_name="lessons", verbose_name=_("Subject"),
)
teachers = models.ManyToManyField(
"core.Person", related_name="lessons_as_teacher", verbose_name=_("Teachers")
)
periods = models.ManyToManyField(
"TimePeriod",
related_name="lessons",
through="LessonPeriod",
verbose_name=_("Periods"),
)
groups = models.ManyToManyField(
"core.Group", related_name="lessons", verbose_name=_("Groups")
"TimePeriod", related_name="lessons", through="LessonPeriod", verbose_name=_("Periods"),
)
groups = models.ManyToManyField("core.Group", related_name="lessons", verbose_name=_("Groups"))
date_start = models.DateField(verbose_name=_("Start date"), null=True)
date_end = models.DateField(verbose_name=_("End date"), null=True)
......@@ -234,9 +212,7 @@ class Lesson(ExtensibleModel, GroupPropertiesMixin, TeacherPropertiesMixin):
class LessonSubstitution(ExtensibleModel):
objects = LessonSubstitutionManager.from_queryset(LessonSubstitutionQuerySet)()
week = models.IntegerField(
verbose_name=_("Week"), default=CalendarWeek.current_week
)
week = models.IntegerField(verbose_name=_("Week"), default=CalendarWeek.current_week)
lesson_period = models.ForeignKey(
"LessonPeriod", models.CASCADE, "substitutions", verbose_name=_("Lesson period")
......@@ -251,14 +227,9 @@ class LessonSubstitution(ExtensibleModel):
verbose_name=_("Subject"),
)
teachers = models.ManyToManyField(
"core.Person",
related_name="lesson_substitutions",
blank=True,
verbose_name=_("Teachers"),
)
room = models.ForeignKey(
"Room", models.CASCADE, null=True, blank=True, verbose_name=_("Room")
"core.Person", related_name="lesson_substitutions", blank=True, verbose_name=_("Teachers"),
)
room = models.ForeignKey("Room", models.CASCADE, null=True, blank=True, verbose_name=_("Room"))
cancelled = models.BooleanField(default=False, verbose_name=_("Cancelled?"))
cancelled_for_teachers = models.BooleanField(
......@@ -269,9 +240,7 @@ class LessonSubstitution(ExtensibleModel):
def clean(self) -> None:
if self.subject and self.cancelled:
raise ValidationError(
_("Lessons can only be either substituted or cancelled.")
)
raise ValidationError(_("Lessons can only be either substituted or cancelled."))
@property
def date(self):
......@@ -305,24 +274,14 @@ class LessonPeriod(ExtensibleModel):
objects = LessonPeriodManager.from_queryset(LessonPeriodQuerySet)()
lesson = models.ForeignKey(
"Lesson",
models.CASCADE,
related_name="lesson_periods",
verbose_name=_("Lesson"),
"Lesson", models.CASCADE, related_name="lesson_periods", verbose_name=_("Lesson"),
)
period = models.ForeignKey(
"TimePeriod",
models.CASCADE,
related_name="lesson_periods",
verbose_name=_("Time period"),
"TimePeriod", models.CASCADE, related_name="lesson_periods", verbose_name=_("Time period"),
)
room = models.ForeignKey(
"Room",
models.CASCADE,
null=True,
related_name="lesson_periods",
verbose_name=_("Room"),
"Room", models.CASCADE, null=True, related_name="lesson_periods", verbose_name=_("Room"),
)
def get_substitution(self, week: Optional[int] = None) -> LessonSubstitution:
......@@ -383,9 +342,7 @@ class TimetableWidget(DashboardWidget):
request = get_request()
context = {"has_plan": True}
wanted_day = TimePeriod.get_next_relevant_day(
timezone.now().date(), datetime.now().time()
)
wanted_day = TimePeriod.get_next_relevant_day(timezone.now().date(), datetime.now().time())
if has_person(request.user):
person = request.user.person
......@@ -419,9 +376,7 @@ class TimetableWidget(DashboardWidget):
class AbsenceReason(ExtensibleModel):
short_name = models.CharField(verbose_name=_("Short name"), max_length=255)
name = models.CharField(
verbose_name=_("Name"), blank=True, null=True, max_length=255
)
name = models.CharField(verbose_name=_("Name"), blank=True, null=True, max_length=255)
def __str__(self):
if self.name:
......@@ -508,10 +463,7 @@ class Absence(ExtensibleModel):
class Exam(ExtensibleModel):
lesson = models.ForeignKey(
"Lesson",
on_delete=models.CASCADE,
related_name="exams",
verbose_name=_("Lesson"),
"Lesson", on_delete=models.CASCADE, related_name="exams", verbose_name=_("Lesson"),
)
date = models.DateField(verbose_name=_("Date of exam"), null=True)
......@@ -616,27 +568,15 @@ class Break(ExtensibleModel):
@property
def weekday(self):
return (
self.after_period.weekday
if self.after_period
else self.before_period.weekday
)
return self.after_period.weekday if self.after_period else self.before_period.weekday
@property
def after_period_number(self):
return (
self.after_period.period
if self.after_period
else self.before_period.period - 1
)
return self.after_period.period if self.after_period else self.before_period.period - 1
@property
def before_period_number(self):
return (
self.before_period.period
if self.before_period
else self.after_period.period + 1
)
return self.before_period.period if self.before_period else self.after_period.period + 1
@property
def time_start(self):
......@@ -677,15 +617,10 @@ class Supervision(ExtensibleModel):
Break, models.CASCADE, verbose_name=_("Break"), related_name="supervisions"
)
teacher = models.ForeignKey(
"core.Person",
models.CASCADE,
related_name="supervisions",
verbose_name=_("Teacher"),
"core.Person", models.CASCADE, related_name="supervisions", verbose_name=_("Teacher"),
)
def get_substitution(
self, week: Optional[int] = None
) -> Optional[SupervisionSubstitution]:
def get_substitution(self, week: Optional[int] = None) -> Optional[SupervisionSubstitution]:
wanted_week = week or getattr(self, "_week", None) or CalendarWeek().week
wanted_week = CalendarWeek(week=wanted_week)
# We iterate over all substitutions because this can make use of
......@@ -713,10 +648,7 @@ class Supervision(ExtensibleModel):
class SupervisionSubstitution(ExtensibleModel):
date = models.DateField(verbose_name=_("Date"))
supervision = models.ForeignKey(
Supervision,
models.CASCADE,
verbose_name=_("Supervision"),
related_name="substitutions",
Supervision, models.CASCADE, verbose_name=_("Supervision"), related_name="substitutions",
)
teacher = models.ForeignKey(
"core.Person",
......@@ -743,9 +675,7 @@ class Event(ExtensibleModel, GroupPropertiesMixin, TeacherPropertiesMixin):
objects = models.Manager.from_queryset(EventQuerySet)()
title = models.CharField(
verbose_name=_("Title"), max_length=255, blank=True, null=True
)
title = models.CharField(verbose_name=_("Title"), max_length=255, blank=True, null=True)
date_start = models.DateField(verbose_name=_("Start date"), null=True)
date_end = models.DateField(verbose_name=_("End date"), null=True)
......@@ -757,18 +687,11 @@ class Event(ExtensibleModel, GroupPropertiesMixin, TeacherPropertiesMixin):
related_name="+",
)
period_to = models.ForeignKey(
"TimePeriod",
on_delete=models.CASCADE,
verbose_name=_("End time period"),
related_name="+",
"TimePeriod", on_delete=models.CASCADE, verbose_name=_("End time period"), related_name="+",
)
groups = models.ManyToManyField(
"core.Group", related_name="events", verbose_name=_("Groups")
)
rooms = models.ManyToManyField(
"Room", related_name="events", verbose_name=_("Rooms")
)
groups = models.ManyToManyField("core.Group", related_name="events", verbose_name=_("Groups"))
rooms = models.ManyToManyField("Room", related_name="events", verbose_name=_("Rooms"))
teachers = models.ManyToManyField(
"core.Person", related_name="events", verbose_name=_("Teachers")
)
......@@ -797,9 +720,7 @@ class Event(ExtensibleModel, GroupPropertiesMixin, TeacherPropertiesMixin):
class Meta:
ordering = ["date_start"]
indexes = [
models.Index(fields=["period_from", "period_to", "date_start", "date_end"])
]
indexes = [models.Index(fields=["period_from", "period_to", "date_start", "date_end"])]
verbose_name = _("Event")
verbose_name_plural = _("Events")
......@@ -809,14 +730,9 @@ class ExtraLesson(ExtensibleModel, GroupPropertiesMixin):
objects = models.Manager.from_queryset(ExtraLessonQuerySet)()
week = models.IntegerField(
verbose_name=_("Week"), default=CalendarWeek.current_week
)
week = models.IntegerField(verbose_name=_("Week"), default=CalendarWeek.current_week)
period = models.ForeignKey(
"TimePeriod",
models.CASCADE,
related_name="extra_lessons",
verbose_name=_("Time period"),
"TimePeriod", models.CASCADE, related_name="extra_lessons", verbose_name=_("Time period"),
)
subject = models.ForeignKey(
......@@ -829,21 +745,13 @@ class ExtraLesson(ExtensibleModel, GroupPropertiesMixin):
"core.Group", related_name="extra_lessons", verbose_name=_("Groups")
)
teachers = models.ManyToManyField(
"core.Person",
related_name="extra_lessons_as_teacher",
verbose_name=_("Teachers"),
"core.Person", related_name="extra_lessons_as_teacher", verbose_name=_("Teachers"),
)
room = models.ForeignKey(
"Room",
models.CASCADE,
null=True,
related_name="extra_lessons",
verbose_name=_("Room"),
"Room", models.CASCADE, null=True, related_name="extra_lessons", verbose_name=_("Room"),
)
comment = models.CharField(
verbose_name=_("Comment"), blank=True, null=True, max_length=255
)
comment = models.CharField(verbose_name=_("Comment"), blank=True, null=True, max_length=255)
def __str__(self):
return f"{self.week}, {self.period}, {self.subject}"
......
......@@ -30,9 +30,7 @@ class ShortenGroups(BooleanPreference):
name = "shorten_groups"
default = True
verbose_name = _("Shorten groups in timetable views")
help_text = _(
"If there are more groups than the set limit, they will be collapsed."
)
help_text = _("If there are more groups than the set limit, they will be collapsed.")
@site_preferences_registry.register
......
......@@ -10,9 +10,7 @@ from .models import LessonSubstitution
from .util.predicates import has_timetable_perm
# View timetable overview
view_timetable_overview_predicate = has_person & has_global_perm(
"chronos.view_timetable_overview"
)
view_timetable_overview_predicate = has_person & has_global_perm("chronos.view_timetable_overview")
add_perm("chronos.view_timetable_overview", view_timetable_overview_predicate)
# View my timetable
......
......@@ -31,12 +31,8 @@ class LessonsTable(tables.Table):
row_attrs = {"class": _css_class_from_lesson_state}
period__period = tables.Column(accessor="period__period")
lesson__groups = tables.Column(
accessor="lesson__group_names", verbose_name=_("Groups")
)
lesson__teachers = tables.Column(
accessor="lesson__teacher_names", verbose_name=_("Teachers")
)
lesson__groups = tables.Column(accessor="lesson__group_names", verbose_name=_("Groups"))
lesson__teachers = tables.Column(accessor="lesson__teacher_names", verbose_name=_("Teachers"))
lesson__subject = tables.Column(accessor="lesson__subject")
room = tables.Column(accessor="room")
edit_substitution = tables.LinkColumn(
......
......@@ -17,15 +17,11 @@ urlpatterns = [
name="timetable_by_week",
),
path(
"timetable/<str:type_>/<int:pk>/<str:regular>/",
views.timetable,
name="timetable_regular",
"timetable/<str:type_>/<int:pk>/<str:regular>/", views.timetable, name="timetable_regular",
),
path("lessons/", views.lessons_day, name="lessons_day"),
path(
"lessons/<int:year>/<int:month>/<int:day>/",
views.lessons_day,
name="lessons_day_by_date",
"lessons/<int:year>/<int:month>/<int:day>/", views.lessons_day, name="lessons_day_by_date",
),
path(
"lessons/<int:id_>/<int:week>/substition/",
......@@ -39,10 +35,7 @@ urlpatterns = [
),
path("substitutions/", views.substitutions, name="substitutions"),
path(
"substitutions/print/",
views.substitutions,
{"is_print": True},
name="substitutions_print",
"substitutions/print/", views.substitutions, {"is_print": True}, name="substitutions_print",
),
path(
"substitutions/<int:year>/<int:month>/<int:day>/",
......
......@@ -21,9 +21,7 @@ ExtraLesson = apps.get_model("chronos", "ExtraLesson")
def build_timetable(
type_: Union[TimetableType, str],
obj: Union[int, Person],
date_ref: Union[CalendarWeek, date],
type_: Union[TimetableType, str], obj: Union[int, Person], date_ref: Union[CalendarWeek, date],
):
needed_breaks = []
......@@ -50,9 +48,7 @@ def build_timetable(
if is_person:
lesson_periods = LessonPeriod.objects.daily_lessons_for_person(obj, date_ref)
else:
lesson_periods = LessonPeriod.objects.in_week(date_ref).filter_from_type(
type_, obj
)
lesson_periods = LessonPeriod.objects.in_week(date_ref).filter_from_type(type_, obj)
# Sort lesson periods in a dict
lesson_periods_per_period = lesson_periods.group_by_periods(is_person=is_person)
......@@ -61,9 +57,7 @@ def build_timetable(
if is_person:
extra_lessons = ExtraLesson.objects.on_day(date_ref).filter_from_person(obj)
else:
extra_lessons = ExtraLesson.objects.filter(week=date_ref.week).filter_from_type(
type_, obj
)
extra_lessons = ExtraLesson.objects.filter(week=date_ref.week).filter_from_type(type_, obj)
# Sort lesson periods in a dict
extra_lessons_per_period = extra_lessons.group_by_periods(is_person=is_person)
......@@ -130,9 +124,7 @@ def build_timetable(
week = CalendarWeek.from_date(date_ref)
else:
week = date_ref
supervisions = (
Supervision.objects.all().annotate_week(week).filter_by_teacher(obj)
)
supervisions = Supervision.objects.all().annotate_week(week).filter_by_teacher(obj)
if is_person:
supervisions.filter_by_weekday(date_ref.weekday())
......@@ -146,10 +138,7 @@ def build_timetable(
if period_after_break not in needed_breaks:
needed_breaks.append(period_after_break)
if (
not is_person
and period_after_break not in supervisions_per_period_after
):
if not is_person and period_after_break not in supervisions_per_period_after:
supervisions_per_period_after[period_after_break] = {}
if is_person:
......@@ -175,9 +164,7 @@ def build_timetable(
if not is_person:
cols = []
for weekday in range(
TimePeriod.weekday_min, TimePeriod.weekday_max + 1
):
for weekday in range(TimePeriod.weekday_min, TimePeriod.weekday_max + 1):
col = None
if (
period in supervisions_per_period_after
......@@ -206,32 +193,21 @@ def build_timetable(
if not is_person:
cols = []
for weekday in range(
TimePeriod.weekday_min, TimePeriod.weekday_max + 1
):
for weekday in range(TimePeriod.weekday_min, TimePeriod.weekday_max + 1):
col = []
# Add lesson periods
if (
period in lesson_periods_per_period
and weekday not in holidays_per_weekday
):
if period in lesson_periods_per_period and weekday not in holidays_per_weekday:
if weekday in lesson_periods_per_period[period]:
col += lesson_periods_per_period[period][weekday]
# Add extra lessons
if (
period in extra_lessons_per_period
and weekday not in holidays_per_weekday
):
if period in extra_lessons_per_period and weekday not in holidays_per_weekday:
if weekday in extra_lessons_per_period[period]:
col += extra_lessons_per_period[period][weekday]
# Add events
if (
period in events_per_period
and weekday not in holidays_per_weekday
):
if period in events_per_period and weekday not in holidays_per_weekday:
if weekday in events_per_period[period]:
col += events_per_period[period][weekday]
......@@ -328,9 +304,7 @@ def build_substitutions_list(wanted_day: date) -> List[dict]:
return rows
def build_weekdays(
base: List[Tuple[int, str]], wanted_week: CalendarWeek
) -> List[dict]:
def build_weekdays(base: List[Tuple[int, str]], wanted_week: CalendarWeek) -> List[dict]:
holidays_per_weekday = Holiday.in_week(wanted_week)
weekdays = []
......@@ -340,9 +314,7 @@ def build_weekdays(
"key": key,
"name": name,
"date": wanted_week[key],
"holiday": holidays_per_weekday[key]
if key in holidays_per_weekday
else None,
"holiday": holidays_per_weekday[key] if key in holidays_per_weekday else None,
}
weekdays.append(weekday)
......
......@@ -29,19 +29,16 @@ def all_timetables(request: HttpRequest) -> HttpResponse:
"""View all timetables for persons, groups and rooms."""
context = {}
teachers = Person.objects.annotate(
lessons_count=Count("lessons_as_teacher")
).filter(lessons_count__gt=0)
teachers = Person.objects.annotate(lessons_count=Count("lessons_as_teacher")).filter(
lessons_count__gt=0
)
groups = Group.objects.annotate(
lessons_count=Count("lessons"),
child_lessons_count=Count("child_groups__lessons"),
lessons_count=Count("lessons"), child_lessons_count=Count("child_groups__lessons"),
)
classes = groups.filter(lessons_count__gt=0, parent_groups=None) | groups.filter(
child_lessons_count__gt=0, parent_groups=None
)
rooms = Room.objects.annotate(lessons_count=Count("lesson_periods")).filter(
lessons_count__gt=0
)
rooms = Room.objects.annotate(lessons_count=Count("lesson_periods")).filter(lessons_count__gt=0)
context["teachers"] = teachers
context["classes"] = classes
......@@ -64,9 +61,7 @@ def my_timetable(
wanted_day = timezone.datetime(year=year, month=month, day=day).date()
wanted_day = TimePeriod.get_next_relevant_day(wanted_day)
else:
wanted_day = TimePeriod.get_next_relevant_day(
timezone.now().date(), datetime.now().time()
)
wanted_day = TimePeriod.get_next_relevant_day(timezone.now().date(), datetime.now().time())
if has_person(request.user):
person = request.user.person
......@@ -155,9 +150,7 @@ def timetable(
# Build lists with weekdays and corresponding dates (long and short variant)
context["weekdays"] = build_weekdays(TimePeriod.WEEKDAY_CHOICES, wanted_week)
context["weekdays_short"] = build_weekdays(
TimePeriod.WEEKDAY_CHOICES_SHORT, wanted_week
)
context["weekdays_short"] = build_weekdays(TimePeriod.WEEKDAY_CHOICES_SHORT, wanted_week)
context["weeks"] = get_weeks_for_year(year=wanted_week.year)
context["week"] = wanted_week
......@@ -204,9 +197,7 @@ def lessons_day(
wanted_day = timezone.datetime(year=year, month=month, day=day).date()
wanted_day = TimePeriod.get_next_relevant_day(wanted_day)
else:
wanted_day = TimePeriod.get_next_relevant_day(
timezone.now().date(), datetime.now().time()
)
wanted_day = TimePeriod.get_next_relevant_day(timezone.now().date(), datetime.now().time())
# Get lessons
lesson_periods = LessonPeriod.objects.on_day(wanted_day)
......@@ -269,9 +260,7 @@ def edit_substitution(request: HttpRequest, id_: int, week: int) -> HttpResponse
messages.success(request, _("The substitution has been saved."))
date = wanted_week[lesson_period.period.weekday]
return redirect(
"lessons_day_by_date", year=date.year, month=date.month, day=date.day
)
return redirect("lessons_day_by_date", year=date.year, month=date.month, day=date.day)
context["edit_substitution_form"] = edit_substitution_form
......@@ -292,9 +281,7 @@ def delete_substitution(request: HttpRequest, id_: int, week: int) -> HttpRespon
messages.success(request, _("The substitution has been deleted."))
date = wanted_week[lesson_period.period.weekday]
return redirect(
"lessons_day_by_date", year=date.year, month=date.month, day=date.day
)
return redirect("lessons_day_by_date", year=date.year, month=date.month, day=date.day)
@permission_required("chronos.view_substitutions")
......@@ -312,9 +299,7 @@ def substitutions(
wanted_day = timezone.datetime(year=year, month=month, day=day).date()
wanted_day = TimePeriod.get_next_relevant_day(wanted_day)
else:
wanted_day = TimePeriod.get_next_relevant_day(
timezone.now().date(), datetime.now().time()
)
wanted_day = TimePeriod.get_next_relevant_day(timezone.now().date(), datetime.now().time())
day_number = get_site_preferences()["chronos__substitutions_print_number_of_days"]
day_contexts = {}
......
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