diff --git a/server/vbv_lernwelt/dashboard/graphql/types/assignment.py b/server/vbv_lernwelt/dashboard/graphql/types/assignment.py index b9f8ec86..d2ea56d7 100644 --- a/server/vbv_lernwelt/dashboard/graphql/types/assignment.py +++ b/server/vbv_lernwelt/dashboard/graphql/types/assignment.py @@ -132,11 +132,11 @@ def get_assignment_completion_metrics( # calculate average points in percent evaluation_percent_results = [ - (ac.evaluation_points_final / ac.evaluation_max_points) + ((ac.evaluation_points_final or 0) / (ac.evaluation_max_points or 1)) for ac in assignment_completions ] average_evaluation_percent = ( - sum(evaluation_percent_results) / len(evaluation_percent_results) + sum(evaluation_percent_results) / (len(evaluation_percent_results) or 1) if evaluation_percent_results else 0 ) diff --git a/server/vbv_lernwelt/dashboard/tests/graphql/test_mentor_statistics.py b/server/vbv_lernwelt/dashboard/tests/graphql/test_mentor_statistics.py index 31947f5b..4c188197 100644 --- a/server/vbv_lernwelt/dashboard/tests/graphql/test_mentor_statistics.py +++ b/server/vbv_lernwelt/dashboard/tests/graphql/test_mentor_statistics.py @@ -47,8 +47,8 @@ class MentorStatisticsTestCase(BaseMentorAssignmentTestCase, GraphQLTestCase): ) # THEN # WHEN - query = """query ($courseId: ID!) { - mentor_course_statistics(course_id: $courseId) { + query = """query ($courseId: ID!, $agentRole: String!) { + mentor_course_statistics(course_id: $courseId, agent_role: $agentRole) { course_session_selection_ids user_selection_ids assignments { @@ -65,7 +65,7 @@ class MentorStatisticsTestCase(BaseMentorAssignmentTestCase, GraphQLTestCase): }""" # THEN - variables = {"courseId": str(self.course.id)} + variables = {"courseId": str(self.course.id), "agentRole": "LEARNING_MENTOR"} self.client.force_login(self.mentor) response = self.query(query, variables=variables) self.assertResponseNoErrors(response) diff --git a/server/vbv_lernwelt/dashboard/tests/test_views.py b/server/vbv_lernwelt/dashboard/tests/test_views.py index 629b5b6d..56af80e7 100644 --- a/server/vbv_lernwelt/dashboard/tests/test_views.py +++ b/server/vbv_lernwelt/dashboard/tests/test_views.py @@ -124,7 +124,7 @@ class GetDashboardConfig(TestCase): course=self.course, title="Test Session" ) - def _test_config(self, user, role, is_uk, is_vv, is_mentor, has_preview, widgets): + def _test_config(self, user, role, is_uk, is_vv, has_preview, widgets): # WHEN sessions = get_course_sessions_with_roles_for_user(user) course_configs = get_course_config(sessions) @@ -134,13 +134,12 @@ class GetDashboardConfig(TestCase): self.assertEqual(course_configs[0].course_title, self.course.title) self.assertEqual(course_configs[0].is_uk, is_uk) self.assertEqual(course_configs[0].is_vv, is_vv) - self.assertEqual(course_configs[0].is_mentor, is_mentor) self.assertEqual(course_configs[0].has_preview, has_preview) self.assertEqual( course_configs[0].session_to_continue_id, str(self.course_session.id) ) self.assertEqual(course_configs[0].role_key, role) - self.assertEqual(course_configs[0].widgets, widgets) + self.assertEqual(set(course_configs[0].widgets), set(widgets)) def test_participant_uk_get_config(self): participant = create_user("participant") @@ -157,7 +156,6 @@ class GetDashboardConfig(TestCase): role="Member", is_uk=True, is_vv=False, - is_mentor=False, has_preview=False, widgets=[ "ProgressWidget", @@ -181,7 +179,6 @@ class GetDashboardConfig(TestCase): role="Member", is_uk=False, is_vv=True, - is_mentor=False, has_preview=False, widgets=["ProgressWidget", "CompetenceWidget"], ) @@ -208,7 +205,6 @@ class GetDashboardConfig(TestCase): role="MentorUK", is_uk=True, is_vv=False, - is_mentor=True, has_preview=True, widgets=["MentorPersonWidget", "MentorCompetenceWidget"], ) @@ -234,7 +230,6 @@ class GetDashboardConfig(TestCase): role="MentorVV", is_uk=False, is_vv=True, - is_mentor=True, has_preview=True, widgets=["MentorPersonWidget", "MentorTasksWidget"], ) @@ -266,7 +261,6 @@ class GetDashboardConfig(TestCase): role="Member", is_uk=False, is_vv=True, - is_mentor=True, has_preview=False, widgets=[ "ProgressWidget", diff --git a/server/vbv_lernwelt/dashboard/views.py b/server/vbv_lernwelt/dashboard/views.py index d9240108..c3534b1b 100644 --- a/server/vbv_lernwelt/dashboard/views.py +++ b/server/vbv_lernwelt/dashboard/views.py @@ -68,6 +68,7 @@ class RoleKeyType(Enum): SUPERVISOR = "Supervisor" TRAINER = "Trainer" BERUFSBILDNER = "Berufsbildner" + UNKNOWN_ROLE_KEY = "UnknownRoleKey" @dataclass(frozen=True) @@ -365,55 +366,65 @@ def get_dashboard_due_dates(request): def get_widgets_for_course( - role_key: RoleKeyType, is_uk: bool, is_vv: bool + course_sessions: List[CourseSessionWithRoles], is_uk: bool, is_vv: bool ) -> List[str]: + relation_roles = set() + for cs in course_sessions: + relation_roles.update(cs.roles) + widgets = [] - if role_key == RoleKeyType.MEMBER: + if "MEMBER" in relation_roles: widgets.append(WidgetType.PROGRESS_WIDGET.value) widgets.append(WidgetType.COMPETENCE_WIDGET.value) if is_uk: widgets.append(WidgetType.COMPETENCE_CERTIFICATE_WIDGET.value) - if role_key in [RoleKeyType.SUPERVISOR, RoleKeyType.TRAINER] and is_uk: - widgets.append(WidgetType.UK_STATISTICS_WIDGET.value) - - if role_key in [RoleKeyType.MENTOR_UK, RoleKeyType.MENTOR_VV]: + if "EXPERT" in relation_roles or "SUPERVISOR" in relation_roles: + widgets.append(WidgetType.MENTOR_TASKS_WIDGET.value) widgets.append(WidgetType.MENTOR_PERSON_WIDGET.value) if is_uk: widgets.append(WidgetType.MENTOR_COMPETENCE_WIDGET.value) - if is_vv: + + if "LEARNING_MENTOR" in relation_roles: + widgets.append(WidgetType.MENTOR_PERSON_WIDGET.value) + if is_uk: + widgets.append(WidgetType.MENTOR_COMPETENCE_WIDGET.value) + elif is_vv: widgets.append(WidgetType.MENTOR_TASKS_WIDGET.value) - if role_key in [RoleKeyType.BERUFSBILDNER]: - widgets.append(WidgetType.UK_BERUFSBILDNER_STATISTICS_WIDGET.value) + if "BERUFSBILDNER" in relation_roles: + if is_uk: + widgets.append(WidgetType.UK_STATISTICS_WIDGET.value) return widgets -def get_role_key_and_mentor( +def get_relevant_role_key( course_sessions: List[CourseSessionWithRoles], is_uk: bool, is_vv: bool -) -> tuple[RoleKeyType, bool]: - roles = set() - role = None +) -> RoleKeyType: + relation_roles = set() + for cs in course_sessions: - roles.update(cs.roles) + relation_roles.update(cs.roles) - if "SUPERVISOR" in roles: - role = RoleKeyType.SUPERVISOR - elif "EXPERT" in roles: - role = RoleKeyType.TRAINER - elif "MEMBER" in roles: - role = RoleKeyType.MEMBER - elif "LEARNING_MENTOR" in roles: + if "SUPERVISOR" in relation_roles: + return RoleKeyType.SUPERVISOR + elif "EXPERT" in relation_roles: + return RoleKeyType.TRAINER + elif "MEMBER" in relation_roles: + return RoleKeyType.MEMBER + + elif "LEARNING_MENTOR" in relation_roles: if is_uk: - role = RoleKeyType.MENTOR_UK + return RoleKeyType.MENTOR_UK elif is_vv: - role = RoleKeyType.MENTOR_VV - elif "BERUFSBILDNER" in roles: - role = RoleKeyType.BERUFSBILDNER + return RoleKeyType.MENTOR_VV + elif "BERUFSBILDNER" in relation_roles: + if is_uk: + return RoleKeyType.BERUFSBILDNER - return role + return RoleKeyType.UNKNOWN_ROLE_KEY def collect_course_sessions_by_course( @@ -455,7 +466,7 @@ def get_course_config( for _id, cs_in_course in cs_by_course.items(): is_uk = cs_in_course[0].course.configuration.is_uk is_vv = cs_in_course[0].course.configuration.is_vv - role_key = get_role_key_and_mentor(cs_in_course, is_uk, is_vv) + role_key = get_relevant_role_key(cs_in_course, is_uk, is_vv) session_to_continue = get_newest_cs(cs_in_course) course_configs.append( CourseConfig( @@ -465,7 +476,7 @@ def get_course_config( role_key=role_key.value, is_uk=is_uk, is_vv=is_vv, - widgets=get_widgets_for_course(role_key, is_uk, is_vv), + widgets=get_widgets_for_course(cs_in_course, is_uk, is_vv), has_preview=has_preview(role_key), session_to_continue_id=( str(session_to_continue.id) if session_to_continue else None @@ -521,9 +532,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: