diff --git a/aleksis/apps/chronos/managers.py b/aleksis/apps/chronos/managers.py index ba620386bfcb59d31049ff4b5c7a2d89f7f01fd2..d26c4cbbc89fd4a1abd2b361e1380702f3bd30f5 100644 --- a/aleksis/apps/chronos/managers.py +++ b/aleksis/apps/chronos/managers.py @@ -12,6 +12,7 @@ from calendarweek import CalendarWeek from polymorphic.managers import PolymorphicQuerySet from aleksis.apps.chronos.util.date import week_weekday_from_date, week_weekday_to_date +from aleksis.apps.cursus.models import Course from aleksis.core.managers import ( AlekSISBaseManagerWithoutMigrations, DateRangeQuerySetMixin, @@ -888,6 +889,12 @@ class LessonEventQuerySet(PolymorphicQuerySet): ) return self.filter(Q(rooms=room) | Q(pk__in=amended)).distinct() + def for_course(self, course: Union[int, Course]): + amended = self.filter(Q(amended_by__isnull=False) & (Q(course=course))).values_list( + "amended_by__pk", flat=True + ) + return self.filter(Q(course=course) | Q(pk__in=amended)).distinct() + def for_person(self, person: Union[int, Person]): amended = self.filter( Q(amended_by__isnull=False) & (Q(teachers=person) | Q(groups__members=person)) @@ -908,3 +915,9 @@ class LessonEventQuerySet(PolymorphicQuerySet): & Q(amends__isnull=True) & Q(amended_by__isnull=True) ) + + def not_amended(self): + return self.filter(amended_by__isnull=True) + + def not_amending(self): + return self.filter(amends__isnull=True) diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index c501552c2ce8a450500af60c85ba8d5ece857aa1..720da54ca3da9eca357d31b4e1b131a235118461 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -1544,10 +1544,18 @@ class LessonEvent(CalendarEvent): obj_id = int(params.get("id", 0)) type_ = params.get("type", None) prefetch_absences = params.get("prefetch_absences", False) + not_amended = params.get("not_amended", False) + not_amending = params.get("not_amending", False) if prefetch_absences: objs = objs.prefetch_related("teachers__kolego_absences") + if not_amended: + objs = objs.not_amended() + + if not_amending: + objs = objs.not_amending() + if type_ and obj_id: if type_ == "TEACHER": return objs.for_teacher(obj_id) @@ -1555,6 +1563,8 @@ class LessonEvent(CalendarEvent): return objs.for_group(obj_id) elif type_ == "ROOM": return objs.for_room(obj_id) + elif type_ == "COURSE": + return objs.for_course(obj_id) return objs.for_person(request.user.person) @classmethod diff --git a/aleksis/apps/chronos/schema/__init__.py b/aleksis/apps/chronos/schema/__init__.py index c2a3e6fd4d33b2ee7298edeb7a6fa9e948f84016..9fb03afece38926a9c1653bb6d094535803f4fb8 100644 --- a/aleksis/apps/chronos/schema/__init__.py +++ b/aleksis/apps/chronos/schema/__init__.py @@ -173,6 +173,17 @@ class TimetableObjectType(graphene.ObjectType): return f"{root.type.value}-{root.id}" +class LessonEventType(DjangoObjectType): + class Meta: + model = LessonEvent + fields = ( + "id", + ) + filter_fields = { + "id": ["exact", "lte", "gte"], + } + + class Query(graphene.ObjectType): timetable_teachers = graphene.List(TimetablePersonType) timetable_groups = graphene.List(TimetableGroupType) diff --git a/aleksis/apps/chronos/templates/chronos/lesson_event_description.txt b/aleksis/apps/chronos/templates/chronos/lesson_event_description.txt index 573c92354535f0f4a5ed029e9efab63bc71c3639..0b9a2edc8f0e32ccdb6bc9c4181bfbbff35a26eb 100644 --- a/aleksis/apps/chronos/templates/chronos/lesson_event_description.txt +++ b/aleksis/apps/chronos/templates/chronos/lesson_event_description.txt @@ -3,4 +3,4 @@ {% trans "Teachers" %}: {{ event.teacher_names_with_amends|default:"–" }} {% trans "Rooms" %}: {{ event.room_names_with_amends|default:"–" }}{% if event.comment %} -{{ event.comment }}{% endif %} \ No newline at end of file +{{ event.comment }}{% endif %} diff --git a/aleksis/apps/chronos/templates/chronos/supervision_event_description.txt b/aleksis/apps/chronos/templates/chronos/supervision_event_description.txt index d2f311f240e5cf527033bc08de15869085dc0ee5..dee2e549c16c765884c47a28d3aa5db311be6dee 100644 --- a/aleksis/apps/chronos/templates/chronos/supervision_event_description.txt +++ b/aleksis/apps/chronos/templates/chronos/supervision_event_description.txt @@ -1,2 +1,2 @@ {% load i18n %}{% trans "Teachers" %}: {{ event.teacher_names }} -{% trans "Areas" %}: {{ event.room_names }} \ No newline at end of file +{% trans "Areas" %}: {{ event.room_names }}