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