diff --git a/server/vbv_lernwelt/competence/create_uk_training_competence_profile.py b/server/vbv_lernwelt/competence/create_uk_training_competence_profile.py new file mode 100644 index 00000000..7e8048b3 --- /dev/null +++ b/server/vbv_lernwelt/competence/create_uk_training_competence_profile.py @@ -0,0 +1,162 @@ +from vbv_lernwelt.competence.factories import ( + CompetencePageFactory, + CompetenceProfilePageFactory, + PerformanceCriteriaFactory, +) +from vbv_lernwelt.competence.models import CompetencePage +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 + + +def create_uk_training_competence_profile(course_id=COURSE_UK): + 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": "c3", + "title": "Betriebliche Prozesse dokumentieren, koordinieren und umsetzen", + "items": [], + }, + { + "competence_id": "e2", + "title": "Informationen im wirtschaftlichen und kaufmännischen Bereich recherchieren", + "items": [], + }, + { + "competence_id": "e4", + "title": "Betriebsbezogene Inhalte multimedial aufbereiten", + "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: + print(c["title"]) + CompetencePageFactory( + parent=competence_profile_page, + competence_id=c["competence_id"], + title=c["title"], + items=[("item", i) for i in c["items"]], + ) + # Circle Fahrzeug + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="c3" + ), + competence_id="c3.pv.ük2", + title="Ich bin fähig die relevanten rechtlichen Grundlagen im Handlungsfeld Fahrzeug situationsgerecht zu erläutern.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-fahrzeug-lu-vorbereitung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="c3" + ), + competence_id="c3.pv.ük7", + title="Ich bin fähig die gesetzlichen Bestimmungen bei Schaden- und Leistungsfällen im Handlungsfeld Fahrzeug zu erläutern.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-fahrzeug-lu-vorbereitung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="c3" + ), + competence_id="c3.pv.ük11", + title="Ich bin fähig die gängigen Versicherungslösungen im Handlungsbereich Fahrzeug fachkundig zu beurteilen.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-fahrzeug-lu-vorbereitung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ük1", + title="Ich bin fähig die wichtigsten gesetzlichen Grundlagen im Bereich Motorfahrzeugversicherung umfassend zu beschreiben.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-fahrzeug-lu-vorbereitung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ük2", + title="Ich bin fähig die relevanten Dienstleistungen und Produkte im Handlungsfeld Fahrzeug zu nennen.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-fahrzeug-lu-vorbereitung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ük3", + title="Ich bin fähig die Leistungen und Produkte im Handlungsfeld Fahrzeug zu erläutern.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-fahrzeug-lu-vorbereitung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ük4", + title="Ich bin fähig die Prozesse und Abläufe im Handlungsfeld Fahrzeug zu erläutern.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-fahrzeug-lu-vorbereitung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="e4" + ), + competence_id="e4.pv.ük1", + title="Ich bin fähig die Dienstleistungen des eigenen Betriebs im Handlungsfeld Fahrzeug zu erläutern.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-fahrzeug-lu-vorbereitung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="e4" + ), + competence_id="e4.pv.ük2", + title="Ich bin fähig Mitbewerber in der privaten Versicherungsbranche im Handlungsfeld Fahrzeug anhand der relevanten Kriterien zu unterscheiden.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-fahrzeug-lu-vorbereitung" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="e4" + ), + competence_id="e4.pv.ük4", + title="Ich bin fähig die Grundlagen der Produkte von Motorfahrzeugversicherungen zu erläutern.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-fahrzeug-lu-vorbereitung" + ), + ) diff --git a/server/vbv_lernwelt/course/consts.py b/server/vbv_lernwelt/course/consts.py index 94ba8517..23fc2105 100644 --- a/server/vbv_lernwelt/course/consts.py +++ b/server/vbv_lernwelt/course/consts.py @@ -3,3 +3,4 @@ COURSE_VERSICHERUNGSVERMITTLERIN_OLD_ID = -2 COURSE_UK = -3 COURSE_VERSICHERUNGSVERMITTLERIN_ID = -4 COURSE_UK_FR = -5 +COURSE_UK_TRAINING = -6 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 ed0779bc..1ab68743 100644 --- a/server/vbv_lernwelt/course/management/commands/create_default_courses.py +++ b/server/vbv_lernwelt/course/management/commands/create_default_courses.py @@ -14,6 +14,9 @@ from vbv_lernwelt.competence.create_uk_competence_profile import ( create_uk_competence_profile, create_uk_fr_competence_profile, ) +from vbv_lernwelt.competence.create_uk_training_competence_profile import ( + create_uk_training_competence_profile, +) from vbv_lernwelt.competence.create_vv_new_competence_profile import ( create_vv_new_competence_profile, ) @@ -24,6 +27,7 @@ from vbv_lernwelt.course.consts import ( COURSE_TEST_ID, COURSE_UK, COURSE_UK_FR, + COURSE_UK_TRAINING, COURSE_VERSICHERUNGSVERMITTLERIN_ID, ) from vbv_lernwelt.course.creators.test_course import create_test_course @@ -31,6 +35,9 @@ from vbv_lernwelt.course.creators.uk_course import ( create_uk_fr_learning_path, create_uk_learning_path, ) +from vbv_lernwelt.course.management.commands.create_uk_training_course import ( + create_uk_training_learning_path, +) from vbv_lernwelt.course.creators.versicherungsvermittlerin import ( create_versicherungsvermittlerin_with_categories, ) @@ -63,6 +70,7 @@ ADMIN_EMAILS = ["info@iterativ.ch", "admin"] COURSE_UK, COURSE_VERSICHERUNGSVERMITTLERIN_ID, COURSE_UK_FR, + COURSE_UK_TRAINING, ], ) def command(course): @@ -90,6 +98,9 @@ def command(course): if COURSE_TEST_ID in course: create_test_course(with_sessions=True) + if COURSE_UK_TRAINING in course: + create_course_training_de() + def create_versicherungsvermittlerin_course(): # Versicherungsvermittler/in mit neuen Circles @@ -404,3 +415,14 @@ def create_course_uk_de_completion_data(course_session): course_session=course_session, completion_status="fail", ) + + +def create_course_training_de(): + # Test Lehrgang für üK Trainer + create_versicherungsvermittlerin_with_categories( + course_id=COURSE_UK_TRAINING, title="myVBV Training" + ) + create_uk_assignments(course_id=COURSE_UK_TRAINING) + create_uk_training_learning_path(course_id=COURSE_UK_TRAINING) + create_uk_training_competence_profile(course_id=COURSE_UK_TRAINING) + create_default_media_library(course_id=COURSE_UK_TRAINING) diff --git a/server/vbv_lernwelt/course/management/commands/create_uk_training_course.py b/server/vbv_lernwelt/course/management/commands/create_uk_training_course.py new file mode 100644 index 00000000..21c21eb9 --- /dev/null +++ b/server/vbv_lernwelt/course/management/commands/create_uk_training_course.py @@ -0,0 +1,55 @@ +import wagtail_factories +from django.conf import settings +from django.core.management import call_command +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.management.commands.create_uk_course import ( + create_uk_circle_fahrzeug, +) +from vbv_lernwelt.course.models import CoursePage +from vbv_lernwelt.learnpath.tests.learning_path_factories import ( + LearningPathFactory, + TopicFactory, +) + + +def create_uk_training_learning_path(course_id=COURSE_UK, 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="Training", is_visible=True, parent=lp) + create_uk_circle_fahrzeug(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)