Fix utils

This commit is contained in:
Christian Cueni 2024-08-07 09:19:51 +02:00
parent 77dce844d3
commit ed1375ba33
3 changed files with 90 additions and 83 deletions

View File

@ -254,6 +254,7 @@ function exportData() {
course_session_id: csId,
generation: "",
circle_id: "",
region: "",
});
}
exportDataAsXls(items, exportPersons, userStore.language);

View File

@ -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")

View File

@ -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()