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

View File

@ -52,16 +52,20 @@ def create_or_update_user(
return 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) workbook = load_workbook(filename=filename)
sheet = workbook["Schulungen Durchführung"] sheet = workbook["Schulungen Durchführung"]
tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet) tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet)
for row in tuple_list: 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 :param data: the following keys are required to process the data: Generation, Region, Klasse
:return: :return:
@ -86,6 +90,10 @@ def create_or_update_course_session(course: Course, data: Dict[str, Any], circle
title = f"{region} {generation} {group}" 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( cs, _created = CourseSession.objects.get_or_create(
import_id=import_id, group=group, course=course 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 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) workbook = load_workbook(filename=filename)
sheet = workbook["Schulungen Trainer"] sheet = workbook["Schulungen Trainer"]
tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet) tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet)
for row in tuple_list: 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( logger.debug(
"create_or_update_trainer", "create_or_update_trainer",
course=course.title,
data=data, data=data,
label="import", label="import",
) )
@ -143,15 +150,14 @@ def create_or_update_trainer(course: Course, data: Dict[str, Any]):
last_name=data["Name"], last_name=data["Name"],
) )
# TODO: handle language
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}" 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,
).first() ).first()
if course_session: if course_session:
csu, _created = CourseSessionUser.objects.get_or_create( 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.role = CourseSessionUser.Role.EXPERT
csu.save() 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 expert handling
circle_data = parse_circle_group_string(data["Circles"]) circle_data = parse_circle_group_string(data["Circles"])
for circle_string in circle_data: for circle_string in circle_data:
parts = circle_string.split("(", 1) parts = circle_string.split("(", 1)
circle_name = parts[0].strip() circle_name = parts[0].strip()
groups = [g.strip() for g in parts[1].rstrip(")").strip().split(",")] 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) # print(circle_name, groups)
for group in groups: for group in groups:
import_id = f"{data['Generation'].strip()} {group}" 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
).first() ).first()
circle = Circle.objects.filter( circle = Circle.objects.filter(
slug=f"{course.slug}-lp-circle-{circle_name.lower()}" 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() csu.save()
def import_students_from_excel(course: Course, filename: str): def import_students_from_excel(filename: str):
workbook = load_workbook(filename=filename) workbook = load_workbook(filename=filename)
sheet = workbook.active sheet = workbook.active
tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet) tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet)
for row in tuple_list: 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( logger.debug(
"create_or_update_student", "create_or_update_student",
course=course.title,
data=data, data=data,
label="import", label="import",
) )
@ -214,9 +234,7 @@ def create_or_update_student(course: Course, data: Dict[str, Any]):
# general expert handling # general expert handling
import_ids = [i.strip() for i in data["Durchführungen"].split(",")] import_ids = [i.strip() for i in data["Durchführungen"].split(",")]
for import_id in import_ids: for import_id in import_ids:
course_session = CourseSession.objects.filter( course_session = CourseSession.objects.filter(import_id=import_id).first()
import_id=import_id, course=course
).first()
if course_session: if course_session:
csu, _created = CourseSessionUser.objects.get_or_create( csu, _created = CourseSessionUser.objects.get_or_create(
course_session_id=course_session.id, user_id=user.id course_session_id=course_session.id, user_id=user.id

View File

@ -25,10 +25,10 @@ class ImportCourseSessionTestCase(TestCase):
for row in tuple_list: for row in tuple_list:
print(row) print(row)
create_or_update_course_session( 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): class CreateOrUpdateCourseSessionTestCase(TestCase):

View File

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