Add due_dates rest endpoint for dashboard

This commit is contained in:
Daniel Egger 2024-04-18 18:07:57 +02:00
parent bfdacfec62
commit 50c35b7100
2 changed files with 53 additions and 3 deletions

View File

@ -44,6 +44,7 @@ from vbv_lernwelt.dashboard.views import (
get_dashboard_persons,
get_mentee_count,
get_mentor_open_tasks_count,
get_dashboard_due_dates,
)
from vbv_lernwelt.edoniq_test.views import (
export_students,
@ -124,6 +125,7 @@ urlpatterns = [
# dashboard
path(r"api/dashboard/persons/", get_dashboard_persons, name="get_dashboard_persons"),
path(r"api/dashboard/duedates/", get_dashboard_due_dates, name="get_dashboard_due_dates"),
path(r"api/dashboard/config/", get_dashboard_config, name="get_dashboard_config"),
path(r"api/dashboard/course/<str:course_id>/mentees/", get_mentee_count, name="get_mentee_count"),
path(r"api/dashboard/course/<str:course_id>/open_tasks/", get_mentor_open_tasks_count,

View File

@ -1,4 +1,5 @@
from dataclasses import asdict, dataclass
from datetime import date
from enum import Enum
from typing import List, Set
@ -18,6 +19,8 @@ from vbv_lernwelt.course.models import (
)
from vbv_lernwelt.course.views import logger
from vbv_lernwelt.course_session_group.models import CourseSessionGroup
from vbv_lernwelt.duedate.models import DueDate
from vbv_lernwelt.duedate.serializers import DueDateSerializer
from vbv_lernwelt.learning_mentor.models import LearningMentor
from vbv_lernwelt.self_evaluation_feedback.models import SelfEvaluationFeedback
@ -235,6 +238,53 @@ def get_dashboard_persons(request):
def get_dashboard_due_dates(request):
try:
course_sessions = get_course_sessions_with_roles_for_user(request.user)
course_session_ids = [cs.id for cs in course_sessions]
all_due_dates = DueDate.objects.filter(
course_session__id__in=course_session_ids
)
# filter only future due dates
due_dates = []
today = date.today()
for due_date in all_due_dates:
if due_date.end:
if due_date.end.date() >= today:
due_dates.append(due_date)
elif due_date.start:
if due_date.start.date() >= today:
due_dates.append(due_date)
due_dates.sort(key=lambda x: x.start)
# find course session by id in `course_sessions`
result_due_dates = []
for due_date in due_dates:
data = DueDateSerializer(due_date).data
cs = next(
course_session
for course_session in course_sessions
if course_session.id == due_date.course_session.id
)
if cs:
data["course_session"] = {
"id": str(cs.id),
"session_title": cs.title,
"course_id": str(cs.course.id),
"course_title": cs.course.title,
"course_slug": cs.course.slug,
"user_role": user_role(cs.roles),
"is_uk": cs.course.configuration.is_uk,
"is_vv": cs.course.configuration.is_vv,
}
result_due_dates.append(data)
return Response(
status=200,
data=result_due_dates,
)
except PermissionDenied as e:
raise e
@ -395,9 +445,7 @@ def get_mentor_open_tasks_count(request, course_id: str):
return Response(
status=200,
data={
"open_task_count": _get_mentor_open_tasks_count(
course_id, request.user
) # noqa
"open_task_count": _get_mentor_open_tasks_count(course_id, request.user) # noqa
},
)
except PermissionDenied as e: