Make import work with different language courses
This commit is contained in:
parent
0712b331ea
commit
8c65ae3295
|
|
@ -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",
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Reference in New Issue