{{ $t("Nächste Termine") }}
-
{{ $t("dueDates.noDueDatesAvailable") }}
+
{{ $t("dueDates.noDueDatesAvailable") }}
{{ $t("dueDates.showAllDueDates") }}
diff --git a/client/src/pages/learningPath/learningContentPage/attendanceCourse/AttendanceCourse.vue b/client/src/pages/learningPath/learningContentPage/attendanceCourse/AttendanceCourse.vue
index 57e3241a..84d09904 100644
--- a/client/src/pages/learningPath/learningContentPage/attendanceCourse/AttendanceCourse.vue
+++ b/client/src/pages/learningPath/learningContentPage/attendanceCourse/AttendanceCourse.vue
@@ -2,7 +2,9 @@
{{ $t("a.Datum") }}
-
{{ formatDate(start, end) }}
+
+ {{ formatDueDate(props.attendanceCourse.start, props.attendanceCourse.end) }}
+
@@ -20,7 +22,7 @@
diff --git a/client/src/stores/courseSessions.ts b/client/src/stores/courseSessions.ts
index 223f6e19..4bb35007 100644
--- a/client/src/stores/courseSessions.ts
+++ b/client/src/stores/courseSessions.ts
@@ -40,10 +40,6 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => {
reload: reload,
})) as CourseSessionUser[];
cs.users = users;
- cs.due_dates.forEach((dueDate) => {
- dueDate.start = dayjs(dueDate.start);
- dueDate.end = dayjs(dueDate.end);
- });
sortDueDates(cs.due_dates);
})
);
diff --git a/client/src/types.ts b/client/src/types.ts
index 62e85168..a300e47f 100644
--- a/client/src/types.ts
+++ b/client/src/types.ts
@@ -1,6 +1,5 @@
import type { AssignmentCompletionStatus as AssignmentCompletionStatusGenerated } from "@/gql/graphql";
import type { Circle } from "@/services/circle";
-import type { Dayjs } from "dayjs";
import type { Component } from "vue";
export type LoginMethod = "local" | "sso";
@@ -624,8 +623,8 @@ export interface UserAssignmentCompletionStatus {
export type DueDate = {
id: number;
- start: Dayjs;
- end: Dayjs;
+ start: string;
+ end: string;
title: string;
assignment_type_translation_key: string;
date_type_translation_key: string;
@@ -633,4 +632,5 @@ export type DueDate = {
url: string;
course_session: number | null;
page: number | null;
+ circle: CircleLight | null;
};
diff --git a/server/vbv_lernwelt/course/models.py b/server/vbv_lernwelt/course/models.py
index 3b621aa9..a040dc95 100644
--- a/server/vbv_lernwelt/course/models.py
+++ b/server/vbv_lernwelt/course/models.py
@@ -103,6 +103,16 @@ class CourseBasePage(Page):
return course_parent_page.specific.course
return None
+ def get_circle(self):
+ from vbv_lernwelt.learnpath.models import Circle
+
+ try:
+ return self.get_ancestors().exact_type(Circle).first()
+ except Exception:
+ # noop
+ pass
+ return None
+
def get_circles(self):
course_parent_page = self.get_course_parent()
diff --git a/server/vbv_lernwelt/duedate/models.py b/server/vbv_lernwelt/duedate/models.py
index bb1f2028..5156bb59 100644
--- a/server/vbv_lernwelt/duedate/models.py
+++ b/server/vbv_lernwelt/duedate/models.py
@@ -97,6 +97,13 @@ class DueDate(models.Model):
return datetime.timedelta(0)
return self.end - self.start
+ def get_circle(self):
+ try:
+ return self.page.specific.get_circle()
+ except Exception:
+ # noop
+ return None
+
@classmethod
def get_users_next_events_qs(
cls, user: User, course_session: CourseSession = None, limit=10
diff --git a/server/vbv_lernwelt/duedate/serializers.py b/server/vbv_lernwelt/duedate/serializers.py
index f4e0f392..425f8b01 100644
--- a/server/vbv_lernwelt/duedate/serializers.py
+++ b/server/vbv_lernwelt/duedate/serializers.py
@@ -4,6 +4,30 @@ from vbv_lernwelt.duedate.models import DueDate
class DueDateSerializer(serializers.ModelSerializer):
+ circle = serializers.SerializerMethodField()
+
class Meta:
model = DueDate
- fields = "__all__"
+ fields = [
+ "start",
+ "end",
+ "manual_override_fields",
+ "title",
+ "assignment_type_translation_key",
+ "date_type_translation_key",
+ "subtitle",
+ "url",
+ "course_session",
+ "page",
+ "circle",
+ ]
+
+ def get_circle(self, obj):
+ circle = obj.get_circle()
+ if circle:
+ return {
+ "id": circle.id,
+ "title": circle.title,
+ "translation_key": circle.translation_key,
+ }
+ return None