291 lines
11 KiB
Python
291 lines
11 KiB
Python
import json
|
|
|
|
import wagtail_factories
|
|
from django.conf import settings
|
|
from wagtail.models import Site
|
|
|
|
from vbv_lernwelt.competence.factories import CompetenceProfilePageFactory, CompetencePageFactory, \
|
|
PerformanceCriteriaFactory
|
|
from vbv_lernwelt.competence.models import CompetencePage
|
|
from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail
|
|
from vbv_lernwelt.course.consts import COURSE_TEST_ID
|
|
from vbv_lernwelt.course.factories import CoursePageFactory
|
|
from vbv_lernwelt.course.models import CoursePage, CourseCategory, Course
|
|
from vbv_lernwelt.learnpath.models import LearningUnit
|
|
from vbv_lernwelt.learnpath.tests.learning_path_factories import CircleFactory, LearningSequenceFactory, \
|
|
LearningContentFactory, DocumentBlockFactory, LearningUnitFactory, TestBlockFactory, ExerciseBlockFactory, \
|
|
LearningPathFactory, TopicFactory, OnlineTrainingBlockFactory
|
|
from vbv_lernwelt.media_library.tests.media_library_factories import MediaLibraryPageFactory, \
|
|
create_document_collection, create_link_collection, create_media_content_link, LinkBlockFactory, \
|
|
MediaCategoryPageFactory
|
|
|
|
|
|
def create_test_course():
|
|
create_locales_for_wagtail()
|
|
create_test_course_with_categories()
|
|
create_test_learning_path()
|
|
create_test_competence_profile()
|
|
create_test_media_library()
|
|
|
|
|
|
def create_test_course_with_categories(apps=None, schema_editor=None):
|
|
if apps is not None:
|
|
Course = apps.get_model('course', 'Course')
|
|
CourseCategory = apps.get_model('course', 'CourseCategory')
|
|
else:
|
|
# pylint: disable=import-outside-toplevel
|
|
from vbv_lernwelt.course.models import Course, CourseCategory
|
|
|
|
course, _ = Course.objects.get_or_create(
|
|
id=COURSE_TEST_ID,
|
|
title='Test Lehrgang',
|
|
category_name='Handlungsfeld'
|
|
)
|
|
|
|
CourseCategory.objects.get_or_create(course=course, title='Allgemein', general=True)
|
|
|
|
for cat in [
|
|
'Fahrzeug', 'Reisen',
|
|
]:
|
|
CourseCategory.objects.get_or_create(course=course, title=cat)
|
|
|
|
# create default course page
|
|
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 = CoursePageFactory(
|
|
title="Test Lehrgang",
|
|
parent=site.root_page,
|
|
course=course,
|
|
)
|
|
|
|
|
|
def create_test_learning_path(user=None, skip_locales=True):
|
|
course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID)
|
|
lp = LearningPathFactory(
|
|
title="Test Lernpfad", parent=course_page
|
|
)
|
|
|
|
TopicFactory(title="Basis", is_visible=False, parent=lp)
|
|
|
|
circle_basis = CircleFactory(
|
|
title="Basis",
|
|
parent=lp,
|
|
description="Basis",
|
|
)
|
|
LearningSequenceFactory(title='Starten', parent=circle_basis, icon='it-icon-ls-start')
|
|
LearningContentFactory(
|
|
title='Einführung',
|
|
parent=circle_basis,
|
|
minutes=15,
|
|
contents=[('document', DocumentBlockFactory())]
|
|
)
|
|
LearningSequenceFactory(title='Beenden', parent=circle_basis, icon='it-icon-ls-end')
|
|
LearningContentFactory(
|
|
title='Jetzt kann es losgehen!',
|
|
parent=circle_basis,
|
|
minutes=30,
|
|
contents=[('document', DocumentBlockFactory())]
|
|
)
|
|
|
|
TopicFactory(title="Beraten der Kunden", parent=lp)
|
|
|
|
circle = CircleFactory(
|
|
title="Analyse",
|
|
parent=lp,
|
|
description="Unit-Test Circle",
|
|
job_situations=[
|
|
('job_situation', 'Autoversicherung'),
|
|
('job_situation', 'Autokauf'),
|
|
],
|
|
goals=[
|
|
('goal', '... die heutige Versicherungssituation von Privat- oder Geschäftskunden einzuschätzen.'),
|
|
('goal', '... deinem Kunden seine optimale Lösung aufzuzeigen'),
|
|
],
|
|
experts=[
|
|
('person', {'last_name': 'Huggel', 'first_name': 'Patrizia', 'email': 'patrizia.huggel@example.com'}),
|
|
]
|
|
)
|
|
|
|
LearningSequenceFactory(title='Starten', parent=circle, icon='it-icon-ls-start')
|
|
LearningContentFactory(
|
|
title=f'Einleitung Circle "Analyse"',
|
|
parent=circle,
|
|
minutes=15,
|
|
contents=[('document', DocumentBlockFactory())]
|
|
)
|
|
|
|
LearningSequenceFactory(title='Beobachten', parent=circle, icon='it-icon-ls-watch')
|
|
lu = LearningUnitFactory(
|
|
title='Fahrzeug',
|
|
parent=circle,
|
|
course_category=CourseCategory.objects.get(course_id=COURSE_TEST_ID, title='Fahrzeug'),
|
|
)
|
|
LearningContentFactory(
|
|
title='Rafael Fasel wechselt sein Auto',
|
|
parent=circle,
|
|
minutes=30,
|
|
contents=[('online_training', OnlineTrainingBlockFactory(
|
|
description='In diesem Online-Training lernst du, wie du den Kundenbedarf ermittelst.',
|
|
url='',
|
|
))]
|
|
)
|
|
LearningContentFactory(
|
|
title='Fachcheck Fahrzeug',
|
|
parent=circle,
|
|
minutes=30,
|
|
contents=[('test', TestBlockFactory())]
|
|
)
|
|
|
|
lu = LearningUnitFactory(
|
|
title='Reisen',
|
|
parent=circle,
|
|
course_category=CourseCategory.objects.get(course_id=COURSE_TEST_ID, title='Reisen'),
|
|
)
|
|
LearningContentFactory(
|
|
title='Reiseversicherung',
|
|
parent=circle,
|
|
minutes=240,
|
|
contents=[('exercise', ExerciseBlockFactory())]
|
|
)
|
|
LearningContentFactory(
|
|
title='Emma und Ayla campen durch Amerika',
|
|
parent=circle,
|
|
minutes=120,
|
|
contents=[('exercise', ExerciseBlockFactory(
|
|
url='/static/media/web_based_trainings/story-06-a-01-emma-und-ayla-campen-durch-amerika-einstieg/scormcontent/index.html'))]
|
|
)
|
|
|
|
LearningSequenceFactory(title='Beenden', parent=circle, icon='it-icon-ls-end')
|
|
LearningContentFactory(
|
|
title='Kompetenzprofil anschauen',
|
|
parent=circle,
|
|
minutes=30,
|
|
contents=[('document', DocumentBlockFactory())]
|
|
)
|
|
LearningContentFactory(
|
|
title='Circle "Analyse" abschliessen',
|
|
parent=circle,
|
|
minutes=30,
|
|
contents=[('document', DocumentBlockFactory())]
|
|
)
|
|
|
|
|
|
def create_test_competence_profile():
|
|
course = Course.objects.get(id=COURSE_TEST_ID)
|
|
course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID)
|
|
|
|
competence_profile_page = CompetenceProfilePageFactory(
|
|
title='Kompetenzprofil',
|
|
parent=course_page,
|
|
)
|
|
|
|
competences = [{
|
|
'competence_id': 'X1',
|
|
'title': 'Weiterempfehlung für Neukunden generieren',
|
|
'items': [
|
|
'Verhandlungsgeschick',
|
|
'Überzeugtes Auftreten',
|
|
],
|
|
}, {
|
|
'competence_id': 'Y1',
|
|
'title': 'Wünsche, Ziele und Bedürfnisse der Kunden im Gespräch ermitteln',
|
|
'items': [
|
|
'Gesprächsführung',
|
|
'Fragetechniken',
|
|
'Kundenpsychologie',
|
|
]
|
|
}, {
|
|
'competence_id': 'Y2',
|
|
'title': 'Analyse des Kundenbedarfs und des Kundenbedürfnisses durchführen',
|
|
'items': [
|
|
'Fragetechniken',
|
|
'Visuelle Hilfsmittel / Visualisierungstechniken',
|
|
]
|
|
}]
|
|
|
|
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(competence_id='Y1'),
|
|
competence_id='Y1.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='test-lehrgang-lp-circle-analyse-lu-fahrzeug'),
|
|
)
|
|
PerformanceCriteriaFactory(
|
|
parent=CompetencePage.objects.get(competence_id='Y2'),
|
|
competence_id='Y2.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='test-lehrgang-lp-circle-analyse-lu-fahrzeug'),
|
|
)
|
|
|
|
PerformanceCriteriaFactory(
|
|
parent=CompetencePage.objects.get(competence_id='Y1'),
|
|
competence_id='Y1.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='test-lehrgang-lp-circle-analyse-lu-reisen'),
|
|
)
|
|
|
|
|
|
def create_test_media_library():
|
|
course = Course.objects.get(id=COURSE_TEST_ID)
|
|
course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID)
|
|
|
|
media_lib_page = MediaLibraryPageFactory(
|
|
title='Mediathek',
|
|
parent=course_page,
|
|
)
|
|
|
|
icons = ['icon-hf-fahrzeug', 'icon-hf-reisen', 'icon-hf-einkommenssicherung', ]
|
|
for idx, cat in enumerate(course.coursecategory_set.all()):
|
|
overview_icon = icons[(idx + 2) % len(icons)]
|
|
introduction_text = '''
|
|
Das Auto ist für viele der grösste Stolz! Es birgt aber auch ein grosses Gefahrenpotenzial.
|
|
Dabei geht es bei den heutigen Fahrzeugpreisen und Reparaturkosten rasch um namhafte Summen,
|
|
die der Fahrzeugbesitzer und die Fahrzeugbesitzerin in einem grösseren Schadenfall oft nur schwer selbst aufbringen kann.'''.strip()
|
|
description_title = 'Das erwartet dich in diesem Handlungsfeld'
|
|
description_text = '''
|
|
In diesem berufstypischem Handlungsfeld lernst du alles rund um Motorfahrzeugversicherungen,
|
|
wie man sein Auto optimal schützen kann, wie du vorgehst bei einem Fahrzeugwechsel,
|
|
welche Aspekte du bei einer Offerte beachten musst und wie du dem Kunden die Lösung präsentierst.'''.strip()
|
|
items = [
|
|
('item', 'Motorfahrzeughaftpflichtversicherung'),
|
|
('item', 'Motorfahrzeugkaskoversicherung'),
|
|
('item', 'Insassenunfallversicherung'),
|
|
]
|
|
body_data = json.dumps([
|
|
create_document_collection(),
|
|
create_link_collection(
|
|
links_dict=[
|
|
create_media_content_link(
|
|
LinkBlockFactory(title='Nationales Versicherungsbüro', url='https://www.vbv.ch/')),
|
|
create_media_content_link(
|
|
LinkBlockFactory(title='Adressen der Strassenverkehrsämter', url='https://www.vbv.ch/')),
|
|
]
|
|
)
|
|
])
|
|
media_category = MediaCategoryPageFactory(
|
|
overview_icon=overview_icon,
|
|
title=cat.title,
|
|
course_category=cat,
|
|
parent=media_lib_page,
|
|
introduction_text=introduction_text,
|
|
description_title=description_title,
|
|
description_text=description_text,
|
|
items=items,
|
|
body=body_data,
|
|
)
|