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) {