diff --git a/server/vbv_lernwelt/assignment/creators/create_assignments.py b/server/vbv_lernwelt/assignment/creators/create_assignments.py index 97e833a5..861d8dca 100644 --- a/server/vbv_lernwelt/assignment/creators/create_assignments.py +++ b/server/vbv_lernwelt/assignment/creators/create_assignments.py @@ -2213,7 +2213,7 @@ def create_uk_kickoff_prep_assignment(course_id=COURSE_UK): assignment = AssignmentFactory( parent=assignment_list_page, assignment_type=AssignmentType.PREP_ASSIGNMENT.name, - title="Kickoff - Versicherungswirtschaft", + title="Circle Kickoff", effort_required="ca. 2 Stunden", intro_text=replace_whitespace( """ @@ -2367,7 +2367,7 @@ def create_uk_fr_kickoff_prep_assignment(course_id=COURSE_UK): assignment = AssignmentFactory( parent=assignment_list_page, assignment_type=AssignmentType.PREP_ASSIGNMENT.name, - title="Circle Lancement - Secteur de l'assurance", + title="Circle Lancement", effort_required="2 heures environ", intro_text=replace_whitespace( """ @@ -2515,7 +2515,7 @@ def create_uk_it_kickoff_prep_assignment(course_id=COURSE_UK): assignment = AssignmentFactory( parent=assignment_list_page, assignment_type=AssignmentType.PREP_ASSIGNMENT.name, - title="Circle Introduzione - Settore assicurativo", + title="Circle Introduzione - Incarico di preparazione", effort_required="circa 2 ore", intro_text=replace_whitespace( """ diff --git a/server/vbv_lernwelt/course/creators/uk_course.py b/server/vbv_lernwelt/course/creators/uk_course.py index 6b7d56ad..ea89818a 100644 --- a/server/vbv_lernwelt/course/creators/uk_course.py +++ b/server/vbv_lernwelt/course/creators/uk_course.py @@ -269,11 +269,11 @@ In diesem Circle erfährst du wie die überbetrieblichen Kurse aufgebaut sind. Z content_url=f"/course/überbetriebliche-kurse/media", ) LearningContentAssignmentFactory( - title="Versicherungswirtschaft", + title="Vorbereitungsauftrag Circle Kickoff", assignment_type="PREP_ASSIGNMENT", parent=circle, 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) @@ -382,11 +382,11 @@ Dans ce cercle, tu apprendras comment les cours interentreprises sont structuré content_url=f"/course/{circle.get_course().slug}/media", ) LearningContentAssignmentFactory( - title="Secteur de l'assurance", + title="Mission de préparation", assignment_type="PREP_ASSIGNMENT", parent=circle, 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) @@ -499,11 +499,11 @@ In questo Circle imparerai come sono strutturati i corsi interaziendali. Imparer content_url=f"/course/{circle.get_course().slug}/media", ) LearningContentAssignmentFactory( - title="Settore Assicurativo", + title="Incarico di preparazione", assignment_type="PREP_ASSIGNMENT", parent=circle, 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) @@ -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", ) LearningContentAssignmentFactory( - title="Vorbereitungsauftrag Circle Basis", + title="Mandato di preparazione Circle Base", assignment_type="PREP_ASSIGNMENT", parent=circle, content_assignment=Assignment.objects.get( diff --git a/server/vbv_lernwelt/importer/services.py b/server/vbv_lernwelt/importer/services.py index 7e9aa252..df7ded31 100644 --- a/server/vbv_lernwelt/importer/services.py +++ b/server/vbv_lernwelt/importer/services.py @@ -34,17 +34,18 @@ LP_DATA = { "slug": "kickoff", "presence_course": "kickoff-lc-präsenzkurs-kickoff", "assignments": [ - "kickoff-lc-versicherungswirtschaft", + "kickoff-lc-vorbereitungsauftrag-circle-kickoff", "kickoff-lc-redlichkeitserklärung", "kickoff-lc-reflexion", ], + "tests": ["kickoff-lc-wissens-und-verständnisfragen"], }, "fr": { "title": "Lancement", "slug": "lancement", "presence_course": "lancement-lc-cours-de-présence-lancement", "assignments": [ - "lancement-lc-secteur-de-lassurance", + "lancement-lc-mission-de-préparation", "lancement-lc-redlichkeitserklärung", "lancement-lc-réflexion", ], @@ -54,7 +55,7 @@ LP_DATA = { "slug": "introduzione", "presence_course": "introduzione-lc-corso-di-presenza-introduzione", "assignments": [ - "introduzione-lc-settore-assicurativo", + "introduzione-lc-incarico-di-preparazione", "introduzione-lc-redlichkeitserklärung", "introduzione-lc-riflessione", ], @@ -318,63 +319,89 @@ def create_or_update_course_session( end = try_parse_datetime(data[f"{circle} {TRANSLATIONS[language]['ende']}"])[1] if attendance_course_lc: - csa, _created = CourseSessionAttendanceCourse.objects.get_or_create( - course_session=cs, learning_content=attendance_course_lc + create_or_update_course_session_attendance( + 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"]: - 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() + create_or_update_course_session_assignment( + cs, course.slug, assignment_slug, start, end + ) 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]): logger.debug( "validate_row_data_missing_header",