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__))
|
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",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue