Skip to content
Snippets Groups Projects
model_extensions.py 2.5 KiB
Newer Older
from django.utils.translation import gettext_lazy as _
from jsonstore import BooleanField

Tom Teichler's avatar
Tom Teichler committed
from aleksis.core.models import Announcement, Group, Person
from .managers import TimetableType
from .models import Lesson, LessonPeriod, Subject
Jonathan Weth's avatar
Jonathan Weth committed
@Person.property_
Tom Teichler's avatar
Tom Teichler committed
    """Check if the user has lessons as a teacher."""
    return self.lesson_periods_as_teacher.exists()
Jonathan Weth's avatar
Jonathan Weth committed
@Person.property_
def timetable_type(self) -> Optional[TimetableType]:
Tom Teichler's avatar
Tom Teichler committed
    """Return which type of timetable this user has."""
        return TimetableType.TEACHER
        return TimetableType.GROUP
Jonathan Weth's avatar
Jonathan Weth committed
@Person.property_
def timetable_object(self) -> Optional[Union[Group, Person]]:
Tom Teichler's avatar
Tom Teichler committed
    """Return the object which has the user's timetable."""
    if type_ == TimetableType.TEACHER:
    elif type_ == TimetableType.GROUP:
Jonathan Weth's avatar
Jonathan Weth committed
@Person.property_
    """Return a `QuerySet` containing all `Lesson`s this person participates in (as student).
    .. note:: Only available when AlekSIS-App-Chronos is installed.

    :Date: 2019-11-07
    :Authors:
        - Dominik George <dominik.george@teckids.org>
    """
Nik | Klampfradler's avatar
Nik | Klampfradler committed
    return Lesson.objects.filter(groups__members=self)
Jonathan Weth's avatar
Jonathan Weth committed
@Person.property_
def lesson_periods_as_participant(self):
    """Return a `QuerySet` containing all `LessonPeriod`s this person participates in (as student).
    .. note:: Only available when AlekSIS-App-Chronos is installed.

    :Date: 2019-11-07
    :Authors:
        - Dominik George <dominik.george@teckids.org>
    """
    return LessonPeriod.objects.filter(lesson__groups__members=self)


Jonathan Weth's avatar
Jonathan Weth committed
@Person.property_
def lesson_periods_as_teacher(self):
    """Return a `QuerySet` containing all `Lesson`s this person gives (as teacher).
    .. note:: Only available when AlekSIS-App-Chronos is installed.

    :Date: 2019-11-07
    :Authors:
        - Dominik George <dominik.george@teckids.org>
    """
    return LessonPeriod.objects.filter(lesson__teachers=self)
Jonathan Weth's avatar
Jonathan Weth committed
    """Return all announcements that should be shown in timetable views."""
    return cls.objects.filter(show_in_timetables=True)


Announcement.class_method(for_timetables)
Tom Teichler's avatar
Tom Teichler committed
Announcement.field(
Tom Teichler's avatar
Tom Teichler committed
    show_in_timetables=BooleanField(verbose_name=_("Show announcement in timetable views?"))
Tom Teichler's avatar
Tom Teichler committed
)

Group.foreign_key("subject", Subject, related_name="groups")