From 50c35b71003f6f567c2ccedafedcb2fc9362570b Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Thu, 18 Apr 2024 18:07:57 +0200 Subject: [PATCH] Add due_dates rest endpoint for dashboard --- server/config/urls.py | 2 + server/vbv_lernwelt/dashboard/views.py | 54 ++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/server/config/urls.py b/server/config/urls.py index 6155a093..716d4747 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -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//mentees/", get_mentee_count, name="get_mentee_count"), path(r"api/dashboard/course//open_tasks/", get_mentor_open_tasks_count, diff --git a/server/vbv_lernwelt/dashboard/views.py b/server/vbv_lernwelt/dashboard/views.py index ca57631e..63cd447e 100644 --- a/server/vbv_lernwelt/dashboard/views.py +++ b/server/vbv_lernwelt/dashboard/views.py @@ -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: