Skip to content
Snippets Groups Projects
models.py 37.1 KiB
Newer Older
            return TimePeriod.from_period(TimePeriod.period_max, day)
            return self.period_to

    @property
    def period_from_on_day(self) -> int:
        """Get start period on the annotated day (as period number).

        If there is no date annotated, it will use the current date.
        """
        return self.raw_period_from_on_day.period

    @property
    def period_to_on_day(self) -> int:
        """Get end period on the annotated day (as period number).

        If there is no date annotated, it will use the current date.
        """
    def get_start_weekday(self, week: CalendarWeek) -> int:
        """Get start date of an event in a specific week."""
        if self.date_start < week[TimePeriod.weekday_min]:
            return TimePeriod.weekday_min
        else:
            return self.date_start.weekday()

    def get_end_weekday(self, week: CalendarWeek) -> int:
        """Get end date of an event in a specific week."""
        if self.date_end > week[TimePeriod.weekday_max]:
            return TimePeriod.weekday_max
            return self.date_end.weekday()

    def annotate_day(self, day: date):
        """Annotate event with the provided date."""
        self._date = day
    def get_groups(self) -> models.query.QuerySet:
        return self.groups

    def get_teachers(self) -> models.query.QuerySet:
Tom Teichler's avatar
Tom Teichler committed
    class Meta:
        # Heads up: Link to period implies uniqueness per site
Tom Teichler's avatar
Tom Teichler committed
        ordering = ["date_start"]
        indexes = [
            models.Index(
                fields=["date_start", "date_end"],
                include=["period_from", "period_to"],
                name="event_date_start_date_end",
            )
        ]
Tom Teichler's avatar
Tom Teichler committed
        verbose_name = _("Event")
Jonathan Weth's avatar
Jonathan Weth committed
        verbose_name_plural = _("Events")
class ExtraLesson(
    GroupPropertiesMixin, TeacherPropertiesMixin, WeekRelatedMixin, SchoolTermRelatedExtensibleModel
):
    label_ = "extra_lesson"

    objects = ExtraLessonManager.from_queryset(ExtraLessonQuerySet)()
Tom Teichler's avatar
Tom Teichler committed
    week = models.IntegerField(verbose_name=_("Week"), default=CalendarWeek.current_week)
    year = models.IntegerField(verbose_name=_("Year"), default=get_current_year)
Tom Teichler's avatar
Tom Teichler committed
    period = models.ForeignKey(
Tom Teichler's avatar
Tom Teichler committed
        "TimePeriod", models.CASCADE, related_name="extra_lessons", verbose_name=_("Time period"),
Tom Teichler's avatar
Tom Teichler committed
    )
Tom Teichler's avatar
Tom Teichler committed
    subject = models.ForeignKey(
        "Subject",
        on_delete=models.CASCADE,
        related_name="extra_lessons",
        verbose_name=_("Subject"),
    )
    groups = models.ManyToManyField(
        "core.Group", related_name="extra_lessons", verbose_name=_("Groups")
    )
    teachers = models.ManyToManyField(
Tom Teichler's avatar
Tom Teichler committed
        "core.Person", related_name="extra_lessons_as_teacher", verbose_name=_("Teachers"),
Tom Teichler's avatar
Tom Teichler committed
    )
    room = models.ForeignKey(
Tom Teichler's avatar
Tom Teichler committed
        "Room", models.CASCADE, null=True, related_name="extra_lessons", verbose_name=_("Room"),
Tom Teichler's avatar
Tom Teichler committed
    )
Tom Teichler's avatar
Tom Teichler committed
    comment = models.CharField(verbose_name=_("Comment"), blank=True, null=True, max_length=255)

    def __str__(self):
        return f"{self.week}, {self.period}, {self.subject}"
    def get_groups(self) -> models.query.QuerySet:
        return self.groups

    def get_teachers(self) -> models.query.QuerySet:
    class Meta:
        # Heads up: Link to period implies uniqueness per site
        verbose_name = _("Extra lesson")
        verbose_name_plural = _("Extra lessons")
        indexes = [models.Index(fields=["week", "year"], name="extra_lesson_week_year")]
Tom Teichler's avatar
Tom Teichler committed
class ChronosGlobalPermissions(GlobalPermissionModel):
    class Meta:
        managed = False
        permissions = (
            ("view_all_room_timetables", _("Can view all room timetables")),
            ("view_all_group_timetables", _("Can view all group timetables")),
            ("view_all_person_timetables", _("Can view all person timetables")),
            ("view_timetable_overview", _("Can view timetable overview")),
            ("view_lessons_day", _("Can view all lessons per day")),
        )