diff --git a/server/vbv_lernwelt/importer/services.py b/server/vbv_lernwelt/importer/services.py index 2109fed3..d1fa0bab 100644 --- a/server/vbv_lernwelt/importer/services.py +++ b/server/vbv_lernwelt/importer/services.py @@ -2,6 +2,8 @@ from typing import Dict, Any from vbv_lernwelt.core.models import User from vbv_lernwelt.course.models import Course, CourseSession +from vbv_lernwelt.importer.utils import try_parse_datetime +from vbv_lernwelt.learnpath.models import LearningContentAttendanceCourse def create_or_update_user( @@ -33,12 +35,15 @@ def create_or_update_user( return user -def create_or_update_course_session(course: Course, data: Dict[str, Any]): +def create_or_update_course_session(course: Course, data: Dict[str, Any], circles=None): """ :param data: the following keys are required to process the data: Generation, Region, Klasse :return: """ + if circles is None: + circles = [] + # TODO: validation generation = str(data["Generation"]).strip() region = data["Region"].strip() @@ -51,13 +56,15 @@ def create_or_update_course_session(course: Course, data: Dict[str, Any]): import_id=import_id, course=course ) + cs.additional_json_data["import_data"] = data + cs.save() + cs.title = title cs.generation = generation cs.region = region cs.group = group cs.import_id = import_id - cs.additional_json_data["import_data"] = data cs.save() """ @@ -70,5 +77,20 @@ def create_or_update_course_session(course: Course, data: Dict[str, Any]): ("Fahrzeug Standort", None), ("Fahrzeug Adresse", None), """ + for circle in circles: + attendance_course_lp_qs = LearningContentAttendanceCourse.objects.filter( + slug=f"{course.slug}-lp-circle-{circle.lower()}-lc-präsenzkurs-{circle.lower()}" + ) + if attendance_course_lp_qs.exists(): + cs.attendance_courses.append( + { + "learningContentId": attendance_course_lp_qs.first().id, + "start": try_parse_datetime(data[f"{circle} Start"])[1].isoformat(), + "end": try_parse_datetime(data[f"{circle} Ende"])[1].isoformat(), + "location": data[f"{circle} Raum"], + "trainer": "", + } + ) + cs.save() return cs diff --git a/server/vbv_lernwelt/importer/tests/test_import_course_sessions.py b/server/vbv_lernwelt/importer/tests/test_import_course_sessions.py index 88133986..68a5223b 100644 --- a/server/vbv_lernwelt/importer/tests/test_import_course_sessions.py +++ b/server/vbv_lernwelt/importer/tests/test_import_course_sessions.py @@ -3,7 +3,7 @@ import os from django.test import TestCase from openpyxl.reader.excel import load_workbook -from vbv_lernwelt.course.factories import CourseFactory +from vbv_lernwelt.course.creators.test_course import create_test_course from vbv_lernwelt.importer.services import create_or_update_course_session test_dir = os.path.dirname(os.path.abspath(__file__)) @@ -45,7 +45,7 @@ class ImportCourseSessionTestCase(TestCase): class CreateOrUpdateCourseSessionTestCase(TestCase): def setUp(self): - self.course = CourseFactory(title="myVBV Training") + self.course = create_test_course(include_vv=False) def test_create_course_session(self): row = [ @@ -65,10 +65,26 @@ class CreateOrUpdateCourseSessionTestCase(TestCase): data = dict(row) - cs = create_or_update_course_session(self.course, data) + cs = create_or_update_course_session(self.course, data, circles=["Fahrzeug"]) self.assertEqual(cs.import_id, "DE 2023") self.assertEqual(cs.title, "Deutschschweiz 2023 A") self.assertEqual(cs.generation, "2023") self.assertEqual(cs.region, "Deutschschweiz") self.assertEqual(cs.group, "A") + + attendance_course = cs.attendance_courses[0] + attendance_course = { + k: v + for k, v in attendance_course.items() + if k not in ["learningContentId", "location"] + } + + self.assertDictEqual( + attendance_course, + { + "start": "2023-06-06T13:30:00", + "end": "2023-06-06T15:00:00", + "trainer": "", + }, + )