diff --git a/server/vbv_lernwelt/competence/create_uk_competence_profile.py b/server/vbv_lernwelt/competence/create_uk_competence_profile.py index 9d9a44fd..03f89947 100644 --- a/server/vbv_lernwelt/competence/create_uk_competence_profile.py +++ b/server/vbv_lernwelt/competence/create_uk_competence_profile.py @@ -4,7 +4,7 @@ from vbv_lernwelt.competence.factories import ( PerformanceCriteriaFactory, ) from vbv_lernwelt.competence.models import CompetencePage -from vbv_lernwelt.course.consts import COURSE_UK +from vbv_lernwelt.course.consts import COURSE_UK, COURSE_UK_FR from vbv_lernwelt.course.models import CoursePage from vbv_lernwelt.learnpath.models import LearningPath, LearningUnit @@ -149,3 +149,145 @@ def create_uk_competence_profile(course_id=COURSE_UK): slug=f"{slug_prefix}-circle-fahrzeug-lu-einführung" ), ) + + +def create_uk_fr_competence_profile(course_id=COURSE_UK_FR): + course_page = CoursePage.objects.get(course_id=course_id) + slug_prefix = course_page.get_children().exact_type(LearningPath).first().slug + + competence_profile_page = CompetenceProfilePageFactory( + title="KompetenzNavi", + parent=course_page, + ) + + competences = [ + { + "competence_id": "e4", + "title": "Betriebsbezogene Inhalte multimedial aufbereiten", + "items": [], + }, + { + "competence_id": "c3", + "title": "Betriebliche Prozesse dokumentieren, koordinieren und umsetzen", + "items": [], + }, + { + "competence_id": "e2", + "title": "Informationen im wirtschaftlichen und kaufmännischen Bereich recherchieren", + "items": [], + }, + { + "competence_id": "d2", + "title": "Informations- und Beratungsgespräche mit Kunden oder Lieferanten führen", + "items": [], + }, + { + "competence_id": "d3", + "title": "Betriebliche Prozesse dokumentieren, koordinieren und umsetzen", + "items": [], + }, + { + "competence_id": "d1", + "title": "Anliegen von Kunden oder Lieferanten entgegennehmen", + "items": [], + }, + ] + + for c in competences: + CompetencePageFactory( + parent=competence_profile_page, + competence_id=c["competence_id"], + title=c["title"], + items=[("item", i) for i in c["items"]], + ) + + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="e4" + ), + competence_id="e4.pv.ük1", + title="Sie erläutern die Dienstleistungen des Betriebs. (K2)", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-véhicule-lu-einführung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="e4" + ), + competence_id="e4.pv.ük3", + title="Sie stellen die Wertschöpfungskette und die verschiedenen organisatorischen Bereiche ihres Betriebs dar. (K2).", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-véhicule-lu-einführung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="e4" + ), + competence_id="e4.pv.ük4", + title="Sie erläutern die relevanten rechtlichen Grundlagen ihrer Branche situationsgerecht. (K2)", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-véhicule-lu-einführung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ük1", + title="Sie beschreiben die wichtigsten gesetzlichen Grundlagen im Versicherungsbereich umfassend. (K2)", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-véhicule-lu-einführung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ük2", + title="Sie nennen die relevanten Dienstleistungen und Produkte im Versicherungsbereich. (K1)", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-véhicule-lu-einführung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ük3", + title="Sie erklären die Leistungen und Produkte im Versicherungsbereich. (K2)", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-véhicule-lu-einführung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ük4", + title="Sie erläutern die Prozesse und Abläufe im privaten Versicherungsbereich verständlich. (K2)", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-véhicule-lu-einführung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="c3" + ), + competence_id="c3.pv.ük7", + title="Sie erläutern die gesetzlichen Bestimmungen bei Schaden- und Leistungsfällen. (K2)", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-véhicule-lu-einführung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="c3" + ), + competence_id="c3.pv.ük11", + title="Sie beurteilen gängige Versicherungslösungen fachkundig. (K3)", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-véhicule-lu-einführung" + ), + ) diff --git a/server/vbv_lernwelt/course/consts.py b/server/vbv_lernwelt/course/consts.py index d5e1459f..94ba8517 100644 --- a/server/vbv_lernwelt/course/consts.py +++ b/server/vbv_lernwelt/course/consts.py @@ -2,3 +2,4 @@ COURSE_TEST_ID = -1 COURSE_VERSICHERUNGSVERMITTLERIN_OLD_ID = -2 COURSE_UK = -3 COURSE_VERSICHERUNGSVERMITTLERIN_ID = -4 +COURSE_UK_FR = -5 diff --git a/server/vbv_lernwelt/course/management/commands/create_default_courses.py b/server/vbv_lernwelt/course/management/commands/create_default_courses.py index 172ab036..46ea2fdf 100644 --- a/server/vbv_lernwelt/course/management/commands/create_default_courses.py +++ b/server/vbv_lernwelt/course/management/commands/create_default_courses.py @@ -3,6 +3,7 @@ from wagtail.models import Page from vbv_lernwelt.competence.create_uk_competence_profile import ( create_uk_competence_profile, + create_uk_fr_competence_profile, ) from vbv_lernwelt.competence.create_vv_competence_profile import ( create_vv_competence_profile, @@ -15,6 +16,7 @@ from vbv_lernwelt.core.models import User from vbv_lernwelt.course.consts import ( COURSE_TEST_ID, COURSE_UK, + COURSE_UK_FR, COURSE_VERSICHERUNGSVERMITTLERIN_ID, COURSE_VERSICHERUNGSVERMITTLERIN_OLD_ID, ) @@ -23,6 +25,7 @@ from vbv_lernwelt.course.creators.versicherungsvermittlerin import ( create_versicherungsvermittlerin_with_categories, ) from vbv_lernwelt.course.management.commands.create_uk_course import ( + create_uk_fr_learning_path, create_uk_learning_path, ) from vbv_lernwelt.course.models import CourseSession, CourseSessionUser @@ -66,7 +69,7 @@ def command(): create_vv_new_learning_path() create_default_media_library(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID) - # Überbetriebliche Kurse + # Überbetriebliche Kurse DE create_versicherungsvermittlerin_with_categories( course_id=COURSE_UK, title="Überbetriebliche Kurse" ) @@ -74,6 +77,14 @@ def command(): create_uk_competence_profile(course_id=COURSE_UK) create_default_media_library(course_id=COURSE_UK) + # Überbetriebliche Kurse FR + create_versicherungsvermittlerin_with_categories( + course_id=COURSE_UK_FR, title="Course hors établissement" + ) + create_uk_fr_learning_path(course_id=COURSE_UK_FR) + create_uk_fr_competence_profile(course_id=COURSE_UK_FR) + create_default_media_library(course_id=COURSE_UK_FR) + # test course create_test_course() @@ -137,84 +148,111 @@ def command(): ) # course session Überbetriebliche Kurse Lehrjahr 1 - Region Bern - cs = CourseSession.objects.create( - course_id=COURSE_UK, - title="Überbetriebliche Kurse Lehrjahr 1 - Region Bern", - ) - # for user_data in default_users: - # CourseSessionUser.objects.create( - # course_session=cs, - # user=User.objects.get(username=user_data["email"]), - # ) - # csu = CourseSessionUser.objects.create( - # course_session=cs, - # user=User.objects.get(username="trainer-uk1.einstieg@eiger-versicherungen.ch"), - # ) - # csu.expert.add(Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-einstieg")) - # csu = CourseSessionUser.objects.create( - # course_session=cs, - # user=User.objects.get(username="trainer-uk1.analyse@eiger-versicherungen.ch"), - # ) - # csu.expert.add(Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-analyse")) - # csu = CourseSessionUser.objects.create( - # course_session=cs, - # user=User.objects.get(username="student-uk1-bern@eiger-versicherungen.ch"), - # ) + courses = [ + { + "course_id": COURSE_UK, + "title": "Überbetriebliche Kurse Lehrjahr 1 - Region Bern", + "basis_slug": "überbetriebliche-kurse-lp-circle-basis", + "kickoff_slug": "überbetriebliche-kurse-lp-circle-kickoff", + "haushalt1_slug": "überbetriebliche-kurse-lp-circle-haushalt-teil-1", + "fahrzeug_slug": "überbetriebliche-kurse-lp-circle-fahrzeug", + "haushalt2_slug": "überbetriebliche-kurse-lp-circle-haushalt-teil-2", + }, + { + "course_id": COURSE_UK_FR, + "title": "Cours hors établissement année 1 - Région Fribourg", + "basis_slug": "course-hors-établissement-lp-circle-basis", + "kickoff_slug": "course-hors-établissement-lp-circle-kickoff", + "haushalt1_slug": "course-hors-établissement-lp-circle-haushalt-teil-1", + "fahrzeug_slug": "course-hors-établissement-lp-circle-fahrzeug", + "haushalt2_slug": "course-hors-établissement-lp-circle-haushalt-teil-2", + }, + ] + for course in courses: + cs = CourseSession.objects.create( + course_id=course["course_id"], + title=course["title"], + ) + # for user_data in default_users: + # CourseSessionUser.objects.create( + # course_session=cs, + # user=User.objects.get(username=user_data["email"]), + # ) + # csu = CourseSessionUser.objects.create( + # course_session=cs, + # user=User.objects.get(username="trainer-uk1.einstieg@eiger-versicherungen.ch"), + # ) + # csu.expert.add(Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-einstieg")) + # csu = CourseSessionUser.objects.create( + # course_session=cs, + # user=User.objects.get(username="trainer-uk1.analyse@eiger-versicherungen.ch"), + # ) + # csu.expert.add(Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-analyse")) + # csu = CourseSessionUser.objects.create( + # course_session=cs, + # user=User.objects.get(username="student-uk1-bern@eiger-versicherungen.ch"), + # ) - # figma demo users and data - csu = CourseSessionUser.objects.create( - course_session=cs, - user=User.objects.get(username="patrizia.huggel@eiger-versicherungen.ch"), - role=CourseSessionUser.Role.EXPERT, - ) - csu.expert.add(Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-kickoff")) - csu.expert.add( - Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-haushalt-teil-1") - ) - csu.expert.add(Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-fahrzeug")) - csu = CourseSessionUser.objects.create( - course_session=cs, - user=User.objects.get(username="andreas.feuz@eiger-versicherungen.ch"), - role=CourseSessionUser.Role.EXPERT, - ) - csu.expert.add( - Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-haushalt-teil-2") - ) - csu.expert.add(Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-basis")) - _csu = CourseSessionUser.objects.create( - course_session=cs, - user=User.objects.get(username="michael.meier@example.com"), - ) - _csu = CourseSessionUser.objects.create( - course_session=cs, - user=User.objects.get(username="lina.egger@example.com"), - ) - _csu = CourseSessionUser.objects.create( - course_session=cs, - user=User.objects.get(username="evelyn.schmid@example.com"), - ) + # figma demo users and data + csu = CourseSessionUser.objects.create( + course_session=cs, + user=User.objects.get(username="patrizia.huggel@eiger-versicherungen.ch"), + role=CourseSessionUser.Role.EXPERT, + ) + csu.expert.add( + Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-kickoff") + ) + csu.expert.add( + Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-haushalt-teil-1") + ) + csu.expert.add( + Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-fahrzeug") + ) + csu = CourseSessionUser.objects.create( + course_session=cs, + user=User.objects.get(username="andreas.feuz@eiger-versicherungen.ch"), + role=CourseSessionUser.Role.EXPERT, + ) + csu.expert.add( + Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-haushalt-teil-2") + ) + csu.expert.add( + Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-basis") + ) + _csu = CourseSessionUser.objects.create( + course_session=cs, + user=User.objects.get(username="michael.meier@example.com"), + ) + _csu = CourseSessionUser.objects.create( + course_session=cs, + user=User.objects.get(username="lina.egger@example.com"), + ) + _csu = CourseSessionUser.objects.create( + course_session=cs, + user=User.objects.get(username="evelyn.schmid@example.com"), + ) - _csu = CourseSessionUser.objects.create( - course_session=cs, - user=User.objects.get(username="christoph.bosshard@vbv-afa.ch"), - ) + _csu = CourseSessionUser.objects.create( + course_session=cs, + user=User.objects.get(username="christoph.bosshard@vbv-afa.ch"), + ) - _csu = CourseSessionUser.objects.create( - course_session=cs, - user=User.objects.get(username="axel.manderbach@lernetz.ch"), - ) + _csu = CourseSessionUser.objects.create( + course_session=cs, + user=User.objects.get(username="axel.manderbach@lernetz.ch"), + ) - create_feedback( - Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-kickoff"), cs, 3 - ) - create_feedback( - Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-haushalt-teil-2"), - cs, - 14, - ) - create_feedback( - Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-basis"), cs, 4 - ) + create_feedback( + Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-kickoff"), cs, 3 + ) + create_feedback( + Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-haushalt-teil-2"), + cs, + 14, + ) + create_feedback( + Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-basis"), cs, 4 + ) # course session Überbetriebliche Kurse Lehrjahr 1 - Region Zürich cs = CourseSession.objects.create( diff --git a/server/vbv_lernwelt/course/management/commands/create_uk_course.py b/server/vbv_lernwelt/course/management/commands/create_uk_course.py index 21d7987e..89f039da 100644 --- a/server/vbv_lernwelt/course/management/commands/create_uk_course.py +++ b/server/vbv_lernwelt/course/management/commands/create_uk_course.py @@ -5,7 +5,7 @@ from wagtail.models import Locale, Page, Site from wagtail_localize.models import LocaleSynchronization from vbv_lernwelt.core.admin import User -from vbv_lernwelt.course.consts import COURSE_UK +from vbv_lernwelt.course.consts import COURSE_UK, COURSE_UK_FR from vbv_lernwelt.course.models import CoursePage from vbv_lernwelt.learnpath.create_vv_learning_path import ( create_learning_content_beenden, @@ -19,9 +19,6 @@ from vbv_lernwelt.learnpath.tests.learning_path_factories import ( TopicFactory, ) -# todo: remove when all Handlungsfelder are ready -READY_HF = ["Fahrzeug", "Reisen"] - def create_uk_learning_path(course_id=COURSE_UK, user=None, skip_locales=True): if user is None: @@ -80,6 +77,62 @@ def create_uk_learning_path(course_id=COURSE_UK, user=None, skip_locales=True): Page.objects.update(owner=user) +def create_uk_fr_learning_path(course_id=COURSE_UK_FR, user=None, skip_locales=True): + if user is None: + user = User.objects.get(username="info@iterativ.ch") + + site = Site.objects.filter(is_default_site=True).first() + + if not site: + site = wagtail_factories.SiteFactory(is_default_site=True) + + if settings.APP_ENVIRONMENT == "development": + site.port = 8000 + site.save() + + course_page = CoursePage.objects.get(course_id=course_id) + lp = LearningPathFactory( + title="Lernpfad", + parent=course_page, + ) + + TopicFactory(title="1ère année", is_visible=True, parent=lp) + create_uk_circle(lp, title="Coup d'envoi") + create_uk_circle(lp, title="Base") + create_uk_circle(lp, title="Véhicule") + create_uk_circle(lp, title="Budget Partie 1") + create_uk_circle(lp, title="Budget Partie 2") + + TopicFactory(title="2ème année", is_visible=True, parent=lp) + create_uk_circle(lp, title="Voyages / Protection juridique") + create_uk_circle(lp, title="Proprieté du logement") + create_uk_circle(lp, title="PME Partie 1") + create_uk_circle(lp, title="PME Partie 2") + create_uk_circle(lp, title="Concept des 3") + create_uk_circle(lp, title="Garantie des revenus, Partie 1") + create_uk_circle(lp, title="Garantie des revenus, Partie 2") + create_uk_circle(lp, title="Retraite") + TopicFactory(title="3ème année", is_visible=True, parent=lp) + create_uk_circle(lp, title="Santé") + create_uk_circle(lp, title="Préparation à l'examen, Partie 1") + create_uk_circle(lp, title="Préparation à l'examen, Partie 2") + # locales + if not skip_locales: + locale_de = Locale.objects.get(language_code="de-CH") + locale_fr, _ = Locale.objects.get_or_create(language_code="fr-CH") + LocaleSynchronization.objects.get_or_create( + locale_id=locale_fr.id, sync_from_id=locale_de.id + ) + locale_it, _ = Locale.objects.get_or_create(language_code="it-CH") + LocaleSynchronization.objects.get_or_create( + locale_id=locale_it.id, sync_from_id=locale_de.id + ) + call_command("sync_locale_trees") + + # all pages belong to 'admin' by default + Page.objects.update(owner=user) + + def create_uk_circle(lp, title="Kickoff"): circle = CircleFactory( title=title,