diff --git a/client/src/pages/learningPath/learningContentPage/blocks/AttendanceDayBlock.vue b/client/src/pages/learningPath/learningContentPage/blocks/AttendanceDayBlock.vue index 5f1e71ab..176f059d 100644 --- a/client/src/pages/learningPath/learningContentPage/blocks/AttendanceDayBlock.vue +++ b/client/src/pages/learningPath/learningContentPage/blocks/AttendanceDayBlock.vue @@ -15,7 +15,7 @@ const props = defineProps<{ }>(); const attendanceDay = computed(() => { - return courseSessionsStore.findAttendanceDay(props.content.slug); + return courseSessionsStore.findAttendanceDay(props.content.id); }); diff --git a/client/src/stores/courseSessions.ts b/client/src/stores/courseSessions.ts index 9f3c83eb..bd7ad6d0 100644 --- a/client/src/stores/courseSessions.ts +++ b/client/src/stores/courseSessions.ts @@ -213,14 +213,12 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => { } function findAttendanceDay( - contentSlug: string + contentId: number ): CourseSessionAttendanceDay | undefined { const currentCourseSession = courseSessionForRoute.value; if (currentCourseSession) { - const attendanceDays = - currentCourseSession.additional_json_data?.attendanceDays ?? []; - return attendanceDays.find( - (attendanceDay) => attendanceDay.learningContentSlug === contentSlug + return currentCourseSession.attendance_days.find( + (attendanceDay) => attendanceDay.learningContentId === contentId ); } } diff --git a/client/src/types.ts b/client/src/types.ts index dba039fb..976daa6a 100644 --- a/client/src/types.ts +++ b/client/src/types.ts @@ -340,7 +340,7 @@ export interface CircleDocument { // TODO refactor, when a user can manually create these days export interface CourseSessionAttendanceDay { - learningContentSlug: string; + learningContentId: number; date: string; startTime: string; endTime: string; @@ -360,9 +360,7 @@ export interface CourseSession { competence_url: string; course_url: string; media_library_url: string; - additional_json_data: { - attendanceDays?: CourseSessionAttendanceDay[]; - }; + attendance_days: CourseSessionAttendanceDay[]; 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 93c865a9..3f6931f9 100644 --- a/server/vbv_lernwelt/course/management/commands/create_default_courses.py +++ b/server/vbv_lernwelt/course/management/commands/create_default_courses.py @@ -30,7 +30,7 @@ from vbv_lernwelt.feedback.creators.create_demo_feedback import create_feedback from vbv_lernwelt.learnpath.create_vv_new_learning_path import ( create_vv_new_learning_path, ) -from vbv_lernwelt.learnpath.models import Circle +from vbv_lernwelt.learnpath.models import Circle, LearningContent from vbv_lernwelt.media_library.create_default_media_library import ( create_default_media_library, ) @@ -144,18 +144,18 @@ def create_course_uk_de(): cs = CourseSession.objects.create( course_id=COURSE_UK, title="Bern 2023 a", - additional_json_data={ - "attendanceDays": [ - { - "learningContentSlug": "überbetriebliche-kurse-lp-circle-fahrzeug-lc-präsenztag-fahrzeug", - "date": "2023-09-18", - "startTime": "08:15", - "endTime": "17:00", - "location": "Handelsschule KV Bern, Zimmer 123, Eigerstrasse 16, 3012 Bern", - "trainer": "Roland Grossenbacher, roland.grossenbacher@helvetia.ch", - } - ] - }, + attendance_days=[ + { + "learningContentId": LearningContent.objects.get( + slug="überbetriebliche-kurse-lp-circle-fahrzeug-lc-präsenztag-fahrzeug" + ).id, + "date": "2023-09-18", + "startTime": "08:15", + "endTime": "17:00", + "location": "Handelsschule KV Bern, Zimmer 123, Eigerstrasse 16, 3012 Bern", + "trainer": "Roland Grossenbacher, roland.grossenbacher@helvetia.ch", + } + ], ) # figma demo users and data diff --git a/server/vbv_lernwelt/course/migrations/0003_auto_20230404_0837.py b/server/vbv_lernwelt/course/migrations/0003_auto_20230404_0837.py new file mode 100644 index 00000000..43374f7a --- /dev/null +++ b/server/vbv_lernwelt/course/migrations/0003_auto_20230404_0837.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.13 on 2023-04-04 06:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("course", "0002_initial"), + ] + + operations = [ + migrations.AddField( + model_name="coursesession", + name="attendance_days", + field=models.JSONField(blank=True, default=list), + ), + migrations.AlterField( + model_name="coursesession", + name="additional_json_data", + field=models.JSONField(blank=True, default=dict), + ), + ] diff --git a/server/vbv_lernwelt/course/models.py b/server/vbv_lernwelt/course/models.py index 06d2d2c3..2212a95e 100644 --- a/server/vbv_lernwelt/course/models.py +++ b/server/vbv_lernwelt/course/models.py @@ -184,7 +184,9 @@ class CourseSession(models.Model): start_date = models.DateField(null=True, blank=True) end_date = models.DateField(null=True, blank=True) - additional_json_data = models.JSONField(default=dict) + attendance_days = models.JSONField(default=list, blank=True) + + additional_json_data = models.JSONField(default=dict, blank=True) def __str__(self): return f"{self.title}" diff --git a/server/vbv_lernwelt/course/serializers.py b/server/vbv_lernwelt/course/serializers.py index c7b9971c..701bddac 100644 --- a/server/vbv_lernwelt/course/serializers.py +++ b/server/vbv_lernwelt/course/serializers.py @@ -82,6 +82,7 @@ class CourseSessionSerializer(serializers.ModelSerializer): "start_date", "end_date", "additional_json_data", + "attendance_days", "learning_path_url", "competence_url", "media_library_url",