Import without changing file

This commit is contained in:
Daniel Egger 2023-05-31 21:45:51 +02:00
parent ab2e4c5df2
commit 5f534dee9f
5 changed files with 86 additions and 7 deletions

View File

@ -127,6 +127,8 @@ def import_trainers_from_excel(course: Course, filename: str):
header = [cell.value for cell in sheet[1]] header = [cell.value for cell in sheet[1]]
for row in sheet.iter_rows(min_row=2, values_only=True): 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)) row_with_header = list(zip(header, row))
create_or_update_trainer(course, dict(row_with_header)) 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 # TODO: handle language
import_id = data["Generation"].strip()
groups = [g.strip() for g in data["Klasse"].strip().split(",")] groups = [g.strip() for g in data["Klasse"].strip().split(",")]
# general expert handling # general expert handling
for group in groups: for group in groups:
import_id = f"{data['Generation'].strip()} {group}"
course_session = CourseSession.objects.filter( course_session = CourseSession.objects.filter(
import_id=import_id, group=group, course=course import_id=import_id, group=group, course=course
).first() ).first()

View File

@ -24,6 +24,7 @@ class ImportCourseSessionTestCase(TestCase):
for row in sheet.iter_rows(min_row=2, values_only=True): for row in sheet.iter_rows(min_row=2, values_only=True):
row_with_header = list(zip(header, row)) row_with_header = list(zip(header, row))
print(row_with_header)
cs = create_or_update_course_session( cs = create_or_update_course_session(
self.course, dict(row_with_header), circles=["Fahrzeug"] self.course, dict(row_with_header), circles=["Fahrzeug"]
) )
@ -38,7 +39,7 @@ class CreateOrUpdateCourseSessionTestCase(TestCase):
def test_create_course_session(self): def test_create_course_session(self):
row = [ row = [
("ID", "DE 2023"), ("ID", "DE 2023 A"),
("Generation", 2023), ("Generation", 2023),
("Region", "Deutschschweiz"), ("Region", "Deutschschweiz"),
("Klasse", "A"), ("Klasse", "A"),
@ -56,7 +57,7 @@ class CreateOrUpdateCourseSessionTestCase(TestCase):
cs = create_or_update_course_session(self.course, data, circles=["Fahrzeug"]) 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.title, "Deutschschweiz 2023 A")
self.assertEqual(cs.generation, "2023") self.assertEqual(cs.generation, "2023")
self.assertEqual(cs.region, "Deutschschweiz") self.assertEqual(cs.region, "Deutschschweiz")

View File

@ -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")

View File

@ -1,5 +1,4 @@
import os import os
from datetime import datetime
from django.test import TestCase from django.test import TestCase
from openpyxl.reader.excel import load_workbook 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): for row in sheet.iter_rows(min_row=2, values_only=True):
row_with_header = list(zip(header, row)) row_with_header = list(zip(header, row))
if all(cell_value is None for cell_value in row):
continue
print(row_with_header) print(row_with_header)
create_or_update_trainer(self.course, dict(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( self.course_session_a = CourseSession.objects.create(
course=self.course, course=self.course,
title="Deutschschweiz 2023 A", title="Deutschschweiz 2023 A",
import_id="DE 2023", import_id="DE 2023 A",
group="A", group="A",
) )
self.course_session_a = CourseSession.objects.create( self.course_session_a = CourseSession.objects.create(
course=self.course, course=self.course,
title="Deutschschweiz 2023 B", title="Deutschschweiz 2023 B",
import_id="DE 2023", import_id="DE 2023 B",
group="B", group="B",
) )
@ -56,7 +57,6 @@ class CreateOrUpdateCourseSessionTestCase(TestCase):
("Circles", "Fahrzeug (A, B), Reisen (A), KMU (B)"), ("Circles", "Fahrzeug (A, B), Reisen (A), KMU (B)"),
("Status Referenten", "ok"), ("Status Referenten", "ok"),
(None, "Schulung D"), (None, "Schulung D"),
("Klasse foo", datetime(2023, 6, 6, 0, 0)),
] ]
create_or_update_trainer(self.course, dict(row)) create_or_update_trainer(self.course, dict(row))