diff --git a/client/src/components/learningPath/LearningContent.vue b/client/src/components/learningPath/LearningContent.vue index 65fd3ce9..e4ed2bef 100644 --- a/client/src/components/learningPath/LearningContent.vue +++ b/client/src/components/learningPath/LearningContent.vue @@ -80,6 +80,11 @@ const block = computed(() => { +
+

{{ block.value.description }}

+
+
+

{{ block.value.description }}

{{ learningContent.title }}

@@ -99,4 +104,38 @@ $content-height: $header-height + $footer-height; .h-screen { height: calc(100vh - $content-height); } + +.resource-text { + p { + margin-bottom: 1rem; + } + + h2 { + margin-bottom: 48px; + } +} + + + diff --git a/server/vbv_lernwelt/learnpath/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/create_default_learning_path.py index 1f3dd71f..5c0912a3 100644 --- a/server/vbv_lernwelt/learnpath/create_default_learning_path.py +++ b/server/vbv_lernwelt/learnpath/create_default_learning_path.py @@ -3,23 +3,20 @@ from django.conf import settings from django.core.management import call_command from slugify import slugify from wagtail.models import Locale, Page, Site +from wagtail.rich_text import RichText from wagtail_localize.models import LocaleSynchronization from vbv_lernwelt.core.admin import User from vbv_lernwelt.course.consts import COURSE_VERSICHERUNGSVERMITTLERIN_ID from vbv_lernwelt.course.models import CourseCategory, CoursePage from vbv_lernwelt.learnpath.tests.learning_path_factories import ( - AssignmentBlockFactory, - BookBlockFactory, CircleFactory, - DocumentBlockFactory, ExerciseBlockFactory, LearningContentFactory, LearningPathFactory, LearningSequenceFactory, LearningUnitFactory, MediaLibraryBlockFactory, - OnlineTrainingBlockFactory, ResourceBlockFactory, TestBlockFactory, TopicFactory, @@ -163,10 +160,7 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst. ) LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") LearningUnitFactory(title="Jetzt kann's los gehen", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) + create_learning_content_beenden(circle) def create_circle_gewinnen(lp): @@ -237,10 +231,7 @@ wie du dein Netzwerk aufbauen und erweitern kannst, um damit neue Kunden zu gewi LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") LearningUnitFactory(title="Circle beenden", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) + create_learning_content_beenden(circle) def create_circle_einstieg(lp): @@ -344,10 +335,7 @@ wichtige Grundlage für eine erfolgreiche Beziehung. LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") LearningUnitFactory(title="Circle beenden", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) + create_learning_content_beenden(circle) def create_circle_analyse(lp): @@ -444,10 +432,7 @@ def create_circle_analyse(lp): LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") LearningUnitFactory(title="Circle beenden", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) + create_learning_content_beenden(circle) def create_circle_loesung(lp): @@ -540,10 +525,7 @@ def create_circle_loesung(lp): LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") LearningUnitFactory(title="Circle beenden", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) + create_learning_content_beenden(circle) def create_circle_abschluss(lp): @@ -636,10 +618,7 @@ def create_circle_abschluss(lp): LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") LearningUnitFactory(title="Circle beenden", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) + create_learning_content_beenden(circle) def create_circle_betreuen(lp): @@ -716,10 +695,7 @@ def create_circle_betreuen(lp): LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") LearningUnitFactory(title="Circle beenden", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) + create_learning_content_beenden(circle) def create_circle_vernetzen(lp): @@ -757,10 +733,7 @@ def create_circle_vernetzen(lp): LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") LearningUnitFactory(title="Lerneinheit offen", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) + create_learning_content_beenden(circle) def create_circle_pruefung(lp): @@ -881,328 +854,77 @@ def create_standard_learning_unit( ) -def create_circle_children(circle, title): - LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") +def create_learning_content_beenden(parent): LearningContentFactory( - title=f'Einleitung Circle "{title}"', - parent=circle, - minutes=15, + title="Hier entsteht die Lernsequenz «beenden»", + parent=parent, contents=[ ( - "video", - VideoBlockFactory( - url="https://www.youtube.com/embed/qhPIfxS2hvI", - description="In dieser Circle zeigt dir ein Fachexperte anhand von Kundensituationen, wie du erfolgreich" - "den Kundenbedarf ermitteln, analysieren, priorisieren und anschliessend zusammenfassen kannst.", - ), - ) - ], - ) - - LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") - lu = LearningUnitFactory( - title="Absicherung der Familie", - parent=circle, - course_category=CourseCategory.objects.get( - course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, title="Einkommenssicherung" - ), - ) - LearningContentFactory( - title="Ermittlung des Kundenbedarfs", - parent=circle, - minutes=30, - contents=[ - ( - "video", - VideoBlockFactory( - description="Die Ermittlung des Kundenbedarfs muss in einem eingehenden Gespräch herausgefunden werden. Höre dazu auch diesen Podcast an.", - url="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/325190984&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true", - ), - ) - ], - ) - if circle.title == "Einstieg": - LearningContentFactory( - title="Einstieg ins Gespräch", - parent=circle, - minutes=15, - contents=[ - ( - "video", - VideoBlockFactory( - url="https://onedrive.live.com/embed?cid=26E4A934B79DCE5E&resid=26E4A934B79DCE5E%2153350&authkey=AId6i7z_X8l2fHw", - description="In dieser Circle zeigt dir ein Fachexperte anhand von Kundensituationen, wie du erfolgreich" - "den Kundenbedarf ermitteln, analysieren, priorisieren und anschliessend zusammenfassen kannst.", + "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 Kompetenzprofil 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.

+ """ ), - ) - ], - ) - - if circle.title == "Analyse": - LearningContentFactory( - title="Kundenanalyse", - parent=circle, - minutes=15, - contents=[ - ( - "video", - VideoBlockFactory( - url="https://onedrive.live.com/embed?cid=26E4A934B79DCE5E&resid=26E4A934B79DCE5E%2153352&authkey=ABAdnARrD5VsIG8", - description="", - ), - ) - ], - ) - - LearningContentFactory( - title="Kundenbedürfnisse erkennen", - parent=circle, - minutes=30, - contents=[("exercise", ExerciseBlockFactory())], - ) - - LearningContentFactory( - title="Was braucht eine Familie?", - parent=circle, - minutes=60, - contents=[ - ( - "exercise", - ExerciseBlockFactory( - url="/static/media/web_based_trainings/story-01-a-01-patrizia-marco-sichern-sich-ab-einstieg/scormcontent/index.html" ), ) ], ) - - LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") - lu = LearningUnitFactory( - title="Prämien einsparen", - parent=circle, - ) - LearningContentFactory( - title="Versicherungsbedarf für Familien", - parent=circle, - minutes=60, - contents=[("exercise", ExerciseBlockFactory())], - ) - LearningContentFactory( - title="Alles klar?", - parent=circle, - minutes=60, - contents=[("exercise", ExerciseBlockFactory())], - ) - - lu = LearningUnitFactory( - title="Sich selbständig machen", - parent=circle, - course_category=CourseCategory.objects.get( - course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, title="Selbständigkeit" - ), - ) - LearningContentFactory( - title="GmbH oder AG", - parent=circle, - minutes=120, - contents=[("video", VideoBlockFactory())], - ) - LearningContentFactory( - title="Tiertherapie Patrizia Feller", - parent=circle, - minutes=120, - contents=[("exercise", ExerciseBlockFactory())], - ) - - lu = LearningUnitFactory( - title="Auto verkaufen", - parent=circle, - course_category=CourseCategory.objects.get( - course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, title="Fahrzeug" - ), - ) - LearningContentFactory( - title="Motorfahrzeugversicherung", - parent=circle, - minutes=240, - contents=[("assignment", AssignmentBlockFactory())], - ) - LearningContentFactory( - title="Nora kauft sich ein neues Auto", - parent=circle, - minutes=60, - contents=[("resource", ResourceBlockFactory())], - ) - LearningContentFactory( - title="Ermittlung des Kundenbedarfs", - parent=circle, - minutes=120, - contents=[("document", DocumentBlockFactory())], - ) - LearningContentFactory( - title="Motorfahrzeug kaufen", - parent=circle, - minutes=120, - contents=[ - ( - "exercise", - ExerciseBlockFactory( - url="/static/media/web_based_trainings/training-04-a-01-rafael-fasel-wechselt-sein-auto-einstieg/scormcontent/index.html" - ), - ) - ], - ) - - lu = LearningUnitFactory( - title="Pensionierung", - parent=circle, - course_category=CourseCategory.objects.get( - course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, title="Pensionierung" - ), - ) - LearningContentFactory( - title="3-Säulen-Prinzip", - parent=circle, - minutes=240, - contents=[("test", TestBlockFactory())], - ) - LearningContentFactory( - title="Altersvorsorge", - parent=circle, - minutes=240, - contents=[("test", TestBlockFactory())], - ) - LearningContentFactory( - title="AHV", - parent=circle, - minutes=120, - contents=[("document", DocumentBlockFactory())], - ) - LearningContentFactory( - title="Altersvorsorge planen", - parent=circle, - minutes=120, - contents=[("exercise", ExerciseBlockFactory())], - ) - - lu = LearningUnitFactory( - title="Reisen", - parent=circle, - course_category=CourseCategory.objects.get( - course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, title="Reisen" - ), - ) - LearningContentFactory( - title="Reiseversicherung", - parent=circle, - minutes=240, - contents=[("exercise", ExerciseBlockFactory())], - ) - LearningContentFactory( - title="Sorgenfrei reisen", - 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" - ), - ) - ], - ) - - lu = LearningUnitFactory( - title="Haushalt", - parent=circle, - course_category=CourseCategory.objects.get( - course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, title="Haushalt" - ), - ) - LearningContentFactory( - title="Privathaftpflicht", - parent=circle, - minutes=240, - contents=[("media_library", MediaLibraryBlockFactory())], - ) - LearningContentFactory( - title="Zusatzversicherung", - parent=circle, - minutes=120, - contents=[("document", DocumentBlockFactory())], - ) - LearningContentFactory( - title="Einen eigenen Haushalt führen", - parent=circle, - minutes=120, - contents=[("exercise", ExerciseBlockFactory())], - ) - - LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") - lu = LearningUnitFactory( - title="Kind zieht von zu Hause aus", - parent=circle, - course_category=CourseCategory.objects.get( - course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, title="Einkommenssicherung" - ), - ) - LearningContentFactory( - title="Hausrat", - parent=circle, - minutes=120, - contents=[("online_training", OnlineTrainingBlockFactory())], - ) - LearningContentFactory( - title="Privathaftpflicht", - parent=circle, - minutes=60, - contents=[("exercise", ExerciseBlockFactory())], - ) - LearningContentFactory( - title="Kind zieht von zu Hause wirklich aus", - parent=circle, - minutes=60, - contents=[("exercise", ExerciseBlockFactory())], - ) - - LearningSequenceFactory(title="Testen", parent=circle, icon="it-icon-ls-test") - lu = LearningUnitFactory( - title='Kind zieht von zu Hause aus "Testen"', - parent=circle, - course_category=CourseCategory.objects.get( - course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, title="Einkommenssicherung" - ), - ) - LearningContentFactory( - title="Das erwartet dich im Test", - parent=circle, - minutes=30, - contents=[("test", TestBlockFactory())], - ) - LearningContentFactory( - title="Test durchführen", - parent=circle, - minutes=30, - contents=[("test", TestBlockFactory())], - ) - - LearningSequenceFactory(title="Vernetzen", parent=circle, icon="it-icon-ls-network") - LearningContentFactory( - title="Online Training", - parent=circle, - minutes=60, - contents=[("online_training", OnlineTrainingBlockFactory())], - ) - - LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") - LearningContentFactory( - title="Mehr darüber erfahren", - parent=circle, - minutes=30, - contents=[("book", BookBlockFactory())], - ) - LearningContentFactory( - title='Circle "Analyse" abschliessen', - parent=circle, - minutes=30, - contents=[("document", DocumentBlockFactory())], - ) diff --git a/server/vbv_lernwelt/learnpath/migrations/0006_alter_learningcontent_contents.py b/server/vbv_lernwelt/learnpath/migrations/0006_alter_learningcontent_contents.py new file mode 100644 index 00000000..6e03aa99 --- /dev/null +++ b/server/vbv_lernwelt/learnpath/migrations/0006_alter_learningcontent_contents.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.13 on 2022-10-14 12:03 + +from django.db import migrations +import wagtail.blocks +import wagtail.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('learnpath', '0005_circle_job_situation_description'), + ] + + operations = [ + migrations.AlterField( + model_name='learningcontent', + name='contents', + field=wagtail.fields.StreamField([('video', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.TextBlock())])), ('resource', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.TextBlock()), ('text', wagtail.blocks.RichTextBlock())])), ('exercise', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.TextBlock())])), ('online_training', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.TextBlock())])), ('media_library', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.TextBlock())])), ('document', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.TextBlock())])), ('test', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.TextBlock())])), ('book', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.TextBlock())])), ('assignment', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.TextBlock())])), ('placeholder', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.TextBlock())]))], use_json_field=None), + ), + ] diff --git a/server/vbv_lernwelt/learnpath/models_learning_unit_content.py b/server/vbv_lernwelt/learnpath/models_learning_unit_content.py index c3bca514..beb1894e 100644 --- a/server/vbv_lernwelt/learnpath/models_learning_unit_content.py +++ b/server/vbv_lernwelt/learnpath/models_learning_unit_content.py @@ -60,6 +60,7 @@ class OnlineTrainingBlock(blocks.StructBlock): class ResourceBlock(blocks.StructBlock): description = blocks.TextBlock() url = blocks.TextBlock() + text = blocks.RichTextBlock(required=False) class Meta: icon = "media" diff --git a/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py index eb39d7b6..48fc4bbb 100644 --- a/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py +++ b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py @@ -80,6 +80,13 @@ class ExerciseBlockFactory(wagtail_factories.StructBlockFactory): model = ExerciseBlock +class ResourceBlockFactory(wagtail_factories.StructBlockFactory): + description = "Beispiel Hilfsmittel" + + class Meta: + model = ResourceBlock + + class OnlineTrainingBlockFactory(wagtail_factories.StructBlockFactory): url = "/static/media/web_based_trainings/rise_cmi5_test_export/scormcontent/index.html" description = "Beispiel Rise Modul" @@ -95,13 +102,6 @@ class TestBlockFactory(wagtail_factories.StructBlockFactory): model = TestBlock -class ResourceBlockFactory(wagtail_factories.StructBlockFactory): - description = "Beispiel Hilfsmittel" - - class Meta: - model = ResourceBlock - - class MediaLibraryBlockFactory(wagtail_factories.StructBlockFactory): description = "Sie erreichen die Mediathek mit einem Klick auf den unteren Link" diff --git a/server/vbv_lernwelt/static/media/demo_oktober/Transferauftrag_Der_erste_Eindruck_zaehlt_de.pdf b/server/vbv_lernwelt/static/media/demo_oktober/Transferauftrag_Der_erste_Eindruck_zaehlt_de.pdf new file mode 100644 index 00000000..ec53c599 Binary files /dev/null and b/server/vbv_lernwelt/static/media/demo_oktober/Transferauftrag_Der_erste_Eindruck_zaehlt_de.pdf differ diff --git a/server/vbv_lernwelt/static/media/demo_oktober/beenden.jpg b/server/vbv_lernwelt/static/media/demo_oktober/beenden.jpg new file mode 100644 index 00000000..11218d32 Binary files /dev/null and b/server/vbv_lernwelt/static/media/demo_oktober/beenden.jpg differ