diff --git a/client/src/pages/dashboard/DashboardPersonsPage.vue b/client/src/pages/dashboard/DashboardPersonsPage.vue index 8b7212ce..39cf4ad1 100644 --- a/client/src/pages/dashboard/DashboardPersonsPage.vue +++ b/client/src/pages/dashboard/DashboardPersonsPage.vue @@ -7,9 +7,10 @@ import { type DashboardPersonCourseSessionType, exportPersons, } from "@/services/dashboard"; +import { useCourseSessionsStore } from "@/stores/courseSessions"; import { useUserStore } from "@/stores/user"; -import type { DashboardPersonsPageMode, StatisticsFilterItem } from "@/types"; -import { exportDataAsXls } from "@/utils/export"; +import type { DashboardPersonsPageMode } from "@/types"; +import { openDataAsXls } from "@/utils/export"; import { useRouteQuery } from "@vueuse/router"; import dayjs from "dayjs"; import { useTranslation } from "i18next-vue"; @@ -39,6 +40,7 @@ const userStore = useUserStore(); const { loading, dashboardPersons } = useDashboardPersonsDueDates(props.mode); const { CHOSEN_PROFILE_TO_NAME } = useChosenProfileMapping(); +const { allCourseSessionActions } = useCourseSessionsStore(); const courses = computed(() => { return [ @@ -300,9 +302,34 @@ const filtersVisible = computed(() => { ); }); +const canExport = computed(() => { + // If user is only member, he can't export + // member = has is_member property, but not is_expert or is_supervisor + if (!allCourseSessionActions.has("is_member")) { + // is berufsbildner or expert or supervisor + return true; + } + + if ( + allCourseSessionActions.has("is_expert") || + allCourseSessionActions.has("is_supervisor") + ) { + // is member + return true; + } + + return false; +}); + function personRoleDisplayValue(personCourseSession: DashboardPersonCourseSessionType) { if ( - ["SUPERVISOR", "EXPERT", "LEARNING_MENTOR"].includes(personCourseSession.user_role) + [ + "SUPERVISOR", + "EXPERT", + "LEARNING_MENTOR", + "BERUFSBILDNER", + "LEARNING_MENTOR", + ].includes(personCourseSession.user_role) ) { return personCourseSession.user_role_display; } @@ -310,31 +337,12 @@ function personRoleDisplayValue(personCourseSession: DashboardPersonCourseSessio return ""; } -function exportData() { - const courseSessionIdsSet = new Set(); - // get all course session ids from users - if (selectedSession.value.id === UNFILTERED) { - for (const person of filteredPersons.value) { - for (const courseSession of person.course_sessions) { - courseSessionIdsSet.add(courseSession.id); - } - } - } else { - courseSessionIdsSet.add(selectedSession.value.id); - } - - // construct StatisticsFilterItems for export call - const items: StatisticsFilterItem[] = []; - for (const csId of courseSessionIdsSet) { - items.push({ - _id: "", - course_session_id: csId, - generation: "", - circle_id: "", - region: "", - }); - } - exportDataAsXls(items, exportPersons, userStore.language); +async function exportData() { + const requestData = { + courseSessionUserIds: filteredPersons.value.map((person) => person.csu_id), + }; + const data = await exportPersons(requestData, userStore.language); + openDataAsXls(data.encoded_data, data.file_name); } watch(selectedCourse, () => { @@ -366,7 +374,7 @@ watch(selectedRegion, () => {

{{ $t("a.Personen") }}