Skip to content
Snippets Groups Projects
Commit 21863194 authored by Julian's avatar Julian
Browse files

Create endpoint for real and dummy documentations in a timeframe

parent 9ea0ed66
No related branches found
No related tags found
2 merge requests!352Draft: Resolve "Add dialog with each lesson's students",!350Resolve "Add simple course book list"
Pipeline #166270 failed
from datetime import date
from datetime import date, datetime
from typing import Optional, Union
from urllib.parse import urlparse
import json
from django.db import models
from django.db.models import QuerySet
from django.db.models.constraints import CheckConstraint
from django.db.models.query_utils import Q
from django.http import HttpRequest
from django.urls import reverse
from django.utils.formats import date_format
from django.utils.translation import gettext_lazy as _
......@@ -513,6 +515,37 @@ class Documentation(CalendarEvent):
),
]
@classmethod
def get_for_coursebook(cls, obj_type: str, obj_id: str, date_start: datetime, date_end: datetime, request: HttpRequest) -> list:
"""Get all the documentations for an object and a time frame.
obj_type may be one of TEACHER, GROUP, ROOM, COURSE
"""
# 1. Find all LessonEvents for all Lessons of this Course in this date range
# TODO: verify that substitutions don't break this
events = LessonEvent.get_single_events(date_start, date_end, request, {"type": obj_type, "id": obj_id, }, with_reference_obj=True)
# (1.5 filter them by permissions)
...
# 2. For each lessonEvent → check if there is a documentation
# if so, add the documentation to a list, if not, create a new one
return [
(
event_reference_obj.documentation.first() # TODO: probably show all documentations
if (event_reference_obj := event["REFERENCE_OBJ"]).documentation.exists() else
cls(
pk=f"DUMMY:{event_reference_obj.id}",
lesson_event=event_reference_obj,
course=event_reference_obj.course,
subject=event_reference_obj.subject,
datetime_start=event["DTSTART"].dt,
datetime_end=event["DTEND"].dt,
)
)
for event in events
]
class ParticipationStatus(ExtensibleModel):
"""A participation or absence record about a single person.
......
from django.db.models.query_utils import Q
from datetime import datetime
import graphene
from aleksis.core.schema.base import FilterOrderList
......@@ -19,6 +20,12 @@ class Query(graphene.ObjectType):
documentations_by_course_id = FilterOrderList(
DocumentationType, course_id=graphene.ID(required=True)
)
documentations_for_coursebook = FilterOrderList(
DocumentationType,
course_id = graphene.ID(required=True),
date_start=graphene.Date(required=True),
date_end=graphene.Date(required=True),
)
def resolve_documentations_by_course_id(root, info, course_id, **kwargs):
documentations = Documentation.objects.filter(
......@@ -26,6 +33,13 @@ class Query(graphene.ObjectType):
)
return documentations
def resolve_documentations_for_coursebook(root, info, course_id, date_start, date_end, **kwargs):
datetime_start = datetime.combine(date_start, datetime.min.time())
datetime_end = datetime.combine(date_end, datetime.max.time())
# TODO: later on, allow getting documentations for other types than courses, e.g. groups or persons
return Documentation.get_for_coursebook("COURSE", course_id, datetime_start, datetime_end, info.context)
class Mutation(graphene.ObjectType):
create_documentation = DocumentationCreateMutation.Field()
......
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