VBV-721: Export für Berufsbildner
This commit is contained in:
parent
020b7b64dd
commit
889922725a
|
|
@ -65,12 +65,7 @@ const itemDetailUrl = (item: AssignmentStatisticsRecordType) => {
|
|||
<main>
|
||||
<div class="mb-10 flex items-center justify-between">
|
||||
<h3>{{ $t("a.Kompetenznachweis-Elemente") }}</h3>
|
||||
<button
|
||||
v-if="userStore.course_session_experts.length > 0"
|
||||
class="flex"
|
||||
data-cy="export-button"
|
||||
@click="exportData"
|
||||
>
|
||||
<button v-if="true" class="flex" data-cy="export-button" @click="exportData">
|
||||
<it-icon-export></it-icon-export>
|
||||
<span class="ml inline-block">{{ $t("a.Als Excel exportieren") }}</span>
|
||||
</button>
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ class CompetenceCertificateElement:
|
|||
def export_competence_elements(
|
||||
course_session_ids: list[str],
|
||||
circle_ids: list[int] = None,
|
||||
user_ids: list[str] = None,
|
||||
save_as_file: bool = False,
|
||||
):
|
||||
if len(course_session_ids) == 0:
|
||||
|
|
@ -63,15 +64,21 @@ def export_competence_elements(
|
|||
course_session_ids
|
||||
)
|
||||
|
||||
assignemnt_completions = AssignmentCompletion.objects.filter(
|
||||
assignment_completions = AssignmentCompletion.objects.filter(
|
||||
course_session_id__in=course_session_ids,
|
||||
assignment__assignment_type__in=COMPETENCE_ASSIGNMENT_TYPES,
|
||||
).order_by("course_session", "assignment")
|
||||
if user_ids:
|
||||
assignment_completions = AssignmentCompletion.objects.filter(
|
||||
assignment_user_id__in=user_ids if user_ids else [],
|
||||
).order_by("course_session", "assignment")
|
||||
|
||||
# group all by the sessions title {session_id1: [...], session_id2: [...], ...}
|
||||
grouped_cs_users = get_ordered_csus_by_course_session(course_session_ids)
|
||||
grouped_cs_users = get_ordered_csus_by_course_session(
|
||||
course_session_ids, user_ids=user_ids
|
||||
)
|
||||
grouped_cce = group_by_session_title(competence_certificate_elements)
|
||||
grouped_ac = group_by_session_title(assignemnt_completions)
|
||||
grouped_ac = group_by_session_title(assignment_completions)
|
||||
|
||||
# create a sheet for each course session
|
||||
for course_session_title, cs_users in grouped_cs_users.items():
|
||||
|
|
|
|||
|
|
@ -153,10 +153,17 @@ def add_user_export_data(sheet, user: CourseSessionUser, row_idx: int) -> int:
|
|||
return 5 # return the next column index
|
||||
|
||||
|
||||
def get_ordered_csus_by_course_session(course_session_ids: list[str]):
|
||||
def get_ordered_csus_by_course_session(
|
||||
course_session_ids: list[str], user_ids: list[str] = None
|
||||
):
|
||||
csus = CourseSessionUser.objects.filter(
|
||||
course_session_id__in=course_session_ids, role=CourseSessionUser.Role.MEMBER
|
||||
).order_by("course_session", "user__last_name", "user__first_name")
|
||||
)
|
||||
|
||||
if user_ids:
|
||||
csus = csus.filter(user_id__in=user_ids)
|
||||
|
||||
csus = csus.order_by("course_session", "user__last_name", "user__first_name")
|
||||
return group_by_session_title(
|
||||
sorted(csus, key=lambda x: x.course_session.title),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ class ExportBaseTestCase(TestCase):
|
|||
def _check_export(self, wb, expected_data, max_row, max_col):
|
||||
for row in wb.active.iter_rows(max_col=max_col, max_row=max_row):
|
||||
for cell in row:
|
||||
print(cell.value)
|
||||
self.assertEqual(
|
||||
cell.value, expected_data[row[0].row - 1][row.index(cell)]
|
||||
)
|
||||
|
|
|
|||
|
|
@ -416,12 +416,18 @@ def export_attendance_as_xsl(request):
|
|||
def export_competence_elements_as_xsl(request):
|
||||
circle_ids = request.data.get("circleIds", None)
|
||||
requested_course_session_ids = request.data.get("courseSessionIds", [])
|
||||
course_sessions_with_roles = _get_permitted_courses_sessions_for_user(
|
||||
|
||||
(
|
||||
course_session_ids,
|
||||
participant_user_ids,
|
||||
) = _filter_permitted_course_session_and_user_ids(
|
||||
request.user, requested_course_session_ids
|
||||
)
|
||||
|
||||
data = export_competence_elements(
|
||||
[cswr.id for cswr in course_sessions_with_roles],
|
||||
course_session_ids=list(course_session_ids),
|
||||
circle_ids=circle_ids,
|
||||
user_ids=list(participant_user_ids),
|
||||
)
|
||||
return _make_excel_response(data, COMPETENCE_ELEMENT_EXPORT_FILE_NAME)
|
||||
|
||||
|
|
@ -470,6 +476,24 @@ def _get_permitted_courses_sessions_for_user(
|
|||
return user_course_sessions_with_roles
|
||||
|
||||
|
||||
def _filter_permitted_course_session_and_user_ids(
|
||||
user: User, requested_course_session_ids: List[str]
|
||||
):
|
||||
course_session_ids = set([])
|
||||
participant_user_ids = set([])
|
||||
|
||||
for person in create_person_list_with_roles(
|
||||
user, course_session_ids=requested_course_session_ids
|
||||
):
|
||||
for cs in person["course_sessions"]:
|
||||
if str(cs["id"]) in [str(i) for i in requested_course_session_ids]:
|
||||
if cs["my_role"] in ["SUPERVISOR", "EXPERT", "BERUFSBILDNER"]:
|
||||
course_session_ids.add(cs["id"])
|
||||
participant_user_ids.add(person["user_id"])
|
||||
|
||||
return course_session_ids, participant_user_ids
|
||||
|
||||
|
||||
def _make_excel_response(data: bytes, file_name: str) -> HttpResponse:
|
||||
encoded_data = base64.b64encode(data).decode("utf-8")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue