From 5f534dee9f68874909193a13d0d704c428464712 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Wed, 31 May 2023 21:45:51 +0200 Subject: [PATCH] Import without changing file --- server/vbv_lernwelt/importer/services.py | 4 +- .../Schulungen_Durchfuehrung_Trainer.xlsx | Bin 15535 -> 15566 bytes .../tests/test_import_course_sessions.py | 5 +- .../importer/tests/test_import_students.py | 76 ++++++++++++++++++ .../importer/tests/test_import_trainers.py | 8 +- 5 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 server/vbv_lernwelt/importer/tests/test_import_students.py 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 d40126c789472b43c0a2114142433fe0ba92dac9..05311f3ea7f10552709b049d95cdb96cbed67b9c 100644 GIT binary patch delta 6817 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 delta 6774 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