diff --git a/client/src/components/dueDates/DueDateSingle.vue b/client/src/components/dueDates/DueDateSingle.vue index e1a0b75d..9b557cb6 100644 --- a/client/src/components/dueDates/DueDateSingle.vue +++ b/client/src/components/dueDates/DueDateSingle.vue @@ -1,5 +1,5 @@ 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