Fix competence data loading for profile user

This commit is contained in:
Daniel Egger 2024-07-26 18:26:59 +02:00
parent b24dbc84c8
commit d36a6e3693
8 changed files with 36 additions and 22 deletions

View File

@ -100,7 +100,9 @@ const getIconName = () => {
{{ $t("a.mit Abzug") }} {{ $t("a.mit Abzug") }}
</div> </div>
<div <div
v-if="assignment.completions[0] && !assignment.completions[0].evaluation_passed" v-if="
assignment.completions[0] && !assignment.completions[0].evaluation_passed
"
class="my-2 rounded-md bg-error-red-200 px-2.5 py-0.5" class="my-2 rounded-md bg-error-red-200 px-2.5 py-0.5"
> >
{{ $t("a.Nicht Bestanden") }} {{ $t("a.Nicht Bestanden") }}

View File

@ -25,7 +25,7 @@ const certificatesQuery = useQuery({
variables: { variables: {
courseSlug: props.courseSlug, courseSlug: props.courseSlug,
courseSessionId: courseSession.value.id, courseSessionId: courseSession.value.id,
userIds: [user.id ?? user.id], userIds: [props.userId ?? user.id],
}, },
}); });

View File

@ -30,7 +30,7 @@ const certificatesQuery = useQuery({
variables: { variables: {
courseSlug: props.courseSlug, courseSlug: props.courseSlug,
courseSessionId: courseSession.value.id, courseSessionId: courseSession.value.id,
userIds: [user.id ?? user.id], userIds: [props.userId ?? user.id],
}, },
}); });

View File

@ -1,8 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import log from "loglevel"; import log from "loglevel";
import { import { COMPETENCE_NAVI_CERTIFICATE_QUERY } from "@/graphql/queries";
COMPETENCE_NAVI_CERTIFICATE_QUERY,
} from "@/graphql/queries";
import { useQuery } from "@urql/vue"; import { useQuery } from "@urql/vue";
import { computed } from "vue"; import { computed } from "vue";
import type { CompetenceCertificate } from "@/types"; import type { CompetenceCertificate } from "@/types";
@ -33,7 +31,7 @@ const certificatesQuery = useQuery({
variables: { variables: {
courseSlug: props.courseSlug, courseSlug: props.courseSlug,
courseSessionId: courseSession.value.id, courseSessionId: courseSession.value.id,
userIds: [user.id ?? user.id], userIds: user.id,
}, },
}); });

View File

@ -3,7 +3,6 @@ import log from "loglevel";
import { computed, onMounted, ref } from "vue"; import { computed, onMounted, ref } from "vue";
import { type DashboardPersonType, fetchDashboardPersons } from "@/services/dashboard"; import { type DashboardPersonType, fetchDashboardPersons } from "@/services/dashboard";
import LoadingSpinner from "@/components/ui/LoadingSpinner.vue"; import LoadingSpinner from "@/components/ui/LoadingSpinner.vue";
import { useCurrentCourseSession } from "@/composables";
import { COMPETENCE_NAVI_CERTIFICATE_QUERY } from "@/graphql/queries"; import { COMPETENCE_NAVI_CERTIFICATE_QUERY } from "@/graphql/queries";
import { graphqlClient } from "@/graphql/client"; import { graphqlClient } from "@/graphql/client";
import type { CompetenceCertificateObjectType } from "@/gql/graphql"; import type { CompetenceCertificateObjectType } from "@/gql/graphql";
@ -21,8 +20,6 @@ const props = defineProps<{
log.debug("AgentCompetenceGradeDetailPage created", props); log.debug("AgentCompetenceGradeDetailPage created", props);
const courseSession = useCurrentCourseSession();
const loading = ref(true); const loading = ref(true);
const participants = ref<DashboardPersonType[]>([]); const participants = ref<DashboardPersonType[]>([]);
@ -76,21 +73,22 @@ const totalAverageGrade = computed(() => {
false false
); );
} }
return undefined;
}); });
onMounted(async () => { onMounted(async () => {
log.debug("AgentAssignmentDetailPage mounted", courseSession); log.debug("AgentAssignmentDetailPage mounted");
const personData = await fetchDashboardPersons("default"); const personData = await fetchDashboardPersons("default");
participants.value = personData?.filter((p) => { participants.value = personData?.filter((p) => {
return p.course_sessions.find( return p.course_sessions.find(
(cs) => cs.id === courseSession.value.id && cs.my_role === "BERUFSBILDNER" (cs) => cs.id === props.courseSessionId && cs.my_role === "BERUFSBILDNER"
); );
}); });
const res = await graphqlClient.query(COMPETENCE_NAVI_CERTIFICATE_QUERY, { const res = await graphqlClient.query(COMPETENCE_NAVI_CERTIFICATE_QUERY, {
courseSlug: props.courseSlug, courseSlug: props.courseSlug,
courseSessionId: courseSession.value.id, courseSessionId: props.courseSessionId,
userIds: participantUserIds.value, userIds: participantUserIds.value,
}); });
@ -111,7 +109,10 @@ onMounted(async () => {
<LoadingSpinner /> <LoadingSpinner />
</div> </div>
<div v-else class="container-large flex flex-col space-y-8"> <div v-else class="container-large flex flex-col space-y-8">
<router-link class="btn-text inline-flex items-center pl-0" to="/"> <router-link
class="btn-text inline-flex items-center pl-0"
:to="`/statistic/${props.agentRole}/${props.courseSlug}/competence-grade`"
>
<it-icon-arrow-left /> <it-icon-arrow-left />
<span>{{ $t("general.back") }}</span> <span>{{ $t("general.back") }}</span>
</router-link> </router-link>
@ -162,7 +163,20 @@ onMounted(async () => {
</div> </div>
<div class="w-full flex-auto items-end md:w-1/4 md:text-end"> <div class="w-full flex-auto items-end md:w-1/4 md:text-end">
Details anzeigen <router-link
:to="{
name: 'profileLearningPath',
params: {
userId: person.user_id,
courseSlug: props.courseSlug,
},
query: { courseSessionId: props.courseSessionId },
}"
data-cy="person-learning-path-link"
class="link w-full lg:text-right"
>
{{ $t("a.Profil anzeigen") }}
</router-link>
</div> </div>
</div> </div>
</div> </div>

View File

@ -144,7 +144,7 @@ const courseSessionCompetenceAssignments = computed(() => {
:data-cy="`entry-${entry.courseSessionId}`" :data-cy="`entry-${entry.courseSessionId}`"
class="flex flex-col justify-between gap-4 border-b p-2 last:border-b-0 md:flex-row md:items-center md:justify-between md:gap-16" class="flex flex-col justify-between gap-4 border-b p-2 last:border-b-0 md:flex-row md:items-center md:justify-between md:gap-16"
> >
<div class="w-full flex-auto md:w-1/3"> <div class="w-full flex-auto md:w-1/2">
{{ entry.competenceCertificateTitle }} {{ entry.competenceCertificateTitle }}
<br /> <br />
{{ $t("a.Durchführung") }} «{{ {{ $t("a.Durchführung") }} «{{
@ -152,7 +152,7 @@ const courseSessionCompetenceAssignments = computed(() => {
}}» }}»
</div> </div>
<div class="flex w-full flex-auto items-start md:w-1/3"> <div class="flex w-full flex-auto items-start md:w-1/4">
<div class="flex"> <div class="flex">
<div>{{ $t("a.Durchschnittsnote") }}:</div> <div>{{ $t("a.Durchschnittsnote") }}:</div>
<div class="w-16 text-center"> <div class="w-16 text-center">
@ -161,7 +161,7 @@ const courseSessionCompetenceAssignments = computed(() => {
</div> </div>
</div> </div>
<div class="w-full flex-auto items-end md:w-1/3 md:text-end"> <div class="w-full flex-auto items-end md:w-1/4 md:text-end">
<router-link <router-link
class="underline" class="underline"
:to="`/statistic/${props.agentRole}/${props.courseSlug}/competence-grade/${entry.courseSessionId}/${entry.competenceCertificateId}`" :to="`/statistic/${props.agentRole}/${props.courseSlug}/competence-grade/${entry.courseSessionId}/${entry.competenceCertificateId}`"

View File

@ -220,9 +220,7 @@ fragment CoursePageFields on CoursePageInterface {{
# THEN # THEN
self.assertResponseNoErrors(response) self.assertResponseNoErrors(response)
self.assertIsNone( self.assertIsNone(response.json()["data"]["competence_certificate_list"])
response.json()["data"]["competence_certificate_list"]
)
def test_member_userprofile_certificate_summary(self): def test_member_userprofile_certificate_summary(self):
self.client.force_login(self.member_one) self.client.force_login(self.member_one)

View File

@ -530,7 +530,9 @@ def get_mentor_open_tasks_count(request, course_id: str):
return Response( return Response(
status=200, status=200,
data={ data={
"open_task_count": _get_mentor_open_tasks_count(course_id, request.user) # noqa "open_task_count": _get_mentor_open_tasks_count(
course_id, request.user
) # noqa
}, },
) )
except PermissionDenied as e: except PermissionDenied as e: