diff --git a/server/vbv_lernwelt/importer/services.py b/server/vbv_lernwelt/importer/services.py index 9c66fe85..6d4f9174 100644 --- a/server/vbv_lernwelt/importer/services.py +++ b/server/vbv_lernwelt/importer/services.py @@ -127,6 +127,8 @@ def import_trainers_from_excel(course: Course, filename: str): header = [cell.value for cell in sheet[1]] for row in sheet.iter_rows(min_row=2, values_only=True): + if all(cell_value is None for cell_value in row): + continue row_with_header = list(zip(header, row)) create_or_update_trainer(course, dict(row_with_header)) @@ -147,11 +149,11 @@ def create_or_update_trainer(course: Course, data: Dict[str, Any]): # TODO: handle language - import_id = data["Generation"].strip() groups = [g.strip() for g in data["Klasse"].strip().split(",")] # general expert handling for group in groups: + import_id = f"{data['Generation'].strip()} {group}" course_session = CourseSession.objects.filter( import_id=import_id, group=group, course=course ).first() diff --git a/server/vbv_lernwelt/importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx b/server/vbv_lernwelt/importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx index d40126c7..05311f3e 100644 Binary files a/server/vbv_lernwelt/importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx and b/server/vbv_lernwelt/importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx differ 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 fb9c6dc2..59ced640 100644 --- a/server/vbv_lernwelt/importer/tests/test_import_course_sessions.py +++ b/server/vbv_lernwelt/importer/tests/test_import_course_sessions.py @@ -24,6 +24,7 @@ class ImportCourseSessionTestCase(TestCase): for row in sheet.iter_rows(min_row=2, values_only=True): row_with_header = list(zip(header, row)) + print(row_with_header) cs = create_or_update_course_session( self.course, dict(row_with_header), circles=["Fahrzeug"] ) @@ -38,7 +39,7 @@ class CreateOrUpdateCourseSessionTestCase(TestCase): def test_create_course_session(self): row = [ - ("ID", "DE 2023"), + ("ID", "DE 2023 A"), ("Generation", 2023), ("Region", "Deutschschweiz"), ("Klasse", "A"), @@ -56,7 +57,7 @@ class CreateOrUpdateCourseSessionTestCase(TestCase): cs = create_or_update_course_session(self.course, data, circles=["Fahrzeug"]) - self.assertEqual(cs.import_id, "DE 2023") + self.assertEqual(cs.import_id, "DE 2023 A") self.assertEqual(cs.title, "Deutschschweiz 2023 A") self.assertEqual(cs.generation, "2023") self.assertEqual(cs.region, "Deutschschweiz") diff --git a/server/vbv_lernwelt/importer/tests/test_import_students.py b/server/vbv_lernwelt/importer/tests/test_import_students.py new file mode 100644 index 00000000..8e026808 --- /dev/null +++ b/server/vbv_lernwelt/importer/tests/test_import_students.py @@ -0,0 +1,76 @@ +import os +from datetime import datetime + +from django.test import TestCase +from openpyxl.reader.excel import load_workbook + +from vbv_lernwelt.course.creators.test_course import create_test_course +from vbv_lernwelt.course.models import CourseSession, CourseSessionUser +from vbv_lernwelt.importer.services import create_or_update_trainer + +test_dir = os.path.dirname(os.path.abspath(__file__)) + + +class ImportStudentsTestCase(TestCase): + def setUp(self): + self.course = create_test_course(include_vv=False) + + def test_import_excel_file(self): + workbook = load_workbook(filename=f"{test_dir}/Schulungen_Teilnehmende.xlsx") + sheet = workbook.active + + header = [cell.value for cell in sheet[1]] + + for row in sheet.iter_rows(min_row=2, values_only=True): + if all(cell_value is None for cell_value in row): + continue + row_with_header = list(zip(header, row)) + print(row_with_header) + + +class CreateOrUpdateCourseSessionTestCase(TestCase): + def setUp(self): + self.course = create_test_course(include_vv=False) + self.course_session_a = CourseSession.objects.create( + course=self.course, + title="Deutschschweiz 2023 A", + import_id="DE 2023", + group="A", + ) + self.course_session_a = CourseSession.objects.create( + course=self.course, + title="Deutschschweiz 2023 B", + import_id="DE 2023", + group="B", + ) + + def test_create_course_session(self): + row = [ + ("Name", "Hänni"), + ("Vorname", "Fabienne"), + ("Email", "fabienne.haenni@vbv-afa.ch"), + ("Sprache", "de"), + ("Generation", "DE 2023"), + ("Klasse", "A, B"), + ("Circles", "Fahrzeug (A, B), Reisen (A), KMU (B)"), + ("Status Referenten", "ok"), + (None, "Schulung D"), + ("Klasse foo", datetime(2023, 6, 6, 0, 0)), + ] + + create_or_update_trainer(self.course, dict(row)) + + self.assertEqual( + CourseSessionUser.objects.filter( + user__email="fabienne.haenni@vbv-afa.ch" + ).count(), + 2, + ) + + csu = CourseSessionUser.objects.get( + course_session=self.course_session_a, + ) + + self.assertEqual(csu.role, CourseSessionUser.Role.EXPERT) + self.assertEqual(csu.user.email, "fabienne.haenni@vbv-afa.ch") + self.assertEqual(csu.expert.all().first().title, "Fahrzeug") diff --git a/server/vbv_lernwelt/importer/tests/test_import_trainers.py b/server/vbv_lernwelt/importer/tests/test_import_trainers.py index 9f47838c..aec5a2f7 100644 --- a/server/vbv_lernwelt/importer/tests/test_import_trainers.py +++ b/server/vbv_lernwelt/importer/tests/test_import_trainers.py @@ -1,5 +1,4 @@ import os -from datetime import datetime from django.test import TestCase from openpyxl.reader.excel import load_workbook @@ -25,6 +24,8 @@ class ImportTrainerTestCase(TestCase): for row in sheet.iter_rows(min_row=2, values_only=True): row_with_header = list(zip(header, row)) + if all(cell_value is None for cell_value in row): + continue print(row_with_header) create_or_update_trainer(self.course, dict(row_with_header)) @@ -35,13 +36,13 @@ class CreateOrUpdateCourseSessionTestCase(TestCase): self.course_session_a = CourseSession.objects.create( course=self.course, title="Deutschschweiz 2023 A", - import_id="DE 2023", + import_id="DE 2023 A", group="A", ) self.course_session_a = CourseSession.objects.create( course=self.course, title="Deutschschweiz 2023 B", - import_id="DE 2023", + import_id="DE 2023 B", group="B", ) @@ -56,7 +57,6 @@ class CreateOrUpdateCourseSessionTestCase(TestCase): ("Circles", "Fahrzeug (A, B), Reisen (A), KMU (B)"), ("Status Referenten", "ok"), (None, "Schulung D"), - ("Klasse foo", datetime(2023, 6, 6, 0, 0)), ] create_or_update_trainer(self.course, dict(row))