From 1aaf0810bd914508520a6f0b099579733f27e3b1 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Wed, 18 Jan 2023 18:25:54 +0100 Subject: [PATCH] VBV-243: Add new Versicherungsvermittler learning path --- client/src/stores/courseSessions.ts | 35 +- ...ile.py => create_vv_competence_profile.py} | 2 +- .../create_vv_new_competence_profile.py | 46 + server/vbv_lernwelt/course/consts.py | 1 + .../commands/create_default_courses.py | 61 +- .../management/commands/create_uk_course.py | 2 +- server/vbv_lernwelt/course/views.py | 2 +- ...ing_path.py => create_vv_learning_path.py} | 2 +- .../learnpath/create_vv_new_learning_path.py | 925 ++++++++++++++++++ 9 files changed, 1048 insertions(+), 28 deletions(-) rename server/vbv_lernwelt/competence/{create_default_competence_profile.py => create_vv_competence_profile.py} (99%) create mode 100644 server/vbv_lernwelt/competence/create_vv_new_competence_profile.py rename server/vbv_lernwelt/learnpath/{create_default_learning_path.py => create_vv_learning_path.py} (99%) create mode 100644 server/vbv_lernwelt/learnpath/create_vv_new_learning_path.py diff --git a/client/src/stores/courseSessions.ts b/client/src/stores/courseSessions.ts index 6ecb47b2..e6f57b7a 100644 --- a/client/src/stores/courseSessions.ts +++ b/client/src/stores/courseSessions.ts @@ -33,22 +33,24 @@ function loadCourseSessionsData(reload = false) { reload: reload, }); - // TODO: refactor after implementing of Klassenkonzept - await Promise.all( - courseSessions.value.map(async (cs) => { - const users = (await itGetCached( - `/api/course/sessions/${cs.course.slug}/users/`, - { - reload: reload, - } - )) as CourseSessionUser[]; - cs.users = users; - }) - ); - const userStore = useUserStore(); - if (!courseSessions.value && userStore.loggedIn) { - throw `No courseSessionData found for user`; + if (userStore.loggedIn) { + // TODO: refactor after implementing of Klassenkonzept + await Promise.all( + courseSessions.value.map(async (cs) => { + const users = (await itGetCached( + `/api/course/sessions/${cs.course.slug}/users/`, + { + reload: reload, + } + )) as CourseSessionUser[]; + cs.users = users; + }) + ); + + if (!courseSessions.value) { + throw `No courseSessionData found for user`; + } } } @@ -76,9 +78,10 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => { const courseSessionForRoute = computed(() => { const route = useRoute(); const routePath = decodeURI(route.path); + const courseSlug = routePath.split("/")[2]; return courseSessions.value.find((cs) => { - return routePath.startsWith(cs.course_url); + return cs.course.slug === courseSlug; }); }); diff --git a/server/vbv_lernwelt/competence/create_default_competence_profile.py b/server/vbv_lernwelt/competence/create_vv_competence_profile.py similarity index 99% rename from server/vbv_lernwelt/competence/create_default_competence_profile.py rename to server/vbv_lernwelt/competence/create_vv_competence_profile.py index 0e9a7ea3..e4a954ad 100644 --- a/server/vbv_lernwelt/competence/create_default_competence_profile.py +++ b/server/vbv_lernwelt/competence/create_vv_competence_profile.py @@ -9,7 +9,7 @@ from vbv_lernwelt.course.models import CoursePage from vbv_lernwelt.learnpath.models import LearningPath, LearningUnit -def create_default_competence_profile(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID): +def create_vv_competence_profile(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID): course_page = CoursePage.objects.get(course_id=course_id) slug_prefix = course_page.get_children().exact_type(LearningPath).first().slug diff --git a/server/vbv_lernwelt/competence/create_vv_new_competence_profile.py b/server/vbv_lernwelt/competence/create_vv_new_competence_profile.py new file mode 100644 index 00000000..f72840c7 --- /dev/null +++ b/server/vbv_lernwelt/competence/create_vv_new_competence_profile.py @@ -0,0 +1,46 @@ +from vbv_lernwelt.competence.factories import ( + CompetencePageFactory, + CompetenceProfilePageFactory, +) +from vbv_lernwelt.course.consts import COURSE_VERSICHERUNGSVERMITTLERIN_NEW_ID +from vbv_lernwelt.course.models import CoursePage + + +def create_vv_new_competence_profile(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_NEW_ID): + course_page = CoursePage.objects.get(course_id=course_id) + + competence_profile_page = CompetenceProfilePageFactory( + title="KompetenzNavi", + parent=course_page, + ) + + competences = [ + { + "competence_id": "V1", + "title": "Terminvereinbarung, Vorbereitung und Gesprächseröffnung", + "items": [], + }, + { + "competence_id": "V2", + "title": "Bedarfsanalyse, Ist- und Soll-Situation", + "items": [], + }, + { + "competence_id": "V3", + "title": "Lösungsvorschlag erarbeiten und präsentieren", + "items": [], + }, + { + "competence_id": "V4", + "title": "Gesprächszusammenfassung, Abschluss und Nachbereitung", + "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"]], + ) diff --git a/server/vbv_lernwelt/course/consts.py b/server/vbv_lernwelt/course/consts.py index 9ab911c1..7a82c57a 100644 --- a/server/vbv_lernwelt/course/consts.py +++ b/server/vbv_lernwelt/course/consts.py @@ -1,3 +1,4 @@ COURSE_TEST_ID = -1 COURSE_VERSICHERUNGSVERMITTLERIN_ID = -2 COURSE_UK1 = -3 +COURSE_VERSICHERUNGSVERMITTLERIN_NEW_ID = -4 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 15657b73..35d90c1d 100644 --- a/server/vbv_lernwelt/course/management/commands/create_default_courses.py +++ b/server/vbv_lernwelt/course/management/commands/create_default_courses.py @@ -1,18 +1,22 @@ import djclick as click from wagtail.models import Page -from vbv_lernwelt.competence.create_default_competence_profile import ( - create_default_competence_profile, -) from vbv_lernwelt.competence.create_uk_competence_profile import ( create_uk_competence_profile, ) +from vbv_lernwelt.competence.create_vv_competence_profile import ( + create_vv_competence_profile, +) +from vbv_lernwelt.competence.create_vv_new_competence_profile import ( + create_vv_new_competence_profile, +) from vbv_lernwelt.core.create_default_users import default_users from vbv_lernwelt.core.models import User from vbv_lernwelt.course.consts import ( COURSE_TEST_ID, COURSE_UK1, COURSE_VERSICHERUNGSVERMITTLERIN_ID, + COURSE_VERSICHERUNGSVERMITTLERIN_NEW_ID, ) from vbv_lernwelt.course.creators.test_course import create_test_course from vbv_lernwelt.course.creators.versicherungsvermittlerin import ( @@ -23,8 +27,9 @@ from vbv_lernwelt.course.management.commands.create_uk_course import ( ) from vbv_lernwelt.course.models import CourseSession, CourseSessionUser from vbv_lernwelt.course.services import mark_course_completion -from vbv_lernwelt.learnpath.create_default_learning_path import ( - create_default_learning_path, +from vbv_lernwelt.learnpath.create_vv_learning_path import create_vv_learning_path +from vbv_lernwelt.learnpath.create_vv_new_learning_path import ( + create_vv_new_learning_path, ) from vbv_lernwelt.learnpath.models import Circle from vbv_lernwelt.media_library.create_default_documents import ( @@ -40,8 +45,8 @@ from vbv_lernwelt.media_library.create_default_media_library import ( def command(): # Versicherungsvermittler/in create_versicherungsvermittlerin_with_categories() - create_default_learning_path() - create_default_competence_profile() + create_vv_learning_path() + create_vv_competence_profile() # media library data create_default_collections() @@ -49,7 +54,16 @@ def command(): create_default_media_library() - # Versicherungsvermittler/in + # Versicherungsvermittler/in mit neuen Circles + create_versicherungsvermittlerin_with_categories( + course_id=COURSE_VERSICHERUNGSVERMITTLERIN_NEW_ID, + title="Versicherungsvermittler/-in (neu)", + ) + create_vv_new_competence_profile(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_NEW_ID) + create_vv_new_learning_path() + create_default_media_library(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_NEW_ID) + + # Überbetriebliche Kurse create_versicherungsvermittlerin_with_categories( course_id=COURSE_UK1, title="Überbetriebliche Kurse" ) @@ -97,6 +111,37 @@ def command(): Circle.objects.get(slug="versicherungsvermittler-in-lp-circle-basis") ) + # course session Versicherungsvermittler/in (neu) + cs = CourseSession.objects.create( + course_id=COURSE_VERSICHERUNGSVERMITTLERIN_NEW_ID, + title="Versicherungsvermittler/-in", + ) + 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="student-vv@eiger-versicherungen.ch"), + ) + csu = CourseSessionUser.objects.create( + course_session=cs, + user=User.objects.get(username="expert-vv.einstieg@eiger-versicherungen.ch"), + role=CourseSessionUser.Role.EXPERT, + ) + csu.expert.add( + Circle.objects.get(slug="versicherungsvermittler-in-lp-circle-einstieg") + ) + csu = CourseSessionUser.objects.create( + course_session=cs, + user=User.objects.get(username="expert-vv.analyse@eiger-versicherungen.ch"), + role=CourseSessionUser.Role.EXPERT, + ) + csu.expert.add( + Circle.objects.get(slug="versicherungsvermittler-in-lp-circle-basis") + ) + # course session Überbetriebliche Kurse Lehrjahr 1 - Region Bern cs = CourseSession.objects.create( course_id=COURSE_UK1, 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 b507c1d7..372f24d7 100644 --- a/server/vbv_lernwelt/course/management/commands/create_uk_course.py +++ b/server/vbv_lernwelt/course/management/commands/create_uk_course.py @@ -7,7 +7,7 @@ from wagtail_localize.models import LocaleSynchronization from vbv_lernwelt.core.admin import User from vbv_lernwelt.course.consts import COURSE_UK1 from vbv_lernwelt.course.models import CoursePage -from vbv_lernwelt.learnpath.create_default_learning_path import ( +from vbv_lernwelt.learnpath.create_vv_learning_path import ( create_learning_content_beenden, ) from vbv_lernwelt.learnpath.tests.learning_path_factories import ( diff --git a/server/vbv_lernwelt/course/views.py b/server/vbv_lernwelt/course/views.py index 9ca01fe9..3716ec4e 100644 --- a/server/vbv_lernwelt/course/views.py +++ b/server/vbv_lernwelt/course/views.py @@ -133,7 +133,7 @@ def get_course_sessions(request): except PermissionDenied as e: raise e except Exception as e: - logger.error(e) + logger.error(e, exc_info=True) return Response({"error": str(e)}, status=404) diff --git a/server/vbv_lernwelt/learnpath/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/create_vv_learning_path.py similarity index 99% rename from server/vbv_lernwelt/learnpath/create_default_learning_path.py rename to server/vbv_lernwelt/learnpath/create_vv_learning_path.py index b2627984..d3f2a48a 100644 --- a/server/vbv_lernwelt/learnpath/create_default_learning_path.py +++ b/server/vbv_lernwelt/learnpath/create_vv_learning_path.py @@ -28,7 +28,7 @@ from vbv_lernwelt.learnpath.tests.learning_path_factories import ( READY_HF = ["Fahrzeug", "Reisen"] -def create_default_learning_path( +def create_vv_learning_path( course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, user=None, skip_locales=True ): if user is None: diff --git a/server/vbv_lernwelt/learnpath/create_vv_new_learning_path.py b/server/vbv_lernwelt/learnpath/create_vv_new_learning_path.py new file mode 100644 index 00000000..4249348b --- /dev/null +++ b/server/vbv_lernwelt/learnpath/create_vv_new_learning_path.py @@ -0,0 +1,925 @@ +import wagtail_factories +from django.conf import settings +from django.core.management import call_command +from wagtail.models import Locale, Page, Site +from wagtail.rich_text import RichText +from wagtail_localize.models import LocaleSynchronization + +from vbv_lernwelt.competence.factories import PerformanceCriteriaFactory +from vbv_lernwelt.competence.models import CompetencePage +from vbv_lernwelt.core.admin import User +from vbv_lernwelt.course.consts import COURSE_VERSICHERUNGSVERMITTLERIN_NEW_ID +from vbv_lernwelt.course.models import CourseCategory, CoursePage +from vbv_lernwelt.learnpath.tests.learning_path_factories import ( + AssignmentBlockFactory, + CircleFactory, + LearningContentFactory, + LearningModuleBlockFactory, + LearningPathFactory, + LearningSequenceFactory, + LearningUnitFactory, + ResourceBlockFactory, + TestBlockFactory, + TopicFactory, + VideoBlockFactory, +) + +# todo: remove when all Handlungsfelder are ready +READY_HF = ["Fahrzeug", "Reisen"] + + +def create_vv_new_learning_path( + course_id=COURSE_VERSICHERUNGSVERMITTLERIN_NEW_ID, 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="Basis", is_visible=False, parent=lp) + create_circle_basis(lp) + + TopicFactory(title="Gewinnen von Kunden", parent=lp) + create_circle_gewinnen(lp) + + TopicFactory(title="Beraten der Kunden", parent=lp) + create_circle_fahrzeug(lp) + create_circle_standard( + lp, title="Haushalt", lc_title="Rafael und Claudia ziehen zusammen" + ) + create_circle_reisen(lp) + create_circle_standard( + lp, title="Einkommenssicherung", lc_title="Patrizia und Marco sichern sich ab" + ) + create_circle_standard( + lp, + title="Pensionierung", + lc_title="Giulia und Davide planen ihre Pensionierung", + ) + create_circle_standard( + lp, + title="Gesundheit", + lc_title="Familie Babic erwartet Nachwuchs", + ) + create_circle_standard( + lp, + title="KMU", + lc_title="Anne Fleur übernimmt den Blumenladen", + ) + + TopicFactory(title="Betreuen und Ausbauen des Kundenstamms", parent=lp) + create_circle_betreuen(lp) + + TopicFactory(title="Vertiefen und Festigen", parent=lp) + create_circle_vernetzen(lp) + + TopicFactory(title="Prüfung", parent=lp) + create_circle_pruefung(lp) + + # 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_circle_basis(lp, title="Basis"): + circle = CircleFactory( + title=title, + parent=lp, + description=""" +In diesem Circle erfährst du wie der Lehrgang aufgebaut ist. +Zudem lernst du die wichtigsten Grundlagen, +damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst. + """.strip(), + job_situations=[], + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + contents=[ + ( + "video", + VideoBlockFactory( + url="https://player.vimeo.com/video/772512710?h=30f912f15a", + description="Willkommen im Lehrgang Versicherungsvermitler VBV", + ), + ) + ], + ) + + LearningSequenceFactory( + title="Meine Lernreise", parent=circle, icon="it-icon-ls-watch" + ) + LearningUnitFactory( + title="Lerntechnik, Lernbegleitung, Lernpartner/-in und Einführung in MyVBV", + parent=circle, + ) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Lege dir eine Lernstrategie zurecht", + parent=circle, + ) + LearningContentFactory( + title="Such dir eine/n Lernbegleiter/-in, einen Lern-Buddy und plane deine Lernzeiten", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck", + parent=circle, + ) + + LearningSequenceFactory( + title="Mein neuer Job", parent=circle, icon="it-icon-ls-watch" + ) + LearningUnitFactory( + title="Mein neuer Job, Arbeitstechnik, Soziale Medien, Datenschutz und Beratungspflichten", + parent=circle, + ) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Mein neuer Job", + parent=circle, + ) + LearningContentFactory( + title="Organisiere deinen Arbeitsalltag", + parent=circle, + ) + LearningContentFactory( + title="Soziale Medien und Datenschutz", + parent=circle, + ) + LearningContentFactory( + title="Beraterpflichten (inkl. VBV-WBT)", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Beraterpflichten", + parent=circle, + ) + + LearningSequenceFactory(title="Basiswissen", parent=circle, icon="it-icon-ls-watch") + LearningUnitFactory( + title="Basiswissen Versicherungen, VVG", + parent=circle, + ) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Basiswissen Versicherungen (inkl. VBV-WBT)", + parent=circle, + ) + LearningContentFactory( + title="VVG im Versicherungsalltag (inkl. VBV-WBT)", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Versicherungswirtschaft", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Versicherungsrecht", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + create_learning_content_beenden(circle) + + +def create_circle_gewinnen(lp, title="Gewinnen"): + circle = CircleFactory( + title=title, + parent=lp, + description=""" +Neue Kunden zu gewinnen ist ein wesentlicher Bestandteil deiner beruflichen Tätigkeit. +Dies sichert dir langfristig deine finanzielle Basis. Dieser Circle fokussiert darauf, +wie du dein Netzwerk aufbauen und erweitern kannst, um damit neue Kunden zu gewinnen. +""".strip(), + goal_description="In diesem Circle baust du deine Handlungskompetenzen für diese Themen aus:", + goals=[ + ("goal", "Weiterempfehlungen generieren"), + ("goal", "Leads generieren"), + ("goal", "Neue Kunden gewinnen"), + ("goal", "Soziale Medien pflegen"), + ], + job_situations=[], + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + ) + + LearningSequenceFactory( + title="Beraten und Verkaufen", parent=circle, icon="it-icon-ls-watch" + ) + LearningUnitFactory(title="Verkaufsgrundlagen", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Verkaufsgrundlagen", + parent=circle, + ) + LearningContentFactory( + title="Sich und das Unternehmen vorstellen", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Verkaufsgrundlagen", + parent=circle, + ) + LearningContentFactory( + title="Selbsteinschätzung", + parent=circle, + ) + + LearningSequenceFactory( + title="Kundengewinnung", parent=circle, icon="it-icon-ls-watch" + ) + LearningUnitFactory(title="????", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Vom Lead zum Termin/Telefon auf Empfehlung/Neukundengewinnung", + parent=circle, + ) + LearningContentFactory( + title="Mein Kundenstamm", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck ????", + parent=circle, + ) + LearningContentFactory( + title="Selbsteinschätzung", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + create_learning_content_beenden(circle) + + +def create_circle_fahrzeug(lp, title="Fahrzeug"): + circle = CircleFactory( + title=title, + parent=lp, + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + contents=[ + ( + "video", + VideoBlockFactory( + url="https://player.vimeo.com/video/772512710?h=30f912f15a", + description="Willkommen im Lehrgang Versicherungsvermitler VBV", + ), + ) + ], + ) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + + LearningSequenceFactory(title="Einstieg", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Rafael Fasel wechselt sein Auto - Einstieg", + parent=circle, + category_name="Fahrzeug", + competence_id="V1", + wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/rafael-fasel-wechselt-sein-auto-einstieg-xapi-yXLHE5Xo/index.html", + learning_unit_title="Terminvereinbarung, Vorbereitung und Gesprächseröffnung", + ) + + LearningSequenceFactory(title="Analyse", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Rafael Fasel wechselt sein Auto - Analyse", + parent=circle, + category_name="Fahrzeug", + competence_id="V2", + wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/rafael-fasel-wechselt-sein-auto-analyse-xapi-SmrKAa0J/index.html", + learning_unit_title="Bedarfsanalyse, Ist- und Soll-Situation", + ) + + LearningSequenceFactory(title="Lösung", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Rafael Fasel wechselt sein Auto - Lösung", + parent=circle, + category_name="Fahrzeug", + competence_id="V3", + wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/rafael-fasel-wechselt-sein-auto-losung-xapi-3rzf8ySd/index.html", + learning_unit_title="Lösungsvorschlag erarbeiten und präsentieren", + ) + + LearningSequenceFactory(title="Abschluss", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Rafael Fasel wechselt sein Auto - Abschluss", + parent=circle, + category_name="Fahrzeug", + competence_id="V4", + wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/rafael-fasel-wechselt-sein-auto-abschluss-xapi-WbFBv-4y/index.html", + learning_unit_title="Gesprächszusammenfassung, Abschluss und Nachbereitung", + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Transferauftrag", parent=circle) + create_learning_content_transferauftrag("Rafael Fasel wechselt sein Auto", circle) + LearningUnitFactory(title="Fachchecks", parent=circle) + LearningContentFactory( + title=f"Fachcheck", + parent=circle, + contents=[ + ( + "test", + TestBlockFactory( + url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/fach-check-fahrzeug-xapi-LqpAWv1J/index.html" + ), + ) + ], + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + create_learning_content_beenden(circle) + + +def create_circle_reisen(lp, title="Reisen"): + circle = CircleFactory( + title=title, + parent=lp, + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + contents=[ + ( + "video", + VideoBlockFactory( + url="https://player.vimeo.com/video/772512710?h=30f912f15a", + description="Willkommen im Lehrgang Versicherungsvermitler VBV", + ), + ) + ], + ) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + + LearningSequenceFactory(title="Einstieg", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Emma und Ayla campen durch Amerika - Einstieg", + parent=circle, + category_name=title, + competence_id="V1", + wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-einstieg-xapi-_BfVBK8d/index.html", + learning_unit_title="Terminvereinbarung, Vorbereitung und Gesprächseröffnung", + ) + + LearningSequenceFactory(title="Analyse", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Emma und Ayla campen durch Amerika - Analyse", + parent=circle, + category_name=title, + competence_id="V2", + wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-analyse-xapi-mtXA4uBz/index.html", + learning_unit_title="Bedarfsanalyse, Ist- und Soll-Situation", + ) + + LearningSequenceFactory(title="Lösung", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Emma und Ayla campen durch Amerika - Lösung", + parent=circle, + category_name=title, + competence_id="V3", + wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-losung-xapi-hn7GwUTn/index.html", + learning_unit_title="Lösungsvorschlag erarbeiten und präsentieren", + ) + + LearningSequenceFactory(title="Abschluss", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Emma und Ayla campen durch Amerika - Abschluss", + parent=circle, + category_name=title, + competence_id="V4", + wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-abschluss-xapi-Qv4X-yua/index.html", + learning_unit_title="Gesprächszusammenfassung, Abschluss und Nachbereitung", + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Transferauftrag", parent=circle) + create_learning_content_transferauftrag( + "Emma und Ayla campen durch Amerika", circle + ) + LearningUnitFactory(title="Fachchecks", parent=circle) + LearningContentFactory( + title=f"Fachcheck", + parent=circle, + contents=[ + ( + "test", + TestBlockFactory( + url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/fach_check_reisen/index.html" + ), + ) + ], + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + create_learning_content_beenden(circle) + + +def create_circle_standard(lp, title, lc_title): + circle = CircleFactory( + title=title, + parent=lp, + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + contents=[ + ( + "video", + VideoBlockFactory( + url="https://player.vimeo.com/video/772512710?h=30f912f15a", + description="Willkommen im Lehrgang Versicherungsvermitler VBV", + ), + ) + ], + ) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + + LearningSequenceFactory(title="Einstieg", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + f"{lc_title} - Einstieg", + parent=circle, + category_name=title, + competence_id="V1", + learning_unit_title="Terminvereinbarung, Vorbereitung und Gesprächseröffnung", + ) + + LearningSequenceFactory(title="Analyse", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + f"{lc_title} - Analyse", + parent=circle, + category_name=title, + competence_id="V2", + learning_unit_title="Bedarfsanalyse, Ist- und Soll-Situation", + ) + + LearningSequenceFactory(title="Lösung", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + f"{lc_title} - Lösung", + parent=circle, + category_name=title, + competence_id="V3", + learning_unit_title="Lösungsvorschlag erarbeiten und präsentieren", + ) + + LearningSequenceFactory(title="Abschluss", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + f"{lc_title} - Abschluss", + parent=circle, + category_name=title, + competence_id="V4", + learning_unit_title="Gesprächszusammenfassung, Abschluss und Nachbereitung", + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Transferauftrag", parent=circle) + create_learning_content_transferauftrag(lc_title, circle) + LearningUnitFactory(title="Fachchecks", parent=circle) + LearningContentFactory( + title=f"Fachcheck", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + create_learning_content_beenden(circle) + + +def create_circle_betreuen(lp, title="Betreuen"): + circle = CircleFactory( + title=title, + parent=lp, + description="Einen Kunden einmal zu beraten ist eine Sache. Einen Kunden nachhaltig zu betreuen eine andere! In diesem Circle lernst du, wie deine Kunden zufrieden bleiben und du dein Portfolio ausbauen kannst.", + goal_description="In diesem Circle baust du deine Handlungskompetenzen für diese Themen aus:", + goals=[ + ("goal", "Cross- und Upselling anwenden"), + ("goal", "Bestehende Verträge anpassen"), + ("goal", "Bestehende Kunden pflegen"), + ("goal", "Prozess im Schadenfall erklären"), + ], + job_situation_description="Du triffst in diesem Circle auf die folgenden berufstypischen Handlungsfelder:", + job_situations=[ + ("job_situation", "Selbstständigkeit"), + ("job_situation", "Rechtsstreitigkeiten"), + ("job_situation", "Haushalt"), + ("job_situation", "Sparen"), + ("job_situation", "Pensionierung"), + ("job_situation", "Wohneigentum"), + ("job_situation", "Erben/Vererben"), + ], + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + ) + + LearningSequenceFactory( + title="Rechtsstreitigkeiten", parent=circle, icon="it-icon-ls-watch" + ) + LearningUnitFactory(title="Rechtsstreitigkeiten", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Rafael Fasel hat Ärger mit seinem Vermieter", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck", + parent=circle, + ) + + LearningSequenceFactory(title="Sparen", parent=circle, icon="it-icon-ls-watch") + LearningUnitFactory(title="Sparen", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Familie Babic spart auf ein Ziel", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck", + parent=circle, + ) + + LearningSequenceFactory( + title="Wohneigentum", parent=circle, icon="it-icon-ls-watch" + ) + LearningUnitFactory(title="Wohneigentum", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Familie Bonsera kauft ein Haus", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck", + parent=circle, + ) + + LearningSequenceFactory( + title="Selbstständigkeit", parent=circle, icon="it-icon-ls-watch" + ) + LearningUnitFactory(title="Selbstständigkeit", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Patrizia Feller macht sich selbstständig", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck", + parent=circle, + ) + + LearningSequenceFactory( + title="Erben/Vererben", parent=circle, icon="it-icon-ls-watch" + ) + LearningUnitFactory(title="Erben/Vererben", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Davide und Giulia vererben ihr Haus", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + create_learning_content_beenden(circle) + + +def create_circle_vernetzen(lp, title="Vernetzen"): + circle = CircleFactory( + title=title, + parent=lp, + description="Du suchst nach einer Möglichkeit, das Gelernte noch besser zu vernetzen? Unsere Onlinetraining und/oder Webinare können dich dabei unterstützen.", + goals=[], + job_situations=[], + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + LearningSequenceFactory( + title="Online-Trainings", parent=circle, icon="it-icon-ls-watch" + ) + LearningUnitFactory(title="Lerneinheit offen", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + LearningSequenceFactory( + title="Präsenz-Trainings", parent=circle, icon="it-icon-ls-watch" + ) + LearningUnitFactory(title="Lerneinheit offen", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Lerneinheit offen", parent=circle) + create_learning_content_beenden(circle) + + +def create_circle_pruefung(lp, title="Prüfungsvorbereitung"): + circle = CircleFactory( + title=title, + parent=lp, + description="Hier erfährst du alles, was du für die Zulassungsprüfung zum/zur Versicherungsvermittler/-in VBV wissen musst. Du trainierst konkret mit zwei Nullserien, damit du dich zielgerichtet auf die Prüfung vorbereiten kannst.", + goal_description="Hier erfährst du alles, was du für die Zulassungsprüfung zum/zur Versicherungsvermittler/-in VBV wissen musst:", + goals=[ + ("goal", "Aufbau und Struktur der Prüfung"), + ("goal", "Dauer und Ablauf"), + ("goal", "Hilfsmittel"), + ("goal", "Anmeldeprozess"), + ("goal", "Kosten"), + ], + job_situations=[], + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Prüfung", parent=circle) + LearningContentFactory( + title="Anmeldung", + parent=circle, + ) + LearningContentFactory( + title="Aufbau und Ablauf der Prüfung - So geht's", + parent=circle, + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Mach dich fit für die Prüfung", parent=circle) + LearningContentFactory( + title="Null-Serie 1", + parent=circle, + ) + LearningContentFactory( + title="Null-Serie 2", + parent=circle, + ) + LearningContentFactory( + title="Null-Serie 3", + parent=circle, + ) + + LearningSequenceFactory(title="Vernetzen", parent=circle, icon="it-icon-ls-network") + LearningUnitFactory(title="Fragen zur Prüfungsvorbereitung", parent=circle) + LearningContentFactory( + title="Online-Session", + parent=circle, + ) + LearningContentFactory( + title="FAQ/Blog", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Bereit für die Prüfung", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + +def create_standard_learning_unit( + title, + parent, + category_name, + competence_id="V1", + wbt_url=None, + check_url=None, + learning_unit_title=None, +): + if learning_unit_title is None: + learning_unit_title = category_name + + lu = LearningUnitFactory( + title=learning_unit_title, + parent=parent, + course_category=CourseCategory.objects.get( + course_id=COURSE_VERSICHERUNGSVERMITTLERIN_NEW_ID, title=category_name + ), + ) + + if wbt_url is None: + LearningContentFactory( + title=title, + parent=parent, + ) + else: + LearningContentFactory( + title=title, + parent=parent, + contents=[ + ( + "learningmodule", + LearningModuleBlockFactory(url=wbt_url), + ) + ], + ) + + competence_page = CompetencePage.objects.get(competence_id=competence_id) + PerformanceCriteriaFactory( + parent=competence_page, + competence_id=f"{competence_id}.{category_name}", + title=f"Ich bin fähig bei {category_name} eine {competence_page.title} zu machen", + learning_unit=lu, + ) + + +def create_learning_content_beenden(parent): + LearningContentFactory( + title="Hier entsteht die Lernsequenz «beenden»", + parent=parent, + contents=[ + ( + "resource", + ResourceBlockFactory( + url="https://www.vbv.ch/", + description="Platzhalter Text für Lernsequenz «beenden»:", + text=RichText( + """ +

Hier entsteht die Lernsequenz \u00abbeenden\u00bb

Reflektiert

+ +

Du hast dich im + Circle mit bestimmten Handlungskompetenzen auseinandergesetzt und dir zu verschiedenen + Handlungsfeldern Fachkenntnisse angeeignet. Es handelt sich hier um viel Lernstoff, + der verarbeitet werden muss.

Deshalb hast du bereits am + Ende jeder Lerneinheit eine Selbsteinsch\u00e4tzung der angestrebten + Handlungskompetenzen vorgenommen. Nun ist es Zeit, nochmals auf das KompetenzNavi zu + schauen. Wo sind noch L\u00fccken? Was braucht es noch? Reflektiere hier nochmals + deine Erfahrungen. Dies kann in Form eines Lerntagebuchs und/oder im Austausch mit + deiner Lernbegleitung passieren.

Wieso ist dies + sinnvoll?

Das F\u00fchren eines Lerntagebuchs und das + Beantworten von Reflexionsfragen helfen dir den eigenen Lern- und Denkprozess sichtbar + und begreifbar zu machen. Es deckt deine pers\u00f6nlichen St\u00e4rken und + Schw\u00e4chen w\u00e4hrend der Erarbeitung auf und hilft dir, dich laufend zu + verbessern.

Die folgenden Fragestellungen k\u00f6nnen dir + dabei helfen.

Reflexionsbeispiel zum Lerninhalt:

+

Reflexionsbeispiele zum Vorgehen/Verhalten:

+

Tools, die du f\u00fcr deine Reflexion in Form eines + Lerntagebuches verwenden kannst:

+

Der Vorteil eines digitalen Lerntagebuchs besteht in + erster Linie darin, dass sehr einfach Inhalte strukturiert, erg\u00e4nzt und + bearbeitet werden k\u00f6nnen.

+ """ + ), + ), + ) + ], + ) + + +def create_learning_content_transferauftrag(title, parent): + LearningContentFactory( + title=title, + parent=parent, + contents=[ + ( + "assignment", + AssignmentBlockFactory( + url="https://www.vbv.ch/", + description="Platzhalter Text für Lernsequenz «üben»:", + text=RichText( + """ +

Hier entsteht die Lernsequenz «üben»

Praxisorientiert

+

Die Lernsequenz «üben» fordert die Teilnehmenden auf, in der eigenen Organisation anhand eines Transferauftrages eine entsprechende Handlungssituation durchzuführen.

+

Der Auftrag unterstützt den Transfer in die Praxis und nimmt einzelne Themen aus dem jeweiligen Circle nochmals auf.

+

Der Teilnehmende wird sein Ergebnis in MyVBV hochladen.

+

Feedback erfolgt durch die Lernbegleitung oder durch weitere vom Teilnehmenden definierte Personen.
Ein Abgleich mit Musterlösungen wird wo sinnvoll angeboten

+

Zusätzlich zum Auftrag wird auf das relevante Fachwissen aus der Mediathek verwiesen und wo sinnvoll Hilfsmittel zur Verfügung gestellt.

+

Hier siehst du ein Beispiel eines Transferauftrages mit einer entsprechenden Musterlösung.

+

Schnuppere mal rein. Viel Spass!

+

+ +

+

+ PDF Transferauftrag: Der erste Eindruck zählt
+ PDF Transferauftrag: Der erste Eindruck zählt - Lösung +

+ """ + ), + ), + ) + ], + )