diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index ea9f02bcf5266b7d5ff651094fe5a770c3620b82..f2172e9c78cf02662c121f73d12c3babc8e04a7e 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -1404,6 +1404,16 @@ class LessonEvent(CalendarEvent): null=True, ) + cancelled = models.BooleanField( + default=False, + verbose_name=_("Cancelled"), + ) + + comment = models.TextField( + verbose_name=_("Comment"), + blank=True, + ) + @property def all_members(self: "LessonEvent") -> list[Person]: return list(itertools.chain(*[list(g.members.all()) for g in self.groups.all()])) @@ -1463,15 +1473,25 @@ class LessonEvent(CalendarEvent): """Get the location of the event.""" return ", ".join([r.name for r in reference_object.rooms.all()]) + @classmethod + def value_status(cls, reference_object: "LessonEvent") -> str: + """Get the status of the event.""" + if reference_object.cancelled: + return "CANCELLED" + return "CONFIRMED" + @classmethod def get_objects(cls, request) -> Iterable: """Return all objects that should be included in the calendar.""" - return ( - super() - .get_objects(request) - .filter(Q(teachers=request.user.person) | Q(groups__members=request.user.person)) - .distinct() - ) + objs = super().get_objects(request) + amended = objs.filter( + Q(teachers=request.user.person) | Q(groups__members=request.user.person) + ).values_list("amended_by__pk", flat=True) + return objs.filter( + Q(teachers=request.user.person) + | Q(groups__members=request.user.person) + | Q(pk__in=amended) + ).distinct() class Meta: verbose_name = _("Lesson Event")