+
{{ $t("a.Fremdeinschätzungen") }}
diff --git a/client/src/pages/competence/SelfEvaluationAndFeedbackPage.vue b/client/src/pages/competence/SelfEvaluationAndFeedbackPage.vue
index 6e655cb0..9e649a4d 100644
--- a/client/src/pages/competence/SelfEvaluationAndFeedbackPage.vue
+++ b/client/src/pages/competence/SelfEvaluationAndFeedbackPage.vue
@@ -10,6 +10,9 @@ const selfEvaluationFeedbackSummaries = useSelfEvaluationFeedbackSummaries(
useCurrentCourseSession().value.id
);
+const courseSession = useCurrentCourseSession();
+const course = computed(() => courseSession.value.course);
+
const isLoaded = computed(() => !selfEvaluationFeedbackSummaries.loading.value);
const selectedCircle = ref({ name: t("a.AlleCircle"), id: "_all" });
@@ -32,10 +35,7 @@ const summaries = computed(() => {
});
const headerTitle = computed(() => {
- const canHaveFeedback =
- selfEvaluationFeedbackSummaries.aggregates.value?.feedback_assessment_visible ??
- false;
- if (canHaveFeedback) {
+ if (course.value.configuration.enable_learning_mentor) {
return t("a.Selbst- und Fremdeinschätzungen");
} else {
return t("a.Selbsteinschätzungen");
diff --git a/client/src/services/selfEvaluationFeedback.ts b/client/src/services/selfEvaluationFeedback.ts
index 5e300690..7908ca43 100644
--- a/client/src/services/selfEvaluationFeedback.ts
+++ b/client/src/services/selfEvaluationFeedback.ts
@@ -35,8 +35,6 @@ export interface FeedbackSummaryAggregates {
// totals across all learning units in the course session
self_assessment: FeedbackSummaryCounts;
feedback_assessment: FeedbackSummaryCounts;
- // does this course have any feedback?
- feedback_assessment_visible: boolean;
}
interface FeedbackAssessmentSummary {
diff --git a/server/vbv_lernwelt/course/creators/test_utils.py b/server/vbv_lernwelt/course/creators/test_utils.py
index c9ce778f..ac99904b 100644
--- a/server/vbv_lernwelt/course/creators/test_utils.py
+++ b/server/vbv_lernwelt/course/creators/test_utils.py
@@ -48,7 +48,6 @@ from vbv_lernwelt.learnpath.models import (
LearningContentEdoniqTest,
LearningPath,
LearningUnit,
- LearningUnitPerformanceFeedbackType,
)
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
CircleFactory,
@@ -277,7 +276,6 @@ def create_learning_unit(
circle: Circle,
course: Course,
course_category_title: str = "Course Category",
- feedback_user: LearningUnitPerformanceFeedbackType = LearningUnitPerformanceFeedbackType.NO_FEEDBACK,
) -> LearningUnit:
cat, _ = CourseCategory.objects.get_or_create(
course=course,
@@ -288,7 +286,6 @@ def create_learning_unit(
title="Learning Unit",
parent=circle,
course_category=cat,
- feedback_user=feedback_user.value,
)
diff --git a/server/vbv_lernwelt/course/graphql/types.py b/server/vbv_lernwelt/course/graphql/types.py
index 112c095b..1e55dbd8 100644
--- a/server/vbv_lernwelt/course/graphql/types.py
+++ b/server/vbv_lernwelt/course/graphql/types.py
@@ -91,6 +91,7 @@ class CourseConfigurationObjectType(DjangoObjectType):
class Meta:
model = CourseConfiguration
fields = (
+ "id",
"enable_circle_documents",
"enable_learning_mentor",
"enable_competence_certificates",
diff --git a/server/vbv_lernwelt/course/management/commands/create_default_courses.py b/server/vbv_lernwelt/course/management/commands/create_default_courses.py
index 2d07c330..bdfd71e4 100644
--- a/server/vbv_lernwelt/course/management/commands/create_default_courses.py
+++ b/server/vbv_lernwelt/course/management/commands/create_default_courses.py
@@ -238,19 +238,20 @@ def create_versicherungsvermittlerin_course(
course_session=cs,
user=User.objects.get(username="student-vv@eiger-versicherungen.ch"),
)
- expert1 = CourseSessionUser.objects.create(
+
+ CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="expert-vv.expert1@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
- expert2 = CourseSessionUser.objects.create(
+ CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="expert-vv.expert2@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
- expert3 = CourseSessionUser.objects.create(
+ CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="expert-vv.expert3@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
@@ -263,17 +264,6 @@ def create_versicherungsvermittlerin_course(
lemme.participants.add(csu)
- experts = [expert1, expert2, expert3]
-
- circles = Circle.objects.filter(
- slug__startswith="versicherungsvermittler-in-lp"
- )
-
- # for i, circle in enumerate(circles):
- # expert = experts[i % len(experts)]
- # expert.expert.add(circle)
- # create_feedback(circle, cs, 3)
-
for admin_email in ADMIN_EMAILS:
CourseSessionUser.objects.create(
course_session=cs,
@@ -290,7 +280,7 @@ def create_versicherungsvermittlerin_pruefung_course(
"it": "Intermediario/a assicurativo/a AFA Esame",
}
# Versicherungsvermittler/in mit neuen Circles
- course = create_course_with_categories(
+ course = create_course_with_categories( # noqa
course_id=course_id,
title=names[language],
)
@@ -318,7 +308,7 @@ def create_motorfahrzeug_pruefung_course(
"it": "Veicolo a motore Intermediario/a assicurativo/a AFA Esame",
}
# Versicherungsvermittler/in mit neuen Circles
- course = create_versicherungsvermittlerin_with_categories(
+ course = create_course_with_categories( # noqa
course_id=course_id,
title=names[language],
)
@@ -394,7 +384,7 @@ def create_course_uk_de_course_sessions():
tuesday_in_two_weeks = (
datetime.now() + relativedelta(weekday=TU(2)) + relativedelta(weeks=2)
)
- csac.due_date.start = timezone.make_aware(
+ csac.due_date.start = timezone.make_aware( # noqa
tuesday_in_two_weeks.replace(hour=8, minute=30, second=0, microsecond=0)
)
csac.due_date.end = timezone.make_aware(
@@ -484,21 +474,6 @@ def create_course_uk_de_course_sessions():
user=User.objects.get(username="patrick.muster@eiger-versicherungen.ch"),
)
- # TODO: feedback must now contain a `feedback_user`
- # create_feedback(
- # Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-kickoff"),
- # cs,
- # 3,
- # )
- # create_feedback(
- # Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-haushalt-teil-2"),
- # cs,
- # 14,
- # )
- # create_feedback(
- # Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-basis"), cs, 4
- # )
-
def create_course_uk_fr():
# Überbetriebliche Kurse FR
@@ -704,7 +679,7 @@ def create_course_training_de():
cs = CourseSession.objects.get(course_id=COURSE_UK, title="Demo üK 2023 DE")
- for user in users:
+ for user in users: # noqa
csu, _created = CourseSessionUser.objects.get_or_create(
course_session_id=cs.id, user_id=user.id
)
@@ -810,7 +785,7 @@ def create_course_training_fr():
title="Demo ci 2023 FR",
)
- for user in users:
+ for user in users: # noqa
csu, _created = CourseSessionUser.objects.get_or_create(
course_session_id=cs.id, user_id=user.id
)
@@ -897,7 +872,7 @@ def create_course_training_it():
title="Demo ci 2023 IT",
)
- for user in users:
+ for user in users: # noqa
csu, _created = CourseSessionUser.objects.get_or_create(
course_session_id=cs.id, user_id=user.id
)
diff --git a/server/vbv_lernwelt/learning_mentor/content/self_evaluation_feedback.py b/server/vbv_lernwelt/learning_mentor/content/self_evaluation_feedback.py
index 163cf8c2..981ea710 100644
--- a/server/vbv_lernwelt/learning_mentor/content/self_evaluation_feedback.py
+++ b/server/vbv_lernwelt/learning_mentor/content/self_evaluation_feedback.py
@@ -12,7 +12,6 @@ from vbv_lernwelt.learning_mentor.entities import (
)
from vbv_lernwelt.learnpath.models import (
LearningUnit,
- LearningUnitPerformanceFeedbackType,
)
from vbv_lernwelt.self_evaluation_feedback.models import SelfEvaluationFeedback
@@ -49,17 +48,16 @@ def get_self_feedback_evaluation(
evaluation_user: User,
course: Course,
) -> Tuple[List[MentorAssignmentStatus], Set[int]]:
+ if not participants or not course.configuration.enable_learning_mentor:
+ return [], set()
+
records: List[MentorAssignmentStatus] = []
circle_ids: Set[int] = set()
- if not participants:
- return records, circle_ids
-
# very unfortunate: we can't simply get all SelfEvaluationFeedback objects since then
# we would miss the one where no feedback was requested -> so we get all learning units
# and check if we have to take them into account (course, feedback type, etc.)
for learning_unit in LearningUnit.objects.filter(
- feedback_user=LearningUnitPerformanceFeedbackType.MENTOR_FEEDBACK.value,
course_category__course_id=course.id,
):
feedbacks = SelfEvaluationFeedback.objects.filter(
diff --git a/server/vbv_lernwelt/learning_mentor/tests/test_mentor.py b/server/vbv_lernwelt/learning_mentor/tests/test_mentor.py
index 60b280c7..617c8843 100644
--- a/server/vbv_lernwelt/learning_mentor/tests/test_mentor.py
+++ b/server/vbv_lernwelt/learning_mentor/tests/test_mentor.py
@@ -23,7 +23,6 @@ from vbv_lernwelt.course.creators.test_utils import (
)
from vbv_lernwelt.course.models import CourseSessionUser
from vbv_lernwelt.learning_mentor.models import LearningMentor
-from vbv_lernwelt.learnpath.models import LearningUnitPerformanceFeedbackType
from vbv_lernwelt.self_evaluation_feedback.models import SelfEvaluationFeedback
@@ -132,13 +131,6 @@ class LearningMentorAPITest(APITestCase):
course=self.course,
)
- # performance criteria under this learning unit shall be evaluated by the mentor
- learning_unit.feedback_user = (
- LearningUnitPerformanceFeedbackType.MENTOR_FEEDBACK.name
- )
-
- learning_unit.save()
-
# 1: we already evaluated
SelfEvaluationFeedback.objects.create(
feedback_requester_user=self.participant_1.user,
diff --git a/server/vbv_lernwelt/learnpath/create_vv_new_learning_path.py b/server/vbv_lernwelt/learnpath/create_vv_new_learning_path.py
index 169fcc35..d011f87c 100644
--- a/server/vbv_lernwelt/learnpath/create_vv_new_learning_path.py
+++ b/server/vbv_lernwelt/learnpath/create_vv_new_learning_path.py
@@ -18,7 +18,6 @@ from vbv_lernwelt.course.consts import (
COURSE_VERSICHERUNGSVERMITTLERIN_PRUEFUNG_ID,
)
from vbv_lernwelt.course.models import CourseCategory, CoursePage
-from vbv_lernwelt.learnpath.models import LearningUnitPerformanceFeedbackType
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
CircleFactory,
LearningContentAssignmentFactory,
@@ -175,7 +174,6 @@ def create_circle_basis(lp, title="Basis", course_page=None):
LearningSequenceFactory(title="Arbeitsalltag", parent=circle)
lu = LearningUnitFactory(
title="Mein neuer Job, Arbeitstechnik, Soziale Medien, Datenschutz und Beratungspflichten",
- feedback_user=LearningUnitPerformanceFeedbackType.MENTOR_FEEDBACK.name,
parent=circle,
)
@@ -432,7 +430,6 @@ def create_circle_fahrzeug(lp, title="Fahrzeug", course_page=None):
title="Transfer",
title_hidden=True,
parent=circle,
- feedback_user=LearningUnitPerformanceFeedbackType.MENTOR_FEEDBACK.name,
)
LearningContentPlaceholderFactory(
diff --git a/server/vbv_lernwelt/learnpath/graphql/types.py b/server/vbv_lernwelt/learnpath/graphql/types.py
index 0cd23953..4e12cc4b 100644
--- a/server/vbv_lernwelt/learnpath/graphql/types.py
+++ b/server/vbv_lernwelt/learnpath/graphql/types.py
@@ -234,7 +234,7 @@ class LearningUnitObjectType(DjangoObjectType):
class Meta:
model = LearningUnit
interfaces = (CoursePageInterface,)
- fields = ["evaluate_url", "title_hidden", "feedback_user"]
+ fields = ["evaluate_url", "title_hidden"]
def resolve_evaluate_url(self: LearningUnit, info, **kwargs):
return self.get_evaluate_url()
diff --git a/server/vbv_lernwelt/learnpath/migrations/0016_remove_learningunit_feedback_user.py b/server/vbv_lernwelt/learnpath/migrations/0016_remove_learningunit_feedback_user.py
new file mode 100644
index 00000000..e0fbcac4
--- /dev/null
+++ b/server/vbv_lernwelt/learnpath/migrations/0016_remove_learningunit_feedback_user.py
@@ -0,0 +1,17 @@
+# Generated by Django 3.2.20 on 2024-02-29 10:22
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('learnpath', '0015_set_feedback_user_mentor_for_vv'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='learningunit',
+ name='feedback_user',
+ ),
+ ]
diff --git a/server/vbv_lernwelt/learnpath/models.py b/server/vbv_lernwelt/learnpath/models.py
index 42b76a18..20d7d517 100644
--- a/server/vbv_lernwelt/learnpath/models.py
+++ b/server/vbv_lernwelt/learnpath/models.py
@@ -1,10 +1,9 @@
import re
-from enum import Enum
from typing import Tuple
from django.db import models
from django.utils.text import slugify
-from wagtail.admin.panels import FieldPanel, HelpPanel, PageChooserPanel
+from wagtail.admin.panels import FieldPanel, PageChooserPanel
from wagtail.fields import RichTextField, StreamField
from wagtail.models import Page
@@ -119,13 +118,6 @@ class Circle(CourseBasePage):
return f"{self.title}"
-class LearningUnitPerformanceFeedbackType(Enum):
- """Defines how feedback on the performance criteria (n) of a learning unit are given."""
-
- NO_FEEDBACK = "NO_FEEDBACK"
- MENTOR_FEEDBACK = "MENTOR_FEEDBACK"
-
-
class LearningSequence(CourseBasePage):
serialize_field_names = ["icon"]
@@ -178,21 +170,10 @@ class LearningUnit(CourseBasePage):
"course.CourseCategory", on_delete=models.SET_NULL, null=True, blank=True
)
title_hidden = models.BooleanField(default=False)
- feedback_user = models.CharField(
- max_length=255,
- choices=[(tag.name, tag.name) for tag in LearningUnitPerformanceFeedbackType],
- default=LearningUnitPerformanceFeedbackType.NO_FEEDBACK.name,
- )
content_panels = Page.content_panels + [
FieldPanel("course_category"),
FieldPanel("title_hidden"),
- FieldPanel("feedback_user"),
- HelpPanel(
- content="👆 Feedback zur Selbsteinschätzung: Normalerweise NO_FEEDBACK, "
- "ausser bei den Lerninhalten Selbsteinschätzungen, die eine Bewertung haben von einer "
- "Lernbegleitung haben sollen (z.B. VV)."
- ),
]
class Meta:
diff --git a/server/vbv_lernwelt/learnpath/serializers.py b/server/vbv_lernwelt/learnpath/serializers.py
index af616d38..3f6a3255 100644
--- a/server/vbv_lernwelt/learnpath/serializers.py
+++ b/server/vbv_lernwelt/learnpath/serializers.py
@@ -20,7 +20,6 @@ class LearningUnitSerializer(
"course_category",
"children",
"title_hidden",
- "feedback_user",
],
)
):
diff --git a/server/vbv_lernwelt/self_evaluation_feedback/tests/test_api.py b/server/vbv_lernwelt/self_evaluation_feedback/tests/test_api.py
index 440dfb5e..526df344 100644
--- a/server/vbv_lernwelt/self_evaluation_feedback/tests/test_api.py
+++ b/server/vbv_lernwelt/self_evaluation_feedback/tests/test_api.py
@@ -15,7 +15,6 @@ from vbv_lernwelt.course.creators.test_utils import (
from vbv_lernwelt.course.models import CourseCompletionStatus, CourseSessionUser
from vbv_lernwelt.course.services import mark_course_completion
from vbv_lernwelt.learning_mentor.models import LearningMentor
-from vbv_lernwelt.learnpath.models import LearningUnitPerformanceFeedbackType
from vbv_lernwelt.self_evaluation_feedback.models import (
CourseCompletionFeedback,
SelfEvaluationFeedback,
@@ -253,7 +252,6 @@ class SelfEvaluationFeedbackAPI(APITestCase):
learning_unit = create_learning_unit(
course=self.course,
circle=self.circle,
- feedback_user=LearningUnitPerformanceFeedbackType.MENTOR_FEEDBACK,
)
feedback = create_self_evaluation_feedback(
@@ -337,7 +335,6 @@ class SelfEvaluationFeedbackAPI(APITestCase):
learning_unit_with_success_feedback = create_learning_unit(
course=self.course,
circle=self.circle,
- feedback_user=LearningUnitPerformanceFeedbackType.MENTOR_FEEDBACK,
)
performance_criteria_page = create_performance_criteria_page(
@@ -382,7 +379,6 @@ class SelfEvaluationFeedbackAPI(APITestCase):
learning_unit = create_learning_unit( # noqa
course=self.course,
circle=self.circle,
- feedback_user=LearningUnitPerformanceFeedbackType.MENTOR_FEEDBACK,
)
create_performance_criteria_page(
@@ -415,7 +411,6 @@ class SelfEvaluationFeedbackAPI(APITestCase):
learning_unit = create_learning_unit( # noqa
course=self.course,
circle=self.circle,
- feedback_user=LearningUnitPerformanceFeedbackType.MENTOR_FEEDBACK,
)
create_performance_criteria_page(
diff --git a/server/vbv_lernwelt/self_evaluation_feedback/views.py b/server/vbv_lernwelt/self_evaluation_feedback/views.py
index 2335dfe6..328b16f9 100644
--- a/server/vbv_lernwelt/self_evaluation_feedback/views.py
+++ b/server/vbv_lernwelt/self_evaluation_feedback/views.py
@@ -12,7 +12,6 @@ from vbv_lernwelt.learning_mentor.models import LearningMentor
from vbv_lernwelt.learnpath.models import (
Circle,
LearningUnit,
- LearningUnitPerformanceFeedbackType,
)
from vbv_lernwelt.notify.services import NotificationService
from vbv_lernwelt.self_evaluation_feedback.models import (
@@ -181,15 +180,6 @@ def get_self_evaluation_feedbacks_as_requester(request, course_session_id: int):
+ received_feedback_counts_aggregate.unknown_count,
)
- # check if there are any learning units with mentor feedback
- feedback_assessment_visible = (
- LearningUnit.objects.filter(
- feedback_user=LearningUnitPerformanceFeedbackType.MENTOR_FEEDBACK.value,
- course_category__course=course_session.course,
- ).count()
- > 0
- )
-
return Response(
{
"results": results,
@@ -197,7 +187,6 @@ def get_self_evaluation_feedbacks_as_requester(request, course_session_id: int):
Circle.objects.filter(id__in=circle_ids).values("id", "title")
),
"aggregates": {
- "feedback_assessment_visible": feedback_assessment_visible,
"feedback_assessment": {
"pass": feedback_assessment_counts_aggregate.pass_count,
"fail": feedback_assessment_counts_aggregate.fail_count,