diff --git a/client/src/pages/learningPath/learningContentPage/assignment/AssignmentView.vue b/client/src/pages/learningPath/learningContentPage/assignment/AssignmentView.vue index 829f5c4d..38610ad3 100644 --- a/client/src/pages/learningPath/learningContentPage/assignment/AssignmentView.vue +++ b/client/src/pages/learningPath/learningContentPage/assignment/AssignmentView.vue @@ -1,27 +1,25 @@ - - + + diff --git a/client/src/stores/courseSessions.ts b/client/src/stores/courseSessions.ts index 5aae6fce..dd2e7204 100644 --- a/client/src/stores/courseSessions.ts +++ b/client/src/stores/courseSessions.ts @@ -3,6 +3,7 @@ import { deleteCircleDocument } from "@/services/files"; import type { CircleDocument, CourseSession, + CourseSessionAssignmentDetails, CourseSessionAttendanceDay, CourseSessionUser, ExpertSessionUser, @@ -224,6 +225,16 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => { } } + function findAssignmentDetails( + contentId: number + ): CourseSessionAssignmentDetails | undefined { + if (currentCourseSession.value) { + return currentCourseSession.value.assignment_details_list.find( + (assignmentDetails) => assignmentDetails.learningContentId === contentId + ); + } + } + return { uniqueCourseSessionsByCourse, currentCourseSession, @@ -238,6 +249,7 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => { startUpload, removeDocument, findAttendanceDay, + findAssignmentDetails, // TODO: only used to be changed by router.afterEach currentCourseSlug, diff --git a/client/src/types.ts b/client/src/types.ts index 1d31746e..67aaf77f 100644 --- a/client/src/types.ts +++ b/client/src/types.ts @@ -405,6 +405,11 @@ export interface CourseSessionAttendanceDay { trainer: string; } +export interface CourseSessionAssignmentDetails { + learningContentId: number; + deadlineDateTimeUtc: string; +} + export interface CourseSession { id: number; created_at: string; @@ -418,6 +423,7 @@ export interface CourseSession { course_url: string; media_library_url: string; attendance_days: CourseSessionAttendanceDay[]; + assignment_details_list: CourseSessionAssignmentDetails[]; documents: CircleDocument[]; users: CourseSessionUser[]; } 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 e8dcc94c..fd779e9b 100644 --- a/server/vbv_lernwelt/course/management/commands/create_default_courses.py +++ b/server/vbv_lernwelt/course/management/commands/create_default_courses.py @@ -158,6 +158,14 @@ def create_course_uk_de(): "trainer": "Roland Grossenbacher, roland.grossenbacher@helvetia.ch", } ], + assignment_details_list=[ + { + "learningContentId": LearningContent.objects.get( + slug="überbetriebliche-kurse-lp-circle-fahrzeug-lc-überprüfen-einer-motorfahrzeug-versicherungspolice" + ).id, + "deadlineDateTimeUtc": "2023-05-30T19:00:00Z", + } + ], ) # figma demo users and data diff --git a/server/vbv_lernwelt/course/management/commands/create_uk_course.py b/server/vbv_lernwelt/course/management/commands/create_uk_course.py index 9899333a..92facbab 100644 --- a/server/vbv_lernwelt/course/management/commands/create_uk_course.py +++ b/server/vbv_lernwelt/course/management/commands/create_uk_course.py @@ -10,6 +10,7 @@ from vbv_lernwelt.core.admin import User from vbv_lernwelt.course.consts import COURSE_UK, COURSE_UK_FR from vbv_lernwelt.course.models import CoursePage from vbv_lernwelt.learnpath.tests.learning_path_factories import ( + AssignmentBlockFactory, AttendanceDayBlockFactory, CircleFactory, FeedbackBlockFactory, @@ -19,7 +20,6 @@ from vbv_lernwelt.learnpath.tests.learning_path_factories import ( LearningUnitFactory, MediaLibraryBlockFactory, TopicFactory, - AssignmentBlockFactory, ) diff --git a/server/vbv_lernwelt/course/migrations/0004_coursesession_assignment_details_list.py b/server/vbv_lernwelt/course/migrations/0004_coursesession_assignment_details_list.py new file mode 100644 index 00000000..6bde4931 --- /dev/null +++ b/server/vbv_lernwelt/course/migrations/0004_coursesession_assignment_details_list.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.13 on 2023-04-06 09:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("course", "0003_auto_20230404_0837"), + ] + + operations = [ + migrations.AddField( + model_name="coursesession", + name="assignment_details_list", + field=models.JSONField(blank=True, default=list), + ), + ] diff --git a/server/vbv_lernwelt/course/models.py b/server/vbv_lernwelt/course/models.py index f4457929..b2903b07 100644 --- a/server/vbv_lernwelt/course/models.py +++ b/server/vbv_lernwelt/course/models.py @@ -186,6 +186,7 @@ class CourseSession(models.Model): end_date = models.DateField(null=True, blank=True) attendance_days = models.JSONField(default=list, blank=True) + assignment_details_list = models.JSONField(default=list, blank=True) additional_json_data = models.JSONField(default=dict, blank=True) diff --git a/server/vbv_lernwelt/course/serializers.py b/server/vbv_lernwelt/course/serializers.py index 701bddac..63061161 100644 --- a/server/vbv_lernwelt/course/serializers.py +++ b/server/vbv_lernwelt/course/serializers.py @@ -83,6 +83,7 @@ class CourseSessionSerializer(serializers.ModelSerializer): "end_date", "additional_json_data", "attendance_days", + "assignment_details_list", "learning_path_url", "competence_url", "media_library_url",