Skip to content
Snippets Groups Projects
Commit 8c8cb592 authored by Hangzhi Yu's avatar Hangzhi Yu
Browse files

Merge branch 'new-model-based-on-calendar' into...

Merge branch 'new-model-based-on-calendar' into 225-introduce-substitution-to-do-list-generated-from-teachers-absences
parents fa84c9d8 750ff75a
No related branches found
No related tags found
1 merge request!329Introduce substitution to do list
Pipeline #170439 failed
......@@ -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)
......@@ -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
......
......@@ -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)
......
......@@ -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 %}
{% load i18n %}{% trans "Teachers" %}: {{ event.teacher_names }}
{% trans "Areas" %}: {{ event.room_names }}
\ No newline at end of file
{% trans "Areas" %}: {{ event.room_names }}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment