diff --git a/client/src/pages/dashboard/DashboardPersonsPage.vue b/client/src/pages/dashboard/DashboardPersonsPage.vue index 6e98930e..bd7269ff 100644 --- a/client/src/pages/dashboard/DashboardPersonsPage.vue +++ b/client/src/pages/dashboard/DashboardPersonsPage.vue @@ -254,6 +254,7 @@ function exportData() { course_session_id: csId, generation: "", circle_id: "", + region: "", }); } exportDataAsXls(items, exportPersons, userStore.language); diff --git a/server/vbv_lernwelt/dashboard/tests/test_export.py b/server/vbv_lernwelt/dashboard/tests/test_export.py index 565d0e48..c00d1fef 100644 --- a/server/vbv_lernwelt/dashboard/tests/test_export.py +++ b/server/vbv_lernwelt/dashboard/tests/test_export.py @@ -139,9 +139,7 @@ class PersonsExportTestCase(ExportBaseTestCase): self.assertEqual(wb.sheetnames[0], "Test Zürich 2022 a") wb.active = wb["Test Zürich 2022 a"] - data = self._generate_expected_data([[None] * 6]) - - self._check_export(wb, data, 1, 6) + self._check_export(wb, [[None] * 6], 1, 6) def test_export_in_fr(self): activate("fr") diff --git a/server/vbv_lernwelt/dashboard/utils.py b/server/vbv_lernwelt/dashboard/utils.py index 8f668ce4..799b8ee5 100644 --- a/server/vbv_lernwelt/dashboard/utils.py +++ b/server/vbv_lernwelt/dashboard/utils.py @@ -99,90 +99,98 @@ def create_person_list_with_roles( user, course_session_ids=None, include_private_data=False ): def create_user_dict(user_object): - def create_user_dict(user_object): - return { - "user_id": user_object.id, - "first_name": user_object.first_name, - "last_name": user_object.last_name, - "email": user_object.email, - "avatar_url_small": user_object.avatar_url_small, - "avatar_url": user_object.avatar_url, - "course_sessions": [], - } - - course_sessions = get_course_sessions_with_roles_for_user(user) - - result_persons = {} - for cs in course_sessions: - if has_cs_role(cs.roles) and cs.course.configuration.is_uk: - course_session_users = CourseSessionUser.objects.filter( - course_session=cs.id - ).select_related("user") - my_role = user_role(cs.roles) - for csu in course_session_users: - person_data = result_persons.get( - csu.user.id, create_user_dict(csu.user) - ) - person_data["course_sessions"].append( - create_course_session_dict(cs, my_role, csu.role) - ) - result_persons[csu.user.id] = person_data - - # add persons where request.user is mentor - for cs in course_sessions: - - def _add_agent_relation(my_role, user_role): - course_session_entry = create_course_session_dict( - cs, my_role, user_role - ) - participant_user = relation.participant.user - - if participant_user.id not in result_persons: - person_data = create_user_dict(participant_user) - person_data["course_sessions"] = [course_session_entry] - result_persons[participant_user.id] = person_data - else: - # user is already in result_persons - result_persons[participant_user.id]["course_sessions"].append( - course_session_entry - ) - - if "LEARNING_MENTOR" in cs.roles: - for relation in AgentParticipantRelation.objects.filter( - agent=user, - participant__course_session_id=cs.id, - role="LEARNING_MENTOR", - ): - _add_agent_relation("LEARNING_MENTOR", "PARTICIPANT") - - if "BERUFSBILDNER" in cs.roles: - for relation in AgentParticipantRelation.objects.filter( - agent=user, - participant__course_session_id=cs.id, - role="BERUFSBILDNER", - ): - _add_agent_relation("BERUFSBILDNER", "PARTICIPANT") - - # add persons where request.user is lerning mentee - mentor_relation_qs = AgentParticipantRelation.objects.filter( - participant__user=user, - role=AgentParticipantRoleType.LEARNING_MENTOR.value, - ).prefetch_related("agent") - for mentor_relation in mentor_relation_qs: - cs = mentor_relation.participant.course_session - course_session_entry = create_course_session_dict( - cs, - "PARTICIPANT", - "LEARNING_MENTOR", + user_data = { + "user_id": user_object.id, + "first_name": user_object.first_name, + "last_name": user_object.last_name, + "email": user_object.email, + "avatar_url_small": user_object.avatar_url_small, + "avatar_url": user_object.avatar_url, + "course_sessions": [], + } + if include_private_data: + user_data["phone_number"] = user_object.phone_number + user_data["Lehrvertragsnummer"] = user_object.additional_json_data.get( + "Lehrvertragsnummer", "" ) - if mentor_relation.agent.id not in result_persons: - person_data = create_user_dict(mentor_relation.agent) + return user_data + + course_sessions = get_course_sessions_with_roles_for_user(user) + if course_session_ids: + course_sessions = [ + csr for csr in course_sessions if csr._original.id in course_session_ids + ] + + result_persons = {} + for cs in course_sessions: + if has_cs_role(cs.roles) and cs.course.configuration.is_uk: + course_session_users = CourseSessionUser.objects.filter( + course_session=cs.id + ).select_related("user") + my_role = user_role(cs.roles) + for csu in course_session_users: + person_data = result_persons.get( + csu.user.id, create_user_dict(csu.user) + ) + person_data["course_sessions"].append( + create_course_session_dict(cs, my_role, csu.role) + ) + result_persons[csu.user.id] = person_data + + # add persons where request.user is mentor + for cs in course_sessions: + + def _add_agent_relation(my_role, user_role): + course_session_entry = create_course_session_dict(cs, my_role, user_role) + participant_user = relation.participant.user + + if participant_user.id not in result_persons: + person_data = create_user_dict(participant_user) person_data["course_sessions"] = [course_session_entry] - result_persons[mentor_relation.agent.id] = person_data + result_persons[participant_user.id] = person_data else: # user is already in result_persons - result_persons[mentor_relation.agent.id]["course_sessions"].append( + result_persons[participant_user.id]["course_sessions"].append( course_session_entry ) - return result_persons.values() + + if "LEARNING_MENTOR" in cs.roles: + for relation in AgentParticipantRelation.objects.filter( + agent=user, + participant__course_session_id=cs.id, + role="LEARNING_MENTOR", + ): + _add_agent_relation("LEARNING_MENTOR", "PARTICIPANT") + + if "BERUFSBILDNER" in cs.roles: + for relation in AgentParticipantRelation.objects.filter( + agent=user, + participant__course_session_id=cs.id, + role="BERUFSBILDNER", + ): + _add_agent_relation("BERUFSBILDNER", "PARTICIPANT") + + # add persons where request.user is lerning mentee + mentor_relation_qs = AgentParticipantRelation.objects.filter( + participant__user=user, + role=AgentParticipantRoleType.LEARNING_MENTOR.value, + ).prefetch_related("agent") + for mentor_relation in mentor_relation_qs: + cs = mentor_relation.participant.course_session + course_session_entry = create_course_session_dict( + cs, + "PARTICIPANT", + "LEARNING_MENTOR", + ) + + if mentor_relation.agent.id not in result_persons: + person_data = create_user_dict(mentor_relation.agent) + person_data["course_sessions"] = [course_session_entry] + result_persons[mentor_relation.agent.id] = person_data + else: + # user is already in result_persons + result_persons[mentor_relation.agent.id]["course_sessions"].append( + course_session_entry + ) + return result_persons.values()