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
Files
6
from datetime import datetime
from django.core.exceptions import PermissionDenied
from django.db.models import BooleanField, ExpressionWrapper, Q
import graphene
@@ -81,7 +80,13 @@ class Query(graphene.ObjectType):
def resolve_documentations_by_course_id(root, info, course_id, **kwargs):
documentations = Documentation.objects.filter(
Q(course__pk=course_id) | Q(amends__course__pk=course_id)
pk__in=Documentation.objects.filter(course_id=course_id)
.values_list("id", flat=True)
.union(
Documentation.objects.filter(amends__course_id=course_id).values_list(
"id", flat=True
)
)
)
return documentations
@@ -117,7 +122,7 @@ class Query(graphene.ObjectType):
)
)
):
raise PermissionDenied()
return []
# Find all LessonEvents for all Lessons of this Course in this date range
event_params = {
@@ -132,7 +137,7 @@ class Query(graphene.ObjectType):
)
school_term = get_active_school_term(info.context)
q = Q(groups__school_term=school_term, course__groups__school_term=school_term)
q = Q(groups__school_term=school_term) | Q(course__groups__school_term=school_term)
qs = LessonEvent.objects.filter(q)
events = LessonEvent.get_single_events(
datetime.combine(date_start, datetime.min.time()),
@@ -159,18 +164,24 @@ class Query(graphene.ObjectType):
if person:
person = Person.objects.get(pk=person)
if not info.context.user.has_perm("core.view_person_rule", person):
raise PermissionDenied()
return []
elif has_person(info.context.user):
person = info.context.user.person
else:
raise PermissionDenied()
return []
school_term = get_active_school_term(info.context)
return (
Group.objects.for_school_term(school_term)
.filter(Q(members=person) | Q(owners=person) | Q(parent_groups__owners=person))
.distinct()
.filter(
pk__in=Group.objects.filter(members=person)
.values_list("id", flat=True)
.union(Group.objects.filter(owners=person).values_list("id", flat=True))
.union(
Group.objects.filter(parent_groups__owners=person).values_list("id", flat=True)
)
)
.annotate(
is_priority=ExpressionWrapper(
Q(group_type=get_site_preferences()["alsijil__group_type_priority_coursebook"]),
@@ -185,23 +196,27 @@ class Query(graphene.ObjectType):
if person:
person = Person.objects.get(pk=person)
if not info.context.user.has_perm("core.view_person_rule", person):
raise PermissionDenied()
return []
elif has_person(info.context.user):
person = info.context.user.person
else:
raise PermissionDenied()
return []
school_term = get_active_school_term(info.context)
return Course.objects.filter(
(
Q(teachers=person)
| Q(groups__members=person)
| Q(groups__owners=person)
| Q(groups__parent_groups__owners=person)
pk__in=(
Course.objects.filter(teachers=person)
.values_list("id", flat=True)
.union(Course.objects.filter(groups__members=person).values_list("id", flat=True))
.union(Course.objects.filter(groups__owners=person).values_list("id", flat=True))
.union(
Course.objects.filter(groups__parent_groups__owners=person).values_list(
"id", flat=True
)
)
)
& Q(groups__in=Group.objects.for_school_term(school_term))
).distinct()
).filter(groups__in=Group.objects.for_school_term(school_term))
@staticmethod
def resolve_absence_creation_persons(root, info, **kwargs):
Loading