Rename content to reflect real data, refactor import

This commit is contained in:
Christian Cueni 2023-08-17 19:39:30 +02:00
parent 81351aa9fa
commit 9ef2a4e8b3
3 changed files with 90 additions and 63 deletions

View File

@ -2213,7 +2213,7 @@ def create_uk_kickoff_prep_assignment(course_id=COURSE_UK):
assignment = AssignmentFactory( assignment = AssignmentFactory(
parent=assignment_list_page, parent=assignment_list_page,
assignment_type=AssignmentType.PREP_ASSIGNMENT.name, assignment_type=AssignmentType.PREP_ASSIGNMENT.name,
title="Kickoff - Versicherungswirtschaft", title="Circle Kickoff",
effort_required="ca. 2 Stunden", effort_required="ca. 2 Stunden",
intro_text=replace_whitespace( intro_text=replace_whitespace(
""" """
@ -2367,7 +2367,7 @@ def create_uk_fr_kickoff_prep_assignment(course_id=COURSE_UK):
assignment = AssignmentFactory( assignment = AssignmentFactory(
parent=assignment_list_page, parent=assignment_list_page,
assignment_type=AssignmentType.PREP_ASSIGNMENT.name, assignment_type=AssignmentType.PREP_ASSIGNMENT.name,
title="Circle Lancement - Secteur de l'assurance", title="Circle Lancement",
effort_required="2 heures environ", effort_required="2 heures environ",
intro_text=replace_whitespace( intro_text=replace_whitespace(
""" """
@ -2515,7 +2515,7 @@ def create_uk_it_kickoff_prep_assignment(course_id=COURSE_UK):
assignment = AssignmentFactory( assignment = AssignmentFactory(
parent=assignment_list_page, parent=assignment_list_page,
assignment_type=AssignmentType.PREP_ASSIGNMENT.name, assignment_type=AssignmentType.PREP_ASSIGNMENT.name,
title="Circle Introduzione - Settore assicurativo", title="Circle Introduzione - Incarico di preparazione",
effort_required="circa 2 ore", effort_required="circa 2 ore",
intro_text=replace_whitespace( intro_text=replace_whitespace(
""" """

View File

@ -269,11 +269,11 @@ In diesem Circle erfährst du wie die überbetrieblichen Kurse aufgebaut sind. Z
content_url=f"/course/überbetriebliche-kurse/media", content_url=f"/course/überbetriebliche-kurse/media",
) )
LearningContentAssignmentFactory( LearningContentAssignmentFactory(
title="Versicherungswirtschaft", title="Vorbereitungsauftrag Circle Kickoff",
assignment_type="PREP_ASSIGNMENT", assignment_type="PREP_ASSIGNMENT",
parent=circle, parent=circle,
content_assignment=Assignment.objects.get( content_assignment=Assignment.objects.get(
slug__startswith=f"überbetriebliche-kurse-assignment-kickoff-versicherungswirtschaft" slug__startswith=f"überbetriebliche-kurse-assignment-circle-kickoff"
), ),
), ),
LearningSequenceFactory(title="Training", parent=circle) LearningSequenceFactory(title="Training", parent=circle)
@ -382,11 +382,11 @@ Dans ce cercle, tu apprendras comment les cours interentreprises sont structuré
content_url=f"/course/{circle.get_course().slug}/media", content_url=f"/course/{circle.get_course().slug}/media",
) )
LearningContentAssignmentFactory( LearningContentAssignmentFactory(
title="Secteur de l'assurance", title="Mission de préparation",
assignment_type="PREP_ASSIGNMENT", assignment_type="PREP_ASSIGNMENT",
parent=circle, parent=circle,
content_assignment=Assignment.objects.get( content_assignment=Assignment.objects.get(
slug__startswith=f"cours-interentreprises-assignment-circle-lancement-secteur-de-l-assurance" slug__startswith=f"cours-interentreprises-assignment-circle-lancement",
), ),
), ),
LearningSequenceFactory(title="Training", parent=circle) LearningSequenceFactory(title="Training", parent=circle)
@ -499,11 +499,11 @@ In questo Circle imparerai come sono strutturati i corsi interaziendali. Imparer
content_url=f"/course/{circle.get_course().slug}/media", content_url=f"/course/{circle.get_course().slug}/media",
) )
LearningContentAssignmentFactory( LearningContentAssignmentFactory(
title="Settore Assicurativo", title="Incarico di preparazione",
assignment_type="PREP_ASSIGNMENT", assignment_type="PREP_ASSIGNMENT",
parent=circle, parent=circle,
content_assignment=Assignment.objects.get( content_assignment=Assignment.objects.get(
slug__startswith=f"{circle.get_course().slug}-assignment-circle-introduzione-settore-assicurativo" slug__startswith=f"{circle.get_course().slug}-assignment-circle-introduzione-incarico-di-preparazione"
), ),
), ),
LearningSequenceFactory(title="Training", parent=circle) LearningSequenceFactory(title="Training", parent=circle)
@ -828,7 +828,7 @@ In questo Circle imparerai le basi più importanti del settore assicurativo e de
content_url=f"/course/{circle.get_course().slug}/media", content_url=f"/course/{circle.get_course().slug}/media",
) )
LearningContentAssignmentFactory( LearningContentAssignmentFactory(
title="Vorbereitungsauftrag Circle Basis", title="Mandato di preparazione Circle Base",
assignment_type="PREP_ASSIGNMENT", assignment_type="PREP_ASSIGNMENT",
parent=circle, parent=circle,
content_assignment=Assignment.objects.get( content_assignment=Assignment.objects.get(

View File

@ -34,17 +34,18 @@ LP_DATA = {
"slug": "kickoff", "slug": "kickoff",
"presence_course": "kickoff-lc-präsenzkurs-kickoff", "presence_course": "kickoff-lc-präsenzkurs-kickoff",
"assignments": [ "assignments": [
"kickoff-lc-versicherungswirtschaft", "kickoff-lc-vorbereitungsauftrag-circle-kickoff",
"kickoff-lc-redlichkeitserklärung", "kickoff-lc-redlichkeitserklärung",
"kickoff-lc-reflexion", "kickoff-lc-reflexion",
], ],
"tests": ["kickoff-lc-wissens-und-verständnisfragen"],
}, },
"fr": { "fr": {
"title": "Lancement", "title": "Lancement",
"slug": "lancement", "slug": "lancement",
"presence_course": "lancement-lc-cours-de-présence-lancement", "presence_course": "lancement-lc-cours-de-présence-lancement",
"assignments": [ "assignments": [
"lancement-lc-secteur-de-lassurance", "lancement-lc-mission-de-préparation",
"lancement-lc-redlichkeitserklärung", "lancement-lc-redlichkeitserklärung",
"lancement-lc-réflexion", "lancement-lc-réflexion",
], ],
@ -54,7 +55,7 @@ LP_DATA = {
"slug": "introduzione", "slug": "introduzione",
"presence_course": "introduzione-lc-corso-di-presenza-introduzione", "presence_course": "introduzione-lc-corso-di-presenza-introduzione",
"assignments": [ "assignments": [
"introduzione-lc-settore-assicurativo", "introduzione-lc-incarico-di-preparazione",
"introduzione-lc-redlichkeitserklärung", "introduzione-lc-redlichkeitserklärung",
"introduzione-lc-riflessione", "introduzione-lc-riflessione",
], ],
@ -318,63 +319,89 @@ def create_or_update_course_session(
end = try_parse_datetime(data[f"{circle} {TRANSLATIONS[language]['ende']}"])[1] end = try_parse_datetime(data[f"{circle} {TRANSLATIONS[language]['ende']}"])[1]
if attendance_course_lc: if attendance_course_lc:
csa, _created = CourseSessionAttendanceCourse.objects.get_or_create( create_or_update_course_session_attendance(
course_session=cs, learning_content=attendance_course_lc cs,
attendance_course_lc,
course.slug,
circle_data["slug"],
location,
start,
end,
) )
csa.location = location
expert = CourseSessionUser.objects.filter(
course_session_id=cs.id,
expert__slug=f"{course.slug}-lp-circle-{circle_data['slug']}",
role=CourseSessionUser.Role.EXPERT,
).first()
if expert:
csa.trainer = f"{expert.user.first_name} {expert.user.last_name}"
if start:
csa.due_date.start = timezone.make_aware(start)
if end:
csa.due_date.end = timezone.make_aware(end)
csa.due_date.save()
csa.save()
for assignment_slug in circle_data["assignments"]: for assignment_slug in circle_data["assignments"]:
logger.debug("import", slug=f"{course.slug}-lp-circle-{assignment_slug}") create_or_update_course_session_assignment(
cs, course.slug, assignment_slug, start, end
learning_content = LearningContentAssignment.objects.filter( )
slug=f"{course.slug}-lp-circle-{assignment_slug}"
).first()
if learning_content:
csa, _created = CourseSessionAssignment.objects.get_or_create(
course_session=cs,
learning_content=LearningContentAssignment.objects.get(
slug=f"{course.slug}-lp-circle-{assignment_slug}"
),
)
if (
csa.learning_content.assignment_type
== AssignmentType.PREP_ASSIGNMENT.value
and start
):
csa.submission_deadline.end = timezone.make_aware(start)
csa.submission_deadline.save()
elif (
csa.learning_content.assignment_type
== AssignmentType.CASEWORK.value
and end
):
csa.submission_deadline.end = timezone.make_aware(
start
) + timezone.timedelta(days=30)
csa.submission_deadline.save()
return cs return cs
def create_or_update_course_session_attendance(
cs: CourseSession,
attendance_course_lc: LearningContentAttendanceCourse,
course_slug: str,
circle_slug: str,
location: str,
start: date,
end: date,
):
csa, _created = CourseSessionAttendanceCourse.objects.get_or_create(
course_session=cs, learning_content=attendance_course_lc
)
csa.location = location
expert = CourseSessionUser.objects.filter(
course_session_id=cs.id,
expert__slug=f"{course_slug}-lp-circle-{circle_slug}",
role=CourseSessionUser.Role.EXPERT,
).first()
if expert:
csa.trainer = f"{expert.user.first_name} {expert.user.last_name}"
if start:
csa.due_date.start = timezone.make_aware(start)
if end:
csa.due_date.end = timezone.make_aware(end)
csa.due_date.save()
csa.save()
def create_or_update_course_session_assignment(
cs: CourseSession, course_slug: str, assignment_slug: str, start: date, end: date
):
logger.debug("import", slug=f"{course_slug}-lp-circle-{assignment_slug}")
learning_content = LearningContentAssignment.objects.filter(
slug=f"{course_slug}-lp-circle-{assignment_slug}"
).first()
if learning_content:
csa, _created = CourseSessionAssignment.objects.get_or_create(
course_session=cs,
learning_content=LearningContentAssignment.objects.get(
slug=f"{course_slug}-lp-circle-{assignment_slug}"
),
)
if (
csa.learning_content.assignment_type == AssignmentType.PREP_ASSIGNMENT.value
and start
):
csa.submission_deadline.end = timezone.make_aware(start)
csa.submission_deadline.save()
elif (
csa.learning_content.assignment_type == AssignmentType.CASEWORK.value
and end
):
csa.submission_deadline.end = timezone.make_aware(
start
) + timezone.timedelta(days=30)
csa.submission_deadline.save()
def validate_row_data(data: Dict[str, any], required_headers: List[str]): def validate_row_data(data: Dict[str, any], required_headers: List[str]):
logger.debug( logger.debug(
"validate_row_data_missing_header", "validate_row_data_missing_header",