Make import work with different language courses

This commit is contained in:
Daniel Egger 2023-06-13 18:18:21 +02:00 committed by Christian Cueni
parent 0712b331ea
commit 8c65ae3295
4 changed files with 53 additions and 35 deletions

View File

@ -486,18 +486,17 @@ def create_course_training_de():
current_dir = os.path.dirname(os.path.realpath(__file__))
print(current_dir)
course = Course.objects.get(id=COURSE_UK_TRAINING)
# import_course_sessions_from_excel(
# course,
# f"{current_dir}/../../../importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx",
# )
# import_trainers_from_excel(
# course,
# f"{current_dir}/../../../importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx",
# )
# import_students_from_excel(
# course,
# f"{current_dir}/../../../importer/tests/Schulungen_Teilnehmende.xlsx",
# )
import_course_sessions_from_excel(
course,
f"{current_dir}/../../../importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx",
)
import_trainers_from_excel(
course,
f"{current_dir}/../../../importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx",
)
import_students_from_excel(
f"{current_dir}/../../../importer/tests/Schulungen_Teilnehmende.xlsx",
)
for cs in CourseSession.objects.filter(course_id=COURSE_UK_TRAINING):
cs.assignment_details_list = [
@ -572,13 +571,14 @@ def create_course_training_fr():
import_course_sessions_from_excel(
course,
f"{current_dir}/../../../importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx",
language="fr",
)
import_trainers_from_excel(
course,
f"{current_dir}/../../../importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx",
language="fr",
)
import_students_from_excel(
course,
f"{current_dir}/../../../importer/tests/Schulungen_Teilnehmende.xlsx",
)

View File

@ -52,16 +52,20 @@ def create_or_update_user(
return user
def import_course_sessions_from_excel(course: Course, filename: str):
def import_course_sessions_from_excel(course: Course, filename: str, language="de"):
workbook = load_workbook(filename=filename)
sheet = workbook["Schulungen Durchführung"]
tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet)
for row in tuple_list:
create_or_update_course_session(course, dict(row), circles=["Fahrzeug"])
create_or_update_course_session(
course, dict(row), language=language, circles=["Fahrzeug"]
)
def create_or_update_course_session(course: Course, data: Dict[str, Any], circles=None):
def create_or_update_course_session(
course: Course, data: Dict[str, Any], language="de", circles=None
):
"""
:param data: the following keys are required to process the data: Generation, Region, Klasse
:return:
@ -86,6 +90,10 @@ def create_or_update_course_session(course: Course, data: Dict[str, Any], circle
title = f"{region} {generation} {group}"
if not import_id.lower().startswith(language.lower()):
# FIXME: language check depends on import_id format for now...
return None
cs, _created = CourseSession.objects.get_or_create(
import_id=import_id, group=group, course=course
)
@ -120,19 +128,18 @@ def create_or_update_course_session(course: Course, data: Dict[str, Any], circle
return cs
def import_trainers_from_excel(course: Course, filename: str):
def import_trainers_from_excel(course: Course, filename: str, language="de"):
workbook = load_workbook(filename=filename)
sheet = workbook["Schulungen Trainer"]
tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet)
for row in tuple_list:
create_or_update_trainer(course, dict(row))
create_or_update_trainer(course, dict(row), language=language)
def create_or_update_trainer(course: Course, data: Dict[str, Any]):
def create_or_update_trainer(course: Course, data: Dict[str, Any], language="de"):
logger.debug(
"create_or_update_trainer",
course=course.title,
data=data,
label="import",
)
@ -143,15 +150,14 @@ def create_or_update_trainer(course: Course, data: Dict[str, Any]):
last_name=data["Name"],
)
# TODO: handle language
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
import_id=import_id,
group=group,
).first()
if course_session:
csu, _created = CourseSessionUser.objects.get_or_create(
@ -159,19 +165,34 @@ def create_or_update_trainer(course: Course, data: Dict[str, Any]):
)
csu.role = CourseSessionUser.Role.EXPERT
csu.save()
else:
logger.warning(
"create_or_update_trainer: course_session not found",
import_id=import_id,
group=group,
label="import",
)
if not course:
return
# circle expert handling
circle_data = parse_circle_group_string(data["Circles"])
for circle_string in circle_data:
parts = circle_string.split("(", 1)
circle_name = parts[0].strip()
groups = [g.strip() for g in parts[1].rstrip(")").strip().split(",")]
# FIXME: hardcoded translation
if language == "fr" and circle_name == "Fahrzeug":
circle_name = "Véhicule"
# print(circle_name, groups)
for group in groups:
import_id = f"{data['Generation'].strip()} {group}"
course_session = CourseSession.objects.filter(
import_id=import_id, group=group, course=course
import_id=import_id, group=group
).first()
circle = Circle.objects.filter(
slug=f"{course.slug}-lp-circle-{circle_name.lower()}"
@ -186,19 +207,18 @@ def create_or_update_trainer(course: Course, data: Dict[str, Any]):
csu.save()
def import_students_from_excel(course: Course, filename: str):
def import_students_from_excel(filename: str):
workbook = load_workbook(filename=filename)
sheet = workbook.active
tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet)
for row in tuple_list:
create_or_update_student(course, dict(row))
create_or_update_student(dict(row))
def create_or_update_student(course: Course, data: Dict[str, Any]):
def create_or_update_student(data: Dict[str, Any]):
logger.debug(
"create_or_update_student",
course=course.title,
data=data,
label="import",
)
@ -214,9 +234,7 @@ def create_or_update_student(course: Course, data: Dict[str, Any]):
# general expert handling
import_ids = [i.strip() for i in data["Durchführungen"].split(",")]
for import_id in import_ids:
course_session = CourseSession.objects.filter(
import_id=import_id, course=course
).first()
course_session = CourseSession.objects.filter(import_id=import_id).first()
if course_session:
csu, _created = CourseSessionUser.objects.get_or_create(
course_session_id=course_session.id, user_id=user.id

View File

@ -25,10 +25,10 @@ class ImportCourseSessionTestCase(TestCase):
for row in tuple_list:
print(row)
create_or_update_course_session(
self.course, dict(row), circles=["Fahrzeug"]
self.course, dict(row), language="de", circles=["Fahrzeug"]
)
self.assertEqual(CourseSession.objects.count(), 6)
self.assertEqual(CourseSession.objects.count(), 3)
class CreateOrUpdateCourseSessionTestCase(TestCase):

View File

@ -29,7 +29,7 @@ class ImportStudentsTestCase(TestCase):
tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet)
for row in tuple_list:
print(row)
create_or_update_student(self.course, dict(row))
create_or_update_student(dict(row))
self.assertEqual(CourseSessionUser.objects.count(), 14)
@ -59,7 +59,7 @@ class CreateOrUpdateStudentTestCase(TestCase):
(None, None),
]
create_or_update_student(self.course, dict(row))
create_or_update_student(dict(row))
self.assertEqual(
CourseSessionUser.objects.filter(