Merged in feature/VBV-708-regionenleiter-fix (pull request #399)

VBV-708: Fix für Regionenleiter (hat auch Zugriff auf Cockpit)

Approved-by: Christian Cueni
This commit is contained in:
Daniel Egger 2024-09-30 14:05:51 +00:00 committed by Christian Cueni
commit 3d75af885c
1 changed files with 40 additions and 64 deletions

View File

@ -291,8 +291,8 @@ class CourseSessionObjectType(DjangoObjectType):
_add_course_session_user(rel.participant)
if self.course.configuration.is_uk:
# happy path, members and experts
if me_csu:
# VBV-708: Teilnehmer und Trainer haben Zugriff auf alle Teilnehmer im Ük
for course_session_user in CourseSessionUser.objects.filter(
course_session_id=self.id
).distinct():
@ -300,38 +300,29 @@ class CourseSessionObjectType(DjangoObjectType):
user.id for user in course_session_users_resolved
]:
_add_course_session_user(course_session_user)
else:
# VBV-708: user has only "AgentParticipantRole" and is not in the list of users
for rel in AgentParticipantRelation.objects.filter(
participant__course_session=self, agent=info.context.user
):
if rel.participant_id not in [
elif CourseSessionGroup.objects.filter(
supervisor=info.context.user, course_session=self
).exists():
# VBV-708: Supervisor (Regionenleiter) has access to all users and circles
for course_session_user in CourseSessionUser.objects.filter(
course_session_id=self.id
).distinct():
if course_session_user.id not in [
user.id for user in course_session_users_resolved
]:
_add_course_session_user(rel.participant)
_add_course_session_user(course_session_user)
# workaround for supervisor
# add supervisor to the list of users (as expert)
course_session_id = self.id # noqa
user = info.context.user # noqa
if CourseSessionGroup.objects.filter(
course_session=course_session_id, supervisor=user
).exists():
if course_session := CourseSession.objects.filter(
id=course_session_id
).first():
circles = (
course_session.course.get_learning_path()
self.course.get_learning_path()
.get_descendants()
.live()
.specific()
.exact_type(Circle)
)
user = info.context.user
course_session_users_resolved.append(
CourseSessionUserObjectsType(
id=f"{user.id}-as-ephemeral-supervisor", # noqa
id=f"{user.id}-{self.id}-as-ephemeral-supervisor", # noqa
user_id=user.id, # noqa
first_name=user.first_name, # noqa
last_name=user.last_name, # noqa
@ -348,29 +339,14 @@ class CourseSessionObjectType(DjangoObjectType):
],
)
)
else:
# VBV-708: user has only "AgentParticipantRole" and is not in the list of users
for rel in AgentParticipantRelation.objects.filter(
participant__course_session=self, agent=info.context.user
):
if rel.participant_id not in [
user.id for user in course_session_users_resolved
]:
_add_course_session_user(rel.participant)
return course_session_users_resolved
def _add_course_session_user(
self, course_session_user, course_session_users_resolved
):
course_session_users_resolved.append(
CourseSessionUserObjectsType(
id=course_session_user.id, # noqa
user_id=course_session_user.user.id, # noqa
first_name=course_session_user.user.first_name, # noqa
last_name=course_session_user.user.last_name, # noqa
email=course_session_user.user.email, # noqa
avatar_url=course_session_user.user.avatar_url, # noqa
role=course_session_user.role, # noqa
circles=[ # noqa
CourseSessionUserExpertCircleType( # noqa
id=circle.id, # noqa
title=circle.title, # noqa
slug=circle.slug, # noqa
)
for circle in course_session_user.expert.all() # noqa
],
optional_attendance=course_session_user.optional_attendance, # noqa
)
)