Skip to content
Snippets Groups Projects

Resolve "Adapt to active school term"

Merged magicfelix requested to merge 319-adapt-to-active-school-term into master
4 files
+ 52
45
Compare changes
  • Side-by-side
  • Inline
Files
4
@@ -3,6 +3,7 @@ from datetime import datetime
from django.db.models import BooleanField, ExpressionWrapper, Q
import graphene
import graphene_django_optimizer
from aleksis.apps.chronos.models import LessonEvent
from aleksis.apps.cursus.models import Course
@@ -13,10 +14,15 @@ from aleksis.core.models import Group, Person
from aleksis.core.schema.base import FilterOrderList
from aleksis.core.schema.group import GroupType
from aleksis.core.schema.person import PersonType
from aleksis.core.util.core_helpers import get_active_school_term, get_site_preferences, has_person
from aleksis.core.util.core_helpers import (
filter_active_school_term,
get_active_school_term,
get_site_preferences,
has_person,
)
from ..model_extensions import annotate_person_statistics_for_school_term
from ..models import Documentation, NewPersonalNote, ParticipationStatus
from ..models import Documentation, ExtraMark, NewPersonalNote, ParticipationStatus
from .absences import (
AbsencesForPersonsCreateMutation,
)
@@ -47,7 +53,6 @@ from .statistics import StatisticsByPersonType
class Query(graphene.ObjectType):
documentations = FilterOrderList(DocumentationType)
documentations_by_course_id = FilterOrderList(
DocumentationType, course_id=graphene.ID(required=True)
)
@@ -104,7 +109,7 @@ class Query(graphene.ObjectType):
)
)
)
return documentations
return graphene_django_optimizer.query(documentations, info)
def resolve_documentations_for_coursebook(
root,
@@ -152,6 +157,10 @@ class Query(graphene.ObjectType):
}
)
school_term = get_active_school_term(info.context)
date_start = date_start if date_start > school_term.date_start else school_term.date_start
date_end = date_end if date_end < school_term.date_end else school_term.date_end
events = LessonEvent.get_single_events(
datetime.combine(date_start, datetime.min.time()),
datetime.combine(date_end, datetime.max.time()),
@@ -167,7 +176,6 @@ class Query(graphene.ObjectType):
events,
incomplete,
absences_exist,
info.context,
)
return docs + dummies
@@ -182,8 +190,10 @@ class Query(graphene.ObjectType):
else:
return []
school_term = get_active_school_term(info.context)
return (
Group.objects.for_current_school_term_or_all()
Group.objects.for_school_term(school_term)
.filter(
pk__in=Group.objects.filter(members=person)
.values_list("id", flat=True)
@@ -211,6 +221,9 @@ class Query(graphene.ObjectType):
person = info.context.user.person
else:
return []
school_term = get_active_school_term(info.context)
return Course.objects.filter(
pk__in=(
Course.objects.filter(teachers=person)
@@ -223,20 +236,22 @@ class Query(graphene.ObjectType):
)
)
)
).filter(groups__in=Group.objects.for_current_school_term_or_all())
).filter(groups__in=Group.objects.for_school_term(school_term))
@staticmethod
def resolve_absence_creation_persons(root, info, **kwargs):
if not info.context.user.has_perm("alsijil.register_absence"):
group_types = get_site_preferences()["alsijil__group_types_register_absence"]
school_term = get_active_school_term(info.context)
if group_types:
return Person.objects.filter(
member_of__in=Group.objects.filter(
member_of__in=Group.objects.for_school_term(school_term).filter(
owners=info.context.user.person, group_type__in=group_types
)
)
else:
return Person.objects.filter(member_of__owners=info.context.user.person)
qs = Person.objects.filter(member_of__owners=info.context.user.person)
return filter_active_school_term(info.context, qs, "member_of__school_term")
return Person.objects.all()
@staticmethod
@@ -255,13 +270,18 @@ class Query(graphene.ObjectType):
person,
start,
end,
info.context,
)
lessons_for_person.append(LessonsForPersonType(id=person, lessons=docs + dummies))
return lessons_for_person
@staticmethod
def resolve_extra_marks(root, info, **kwargs):
if info.context.user.has_perm("alsijil.fetch_extramarks_rule"):
return ExtraMark.objects.all()
raise []
@staticmethod
def resolve_coursebook_absence_reasons(root, info, **kwargs):
if not info.context.user.has_perm("kolego.fetch_absencereasons_rule"):
@@ -274,9 +294,12 @@ class Query(graphene.ObjectType):
if not info.context.user.has_perm("alsijil.view_person_statistics_rule", person):
return None
school_term = get_active_school_term(info.context)
return annotate_person_statistics_for_school_term(
Person.objects.filter(id=person.id), school_term
).first()
return graphene_django_optimizer.query(
annotate_person_statistics_for_school_term(
Person.objects.filter(id=person.id), school_term
).first(),
info,
)
@staticmethod
def resolve_participations_of_person(root, info, person):
@@ -284,12 +307,15 @@ class Query(graphene.ObjectType):
if not info.context.user.has_perm("alsijil.view_person_statistics_rule", person):
return []
school_term = get_active_school_term(info.context)
return ParticipationStatus.objects.filter(
person=person,
absence_reason__isnull=False,
datetime_start__date__gte=school_term.date_start,
datetime_end__date__lte=school_term.date_end,
).order_by("-related_documentation__datetime_start")
return graphene_django_optimizer.query(
ParticipationStatus.objects.filter(
person=person,
absence_reason__isnull=False,
datetime_start__date__gte=school_term.date_start,
datetime_end__date__lte=school_term.date_end,
).order_by("-related_documentation__datetime_start"),
info,
)
@staticmethod
def resolve_personal_notes_for_person(root, info, person):
@@ -297,13 +323,16 @@ class Query(graphene.ObjectType):
if not info.context.user.has_perm("alsijil.view_person_statistics_rule", person):
return []
school_term = get_active_school_term(info.context)
return NewPersonalNote.objects.filter(
person=person,
documentation__in=Documentation.objects.filter(
datetime_start__date__gte=school_term.date_start,
datetime_end__date__lte=school_term.date_end,
),
).order_by("-documentation__datetime_start")
return graphene_django_optimizer.query(
NewPersonalNote.objects.filter(
person=person,
documentation__in=Documentation.objects.filter(
datetime_start__date__gte=school_term.date_start,
datetime_end__date__lte=school_term.date_end,
),
).order_by("-documentation__datetime_start"),
info,
)
@staticmethod
def resolve_statistics_by_group(root, info, group):
@@ -313,7 +342,9 @@ class Query(graphene.ObjectType):
school_term = get_active_school_term(info.context)
members = group.members.all()
return annotate_person_statistics_for_school_term(members, school_term, group=group)
return graphene_django_optimizer.query(
annotate_person_statistics_for_school_term(members, school_term, group=group), info
)
class Mutation(graphene.ObjectType):
Loading