diff --git a/client/src/components/learningPath/LearningSequence.vue b/client/src/components/learningPath/LearningSequence.vue index 5e886550..d8ba0fa4 100644 --- a/client/src/components/learningPath/LearningSequence.vue +++ b/client/src/components/learningPath/LearningSequence.vue @@ -167,14 +167,14 @@ const learningSequenceBorderClass = computed(() => { @click="circleStore.openSelfEvaluation(learningUnit)" >
Selbsteinschätzung: Ich kann das.
diff --git a/client/src/services/circle.ts b/client/src/services/circle.ts index 34550ea7..1c3b6424 100644 --- a/client/src/services/circle.ts +++ b/client/src/services/circle.ts @@ -10,6 +10,7 @@ import type { LearningUnitPerformanceCriteria, WagtailCircle, } from "@/types"; +import _ from "lodash"; export function parseLearningSequences( circle: Circle, @@ -191,17 +192,29 @@ export class Circle implements WagtailCircle { public allFinishedInLearningSequence(translationKey: string): boolean { if (translationKey) { - const finishedContents = this.flatChildren.filter((lc) => { - return ( - lc.completion_status === "success" && - lc.parentLearningSequence?.translation_key === translationKey - ); - }).length; + const [performanceCriteria, learningContents] = _.partition( + this.flatChildren.filter( + (lc) => lc.parentLearningSequence?.translation_key === translationKey + ), + function (child) { + return child.type === "competence.PerformanceCriteria"; + } + ); - const totalContents = this.flatChildren.filter((lc) => { - return lc.parentLearningSequence?.translation_key === translationKey; - }).length; - return finishedContents === totalContents; + const groupedPerformanceCriteria = _.values( + _.groupBy(performanceCriteria, (pc) => pc.parentLearningUnit?.id) + ); + + return ( + learningContents.every((lc) => lc.completion_status === "success") && + (groupedPerformanceCriteria.length === 0 || + groupedPerformanceCriteria.every((group) => + group.some( + (pc) => + pc.completion_status === "success" || pc.completion_status === "fail" + ) + )) + ); } return false; diff --git a/client/src/stores/circle.ts b/client/src/stores/circle.ts index 83e0d70b..5e5c1487 100644 --- a/client/src/stores/circle.ts +++ b/client/src/stores/circle.ts @@ -130,16 +130,16 @@ export const useCircleStore = defineStore({ hash: createLearningUnitHash(learningUnit), }); }, - calcSelfEvaluationStatus(learningUnit: LearningUnit) { + calcSelfEvaluationStatus(learningUnit: LearningUnit): CourseCompletionStatus { if (learningUnit.children.length > 0) { if (learningUnit.children.every((q) => q.completion_status === "success")) { - return true; + return "success"; } if (learningUnit.children.some((q) => q.completion_status === "fail")) { - return false; + return "fail"; } } - return undefined; + return "unknown"; }, continueFromLearningContent(currentLearningContent: LearningContent) { if (currentLearningContent) {