Newer
Older
type_ = person.timetable_type
if type_ == "teacher":
# Teacher
return self.filter_teacher(person)
elif type_ == "group":
# Student
return self.filter_participant(person)
else:
# If no student or teacher
return None
class EventQuerySet(DateRangeQuerySet, TimetableQuerySet):
pass
label_ = "event"
objects = models.Manager.from_queryset(EventQuerySet)()
title = models.CharField(verbose_name=_("Title"), max_length=255, blank=True, null=True)
date_start = models.DateField(verbose_name=_("Effective start date of event"), null=True)
date_end = models.DateField(verbose_name=_("Effective end date of event"), null=True)
period_from = models.ForeignKey("TimePeriod", on_delete=models.CASCADE, verbose_name=_("Effective start period of event"), related_name="+")
period_to = models.ForeignKey("TimePeriod", on_delete=models.CASCADE, verbose_name=_("Effective end period of event"), related_name="+")
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"))
def __str__(self):
if self.title:
return self.title
else:
return _("Event {}".format(self.pk))
indexes = [models.Index(fields=["period_from", "period_to", "date_start", "date_end"])]
class ExtraLessonQuerySet(TimetableQuerySet):
_multiple_rooms = False
def within_dates(self, start: date, end: date):
week_start = CalendarWeek.from_date(start)
week_end = CalendarWeek.from_date(end)
return self.filter(
week__gte=week_start.week,
week__lte=week_end.week,
period__weekday__gte=start.weekday(),
period__weekday__lte=end.weekday(),
)
def on_day(self, day:date):
objects = models.Manager.from_queryset(ExtraLessonQuerySet)()
week = models.IntegerField(verbose_name=_("Week"), default=CalendarWeek.current_week)
period = models.ForeignKey("TimePeriod", models.CASCADE, related_name="extra_lessons")
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("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"))
comment = models.CharField(verbose_name=_("Comment"), blank=True, null=True, max_length=255)
def __str__(self):
return "{}, {}, {}".format(self.week, self.period, self.subject)
class Meta:
verbose_name = _("Extra lesson")
verbose_name_plural = _("Extra lessons")