diff --git a/server/config/urls.py b/server/config/urls.py index 9e8dbc6f..715f2319 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -61,7 +61,7 @@ urlpatterns = [ # course path(r"api/course/sessions/", get_course_sessions, name="get_course_sessions"), - path(r"api/course/page//", course_page_api_view, + path(r"api/course/page//", course_page_api_view, name="course_page_api_view"), path(r"api/course/completion/mark/", mark_course_completion, name="mark_course_completion"), diff --git a/server/vbv_lernwelt/competence/create_default_competence_profile.py b/server/vbv_lernwelt/competence/create_default_competence_profile.py index 07c44053..0e9a7ea3 100644 --- a/server/vbv_lernwelt/competence/create_default_competence_profile.py +++ b/server/vbv_lernwelt/competence/create_default_competence_profile.py @@ -5,13 +5,13 @@ from vbv_lernwelt.competence.factories import ( ) from vbv_lernwelt.competence.models import CompetencePage from vbv_lernwelt.course.consts import COURSE_VERSICHERUNGSVERMITTLERIN_ID -from vbv_lernwelt.course.models import Course, CoursePage -from vbv_lernwelt.learnpath.models import LearningUnit +from vbv_lernwelt.course.models import CoursePage +from vbv_lernwelt.learnpath.models import LearningPath, LearningUnit -def create_default_competence_profile(): - course = Course.objects.get(id=COURSE_VERSICHERUNGSVERMITTLERIN_ID) - course_page = CoursePage.objects.get(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID) +def create_default_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 competence_profile_page = CompetenceProfilePageFactory( title="KompetenzNavi", @@ -133,380 +133,470 @@ def create_default_competence_profile(): # Daten anhand von WEVM_Version Oktober 2022 # Einstieg/Beobachten – Selbsteinschätzung «Einkommenssicherung» PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A2" + ), competence_id="A2.1", title="Ich bin fähig je nach (Neu-) Kunde Form und Ort für das Gespräch festzulegen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-einkommenssicherung" + slug=f"{slug_prefix}-circle-einstieg-lu-einkommenssicherung" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A2" + ), competence_id="A2.2", title="Ich bin fähig mir intern und extern die nötigen Informationen über den (Neu-) Kunden zu beschaffen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-einkommenssicherung" + slug=f"{slug_prefix}-circle-einstieg-lu-einkommenssicherung" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A2" + ), competence_id="A2.3", title="Ich bin fähig die Terminierung auf das Thema Einkommenssicherung auszurichten.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-einkommenssicherung" + slug=f"{slug_prefix}-circle-einstieg-lu-einkommenssicherung" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A2" + ), competence_id="A2.4", title="Ich bin fähig für das zu führende Gespräch eine Agenda zu erstellen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-einkommenssicherung" + slug=f"{slug_prefix}-circle-einstieg-lu-einkommenssicherung" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A2" + ), competence_id="A2.5", title="Ich bin fähig für das Handlungsfeld «Einkommenssicherung» geeignete Hilfsmittel und Unterlagen zusammenzustellen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-einkommenssicherung" + slug=f"{slug_prefix}-circle-einstieg-lu-einkommenssicherung" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B1" + ), competence_id="B1.1", title="Ich bin fähig dem Kunden den Gesprächsablauf und den Zeitrahmen (mittels Agenda) aufzuzeigen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-einkommenssicherung" + slug=f"{slug_prefix}-circle-einstieg-lu-einkommenssicherung" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B1" + ), competence_id="B1.2", title="Ich bin fähig mich beim Kunden korrekt zu identifizieren (VAG 45).", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-einkommenssicherung" + slug=f"{slug_prefix}-circle-einstieg-lu-einkommenssicherung" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B2" + ), competence_id="B2.3", title="Ich bin fähig alle erforderlichen Unterlagen einzufordern.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-einkommenssicherung" + slug=f"{slug_prefix}-circle-einstieg-lu-einkommenssicherung" ), ) # Einstieg / Anwenden – Selbsteinschätzung «Fahrzeug» PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A1" + ), competence_id="A1.6", title="Ich bin fähig im täglichen Kontakt potenzielle Kundinnen und Kunden zu erkennen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-fahrzeug" + slug=f"{slug_prefix}-circle-einstieg-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A2" + ), competence_id="A2.1", title="Ich bin fähig je nach (Neu-) Kunde Form und Ort für das Gespräch festzulegen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-fahrzeug" + slug=f"{slug_prefix}-circle-einstieg-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A2" + ), competence_id="A2.2", title="Ich bin fähig mir intern und extern die nötigen Informationen über den (Neu-) Kunden zu beschaffen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-fahrzeug" + slug=f"{slug_prefix}-circle-einstieg-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A2" + ), competence_id="A2.3", title="Ich bin fähig die Terminierung auf das Thema Fahrzeug auszurichten.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-fahrzeug" + slug=f"{slug_prefix}-circle-einstieg-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A2" + ), competence_id="A2.4", title="Ich bin fähig für das zu führende Gespräch eine Agenda zu erstellen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-fahrzeug" + slug=f"{slug_prefix}-circle-einstieg-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A2" + ), competence_id="A2.5", title="Ich bin fähig für das zu führende Gespräch geeignete Hilfsmittel und Unterlagen zusammenzustellen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-fahrzeug" + slug=f"{slug_prefix}-circle-einstieg-lu-fahrzeug" ), ) # Einstieg / Anwenden – Selbsteinschätzung «Reisen» PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A2" + ), competence_id="A2.3", title="Ich bin fähig die Terminierung auf das Thema Reisen auszurichten.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-reisen" + slug=f"{slug_prefix}-circle-einstieg-lu-reisen" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A2" + ), competence_id="A2.4", title="Ich bin fähig für das zu führende Gespräch eine Agenda zu erstellen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-reisen" + slug=f"{slug_prefix}-circle-einstieg-lu-reisen" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A2" + ), competence_id="A2.5", title="Ich bin fähig für das zu führende Gespräch geeignete Hilfsmittel und Unterlagen zusammenzustellen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-einstieg-lu-reisen" + slug=f"{slug_prefix}-circle-einstieg-lu-reisen" ), ) # Analyse / Beobachten – Selbsteinschätzung «Einkommenssicherung» PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A1" + ), competence_id="A1.5", title="Innerhalb des Handlungsfelds «Einkommenssicherung» bin ich fähig, das Thema Risiko und Sicherheit in einem Gespräch gezielt und auf die Situation des jeweiligen Gesprächspartners bezogen, einfliessen zu lassen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-analyse-lu-einkommenssicherung" + slug=f"{slug_prefix}-circle-analyse-lu-einkommenssicherung" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B1" + ), competence_id="B1.3", title="Innerhalb des Handlungsfelds «Einkommenssicherung» bin ich fähig, die Ziele und Pläne des Kunden zu ergründen (SOLL).", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-analyse-lu-einkommenssicherung" + slug=f"{slug_prefix}-circle-analyse-lu-einkommenssicherung" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B2" + ), competence_id="B2.1", title="Innerhalb des Handlungsfelds «Einkommenssicherung» bin ich fähig, die IST-Situation des Kunden mit der geeigneten Gesprächs-/Fragetechnik zu erfassen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-analyse-lu-einkommenssicherung" + slug=f"{slug_prefix}-circle-analyse-lu-einkommenssicherung" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B2" + ), competence_id="B2.2", title="Innerhalb des Handlungsfelds «Einkommenssicherung» bin ich fähig, die Risiken aufzuzeigen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-analyse-lu-einkommenssicherung" + slug=f"{slug_prefix}-circle-analyse-lu-einkommenssicherung" ), ) # Analyse/Anwenden – Selbsteinschätzung «Fahrzeug» PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B1" + ), competence_id="B1.3", title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die Ziele und Pläne des Kunden zu ergründen (SOLL).", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-analyse-lu-fahrzeug" + slug=f"{slug_prefix}-circle-analyse-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B2" + ), competence_id="B2.1", title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die IST-Situation des Kunden mit der geeigneten Gesprächs-/Fragetechnik zu erfassen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-analyse-lu-fahrzeug" + slug=f"{slug_prefix}-circle-analyse-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B2" + ), competence_id="B2.2", title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die Risiken aufzuzeigen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-analyse-lu-fahrzeug" + slug=f"{slug_prefix}-circle-analyse-lu-fahrzeug" ), ) # Analyse/Anwenden – Selbsteinschätzung «Reisen» PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B1" + ), competence_id="B1.3", title="Innerhalb des Handlungsfelds «Reisen» bin ich fähig, die Ziele und Pläne des Kunden zu ergründen (SOLL).", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-analyse-lu-reisen" + slug=f"{slug_prefix}-circle-analyse-lu-reisen" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B2" + ), competence_id="B2.1", title="Innerhalb des Handlungsfelds «Reisen» bin ich fähig, die IST-Situation des Kunden mit der geeigneten Gesprächs-/Fragetechnik zu erfassen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-analyse-lu-reisen" + slug=f"{slug_prefix}-circle-analyse-lu-reisen" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B2"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B2" + ), competence_id="B2.2", title="Innerhalb des Handlungsfelds «Reisen» bin ich fähig, die Risiken aufzuzeigen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-analyse-lu-reisen" + slug=f"{slug_prefix}-circle-analyse-lu-reisen" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="C1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="C1" + ), competence_id="C1.1", title="Innerhalb des Handlungsfelds «Reisen» durch eine Bestandesaufnahme der aktuellen Policen zu prüfen, ob die Leistungen dem Bedarf des Kunden entsprechen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-analyse-lu-reisen" + slug=f"{slug_prefix}-circle-analyse-lu-reisen" ), ) # Lösung/Anwenden – Selbsteinschätzung «Fahrzeug» PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B4"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B4" + ), competence_id="B4.2", title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, dem Kunden die Vorschläge verständlich zu erläutern und die entsprechenden Informationspflichten zu erfüllen", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-lösung-lu-fahrzeug" + slug=f"{slug_prefix}-circle-lösung-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B4"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B4" + ), competence_id="B4.3", title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, auf Vorbehalte und/oder Fragen sachlich korrekt und (verhandlungs-)sicher einzugehen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-lösung-lu-fahrzeug" + slug=f"{slug_prefix}-circle-lösung-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B4"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B4" + ), competence_id="B4.4", title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, nötige Anpassungen flexibel vorzunehmen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-lösung-lu-fahrzeug" + slug=f"{slug_prefix}-circle-lösung-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="C1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="C1" + ), competence_id="C1.1", title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig durch eine Bestandesaufnahme der aktuellen Policen zu prüfen, ob die Leistungen dem Bedarf des Kunden entsprechen", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-lösung-lu-fahrzeug" + slug=f"{slug_prefix}-circle-lösung-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="C1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="C1" + ), competence_id="C1.2", title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, den Kunden bedarfsgerechte Vorschläge für Anpassungen der Versicherungslösung zu unterbreiten (Up-Selling).", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-lösung-lu-fahrzeug" + slug=f"{slug_prefix}-circle-lösung-lu-fahrzeug" ), ) # Lösung/Anwenden – Selbsteinschätzung «Reisen» PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B3"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B3" + ), competence_id="B3.2", title="Innerhalb des Handlungsfelds «Reisen» bin ich fähig, eine Unterversicherung, eine Doppel- oder Überversicherung, einen fehlenden Versicherungsschutz und mögliches Optimierungspotential festzustellen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-lösung-lu-reisen" + slug=f"{slug_prefix}-circle-lösung-lu-reisen" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B4"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B4" + ), competence_id="B4.2", title="Innerhalb des Handlungsfelds «Reisen» bin ich fähig, dem Kunden die Vorschläge verständlich zu erläutern und die entsprechenden Informationspflichten zu erfüllen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-lösung-lu-reisen" + slug=f"{slug_prefix}-circle-lösung-lu-reisen" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B4"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B4" + ), competence_id="B4.3", title="Innerhalb des Handlungsfelds «Reisen» bin ich fähig, auf Vorbehalte und/oder Fragen sachlich korrekt und (verhandlungs-)sicher einzugehen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-lösung-lu-reisen" + slug=f"{slug_prefix}-circle-lösung-lu-reisen" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B4"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B4" + ), competence_id="B4.4", title="Innerhalb des Handlungsfelds «Reisen» bin ich fähig, nötige Anpassungen flexibel vorzunehmen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-lösung-lu-reisen" + slug=f"{slug_prefix}-circle-lösung-lu-reisen" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="C1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="C1" + ), competence_id="C1.2", title="Innerhalb des Handlungsfelds «Reisen» bin ich fähig, den Kunden bedarfsgerechte Vorschläge für Anpassungen der Versicherungslösung zu unterbreiten (Up-Selling).", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-lösung-lu-reisen" + slug=f"{slug_prefix}-circle-lösung-lu-reisen" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="C1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="C1" + ), competence_id="C1.3", title="Innerhalb des Handlungsfelds «Reisen» bin ich fähig aufgrund des Portfolios passende Zusatzprodukte anzubieten (Cross-Selling).", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-lösung-lu-reisen" + slug=f"{slug_prefix}-circle-lösung-lu-reisen" ), ) # Abschluss/Anwenden – Selbsteinschätzung «Fahrzeug» PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A1" + ), competence_id="A1.2", title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, geeignete Personen wie z.B. Garagisten, Architekten, Treuhänder auf die Vermittlung/Zusammenarbeit anzusprechen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-abschluss-lu-fahrzeug" + slug=f"{slug_prefix}-circle-abschluss-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="A4"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="A4" + ), competence_id="A4.1", title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, Kundendaten in Datenbanken (CRM) korrekt zu erfassen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-abschluss-lu-fahrzeug" + slug=f"{slug_prefix}-circle-abschluss-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B4"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B4" + ), competence_id="B4.6", title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, Anträge korrekt auszufüllen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-abschluss-lu-fahrzeug" + slug=f"{slug_prefix}-circle-abschluss-lu-fahrzeug" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="C1"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="C1" + ), competence_id="C1.3", title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, aufgrund des Portfolios passende Zusatzprodukte anzubieten (Cross-Selling).", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-abschluss-lu-fahrzeug" + slug=f"{slug_prefix}-circle-abschluss-lu-fahrzeug" ), ) # Abschluss / Anwenden – Selbsteinschätzung «Reisen» PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="B4"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="B4" + ), competence_id="B4.6", title="Innerhalb des Handlungsfelds «Reisen» bin ich fähig, Anträge korrekt auszufüllen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-abschluss-lu-reisen" + slug=f"{slug_prefix}-circle-abschluss-lu-reisen" ), ) PerformanceCriteriaFactory( - parent=CompetencePage.objects.get(competence_id="C3"), + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="C3" + ), competence_id="C3.1", title="Innerhalb des Handlungsfelds «Reisen» bin ich fähig, Kunden die Vorgehensweise für die Meldung des Schadens nachvollziehbar zu erläutern und sie bei Bedarf zu unterstützen.", learning_unit=LearningUnit.objects.get( - slug="versicherungsvermittlerin-lp-circle-abschluss-lu-reisen" + slug=f"{slug_prefix}-circle-abschluss-lu-reisen" ), ) diff --git a/server/vbv_lernwelt/core/create_default_users.py b/server/vbv_lernwelt/core/create_default_users.py index bf3ce21e..492ee958 100644 --- a/server/vbv_lernwelt/core/create_default_users.py +++ b/server/vbv_lernwelt/core/create_default_users.py @@ -117,6 +117,17 @@ def create_default_users(user_model=User, group_model=Group, default_password=No last_name="Einstieg", ) + _create_student_user( + email="trainer-uk1.analyse@vbv-afa.ch", + first_name="Trainer", + last_name="Analyse", + ) + _create_student_user( + email="trainer-uk1.einstieg@vbv-afa.ch", + first_name="Trainer", + last_name="Einstieg", + ) + def _get_or_create_user(user_model, *args, **kwargs): username = kwargs.get("username", None) diff --git a/server/vbv_lernwelt/course/consts.py b/server/vbv_lernwelt/course/consts.py index c48afa93..9ab911c1 100644 --- a/server/vbv_lernwelt/course/consts.py +++ b/server/vbv_lernwelt/course/consts.py @@ -1,2 +1,3 @@ COURSE_TEST_ID = -1 COURSE_VERSICHERUNGSVERMITTLERIN_ID = -2 +COURSE_UK1 = -3 diff --git a/server/vbv_lernwelt/course/creators/versicherungsvermittlerin.py b/server/vbv_lernwelt/course/creators/versicherungsvermittlerin.py index a23109b2..66fb771e 100644 --- a/server/vbv_lernwelt/course/creators/versicherungsvermittlerin.py +++ b/server/vbv_lernwelt/course/creators/versicherungsvermittlerin.py @@ -6,7 +6,12 @@ from vbv_lernwelt.course.consts import COURSE_VERSICHERUNGSVERMITTLERIN_ID from vbv_lernwelt.course.factories import CoursePageFactory -def create_versicherungsvermittlerin_with_categories(apps=None, schema_editor=None): +def create_versicherungsvermittlerin_with_categories( + apps=None, + schema_editor=None, + course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, + title="Versicherungsvermittler/in", +): if apps is not None: Course = apps.get_model("course", "Course") CourseCategory = apps.get_model("course", "CourseCategory") @@ -15,8 +20,8 @@ def create_versicherungsvermittlerin_with_categories(apps=None, schema_editor=No from vbv_lernwelt.course.models import Course, CourseCategory course, _ = Course.objects.get_or_create( - id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, - title="Versicherungsvermittler/in", + id=course_id, + title=title, category_name="Handlungsfeld", ) @@ -48,7 +53,7 @@ def create_versicherungsvermittlerin_with_categories(apps=None, schema_editor=No site.save() course_page = CoursePageFactory( - title="Versicherungsvermittler/in", + title=title, parent=site.root_page, course=course, ) 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 64458598..8bfa5c33 100644 --- a/server/vbv_lernwelt/course/management/commands/create_default_courses.py +++ b/server/vbv_lernwelt/course/management/commands/create_default_courses.py @@ -7,6 +7,7 @@ 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, ) from vbv_lernwelt.course.creators.test_course import create_test_course @@ -29,16 +30,25 @@ from vbv_lernwelt.media_library.create_default_media_library import ( @click.command() def command(): + # Versicherungsvermittler/in create_versicherungsvermittlerin_with_categories() - create_default_learning_path() create_default_competence_profile() - # media library + # media library data create_default_collections() create_default_documents() + create_default_media_library() + # Versicherungsvermittler/in + create_versicherungsvermittlerin_with_categories( + course_id=COURSE_UK1, title="Überbetriebliche Kurse" + ) + create_default_learning_path(course_id=COURSE_UK1) + create_default_competence_profile(course_id=COURSE_UK1) + create_default_media_library(course_id=COURSE_UK1) + # test course create_test_course() @@ -48,9 +58,10 @@ def command(): title="Test Lehrgang Session", ) + # course session Versicherungsvermittler/in cs = CourseSession.objects.create( course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, - title="Versicherungsvermittler/in Session", + title="Versicherungsvermittler/in", ) for user_data in default_users: CourseSessionUser.objects.create( @@ -72,3 +83,26 @@ def command(): csu.expert.add( Circle.objects.get(slug="versicherungsvermittlerin-lp-circle-analyse") ) + + # course session Überbetriebliche Kurse Lehrjahr 1 + cs = CourseSession.objects.create( + course_id=COURSE_UK1, + title="Überbetriebliche Kurse Region Bern Lehrjahr 1", + ) + 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@vbv-afa.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@vbv-afa.ch"), + ) + csu.expert.add(Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-analyse")) diff --git a/server/vbv_lernwelt/course/migrations/0004_coursesessionuser_expert.py b/server/vbv_lernwelt/course/migrations/0004_coursesessionuser_expert.py index 5827c37e..39d4df15 100644 --- a/server/vbv_lernwelt/course/migrations/0004_coursesessionuser_expert.py +++ b/server/vbv_lernwelt/course/migrations/0004_coursesessionuser_expert.py @@ -6,14 +6,14 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('learnpath', '0008_alter_learningcontent_contents'), - ('course', '0003_alter_coursepage_course'), + ("learnpath", "0008_alter_learningcontent_contents"), + ("course", "0003_alter_coursepage_course"), ] operations = [ migrations.AddField( - model_name='coursesessionuser', - name='expert', - field=models.ManyToManyField(related_name='expert', to='learnpath.Circle'), + model_name="coursesessionuser", + name="expert", + field=models.ManyToManyField(related_name="expert", to="learnpath.Circle"), ), ] diff --git a/server/vbv_lernwelt/course/migrations/0005_alter_coursesessionuser_expert.py b/server/vbv_lernwelt/course/migrations/0005_alter_coursesessionuser_expert.py index 4f26fea8..5696038d 100644 --- a/server/vbv_lernwelt/course/migrations/0005_alter_coursesessionuser_expert.py +++ b/server/vbv_lernwelt/course/migrations/0005_alter_coursesessionuser_expert.py @@ -6,14 +6,16 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('learnpath', '0008_alter_learningcontent_contents'), - ('course', '0004_coursesessionuser_expert'), + ("learnpath", "0008_alter_learningcontent_contents"), + ("course", "0004_coursesessionuser_expert"), ] operations = [ migrations.AlterField( - model_name='coursesessionuser', - name='expert', - field=models.ManyToManyField(blank=True, related_name='expert', to='learnpath.Circle'), + model_name="coursesessionuser", + name="expert", + field=models.ManyToManyField( + blank=True, related_name="expert", to="learnpath.Circle" + ), ), ] diff --git a/server/vbv_lernwelt/learnpath/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/create_default_learning_path.py index 5b99b602..36541b8a 100644 --- a/server/vbv_lernwelt/learnpath/create_default_learning_path.py +++ b/server/vbv_lernwelt/learnpath/create_default_learning_path.py @@ -28,7 +28,9 @@ from vbv_lernwelt.learnpath.tests.learning_path_factories import ( READY_HF = ["Fahrzeug", "Reisen"] -def create_default_learning_path(user=None, skip_locales=True): +def create_default_learning_path( + course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, user=None, skip_locales=True +): if user is None: user = User.objects.get(username="info@iterativ.ch") @@ -41,7 +43,7 @@ def create_default_learning_path(user=None, skip_locales=True): site.port = 8000 site.save() - course_page = CoursePage.objects.get(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID) + course_page = CoursePage.objects.get(course_id=course_id) lp = LearningPathFactory( title="Lernpfad", parent=course_page, diff --git a/server/vbv_lernwelt/media_library/create_default_media_library.py b/server/vbv_lernwelt/media_library/create_default_media_library.py index 13162e11..246bd6d3 100644 --- a/server/vbv_lernwelt/media_library/create_default_media_library.py +++ b/server/vbv_lernwelt/media_library/create_default_media_library.py @@ -17,9 +17,9 @@ from vbv_lernwelt.media_library.tests.media_library_factories import ( ) -def create_default_media_library(): - course = Course.objects.get(id=COURSE_VERSICHERUNGSVERMITTLERIN_ID) - course_page = CoursePage.objects.get(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID) +def create_default_media_library(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID): + course = Course.objects.get(id=course_id) + course_page = CoursePage.objects.get(course_id=course_id) media_lib_page = MediaLibraryPageFactory( title="Mediathek",