Add "Beenden" content

This commit is contained in:
Daniel Egger 2022-10-14 14:43:23 +02:00
parent 189cfcde3f
commit 4d24d3b295
7 changed files with 142 additions and 360 deletions

View File

@ -80,6 +80,11 @@ const block = computed(() => {
</router-link>
</div>
<div v-else-if="block.type === 'resource'" class="mt-4 lg:mt-12">
<p class="text-large my-4">{{ block.value.description }}</p>
<div class="resource-text" v-html="block.value.text"></div>
</div>
<div v-else-if="block.type === 'placeholder'" class="mt-4 lg:mt-12">
<p class="text-large my-4">{{ block.value.description }}</p>
<h1>{{ learningContent.title }}</h1>
@ -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;
}
}
</style>
<style lang="scss">
.resource-text {
p {
margin-bottom: 1.5rem;
}
h2 {
margin-bottom: 2rem;
}
h3 {
margin-bottom: 1rem;
margin-top: 1.5rem;
}
ul {
list-style-type: disc;
list-style-position: inside;
margin-bottom: 1.5rem;
margin-left: 1rem;
}
}
</style>

View File

@ -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(
"""
<h2 data-block-key="pwyep">Hier entsteht die Lernsequenz \u00abbeenden\u00bb</h2><h3
data-block-key="dppb3">Reflektiert</h3>
<img src="/static/media/demo_oktober/beenden.jpg" style="
float: right;
margin-left: 32px;
margin-bottom: 32px;
">
<p data-block-key="bho67">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.</p><p data-block-key="f547i">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.</p><h3 data-block-key="7ljuq">Wieso ist dies
sinnvoll?</h3><p data-block-key="7sf2">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.</p><p data-block-key="ecq4l">Die folgenden Fragestellungen k\u00f6nnen dir
dabei helfen.</p><h3 data-block-key="9mbpa">Reflexionsbeispiel zum Lerninhalt:</h3>
<ul>
<li data-block-key="bgr7s">Was gelingt mir bereits gut?</li>
<li data-block-key="72mrj">Wo muss ich mich noch vertiefen oder nochmals repetieren?
</li>
<li data-block-key="3gq01">Blick auf das Kompetenzprofil sch\u00e4rfen</li>
<li data-block-key="8443s">Was nehme ich mit?</li>
<li data-block-key="4nstg">Was m\u00f6chte ich nochmals mit meiner Lernbegleitung
anschauen?
</li>
</ul><h3 data-block-key="6us0c">Reflexionsbeispiele zum Vorgehen/Verhalten:</h3>
<ul>
<li data-block-key="5ih9d">Wie habe ich mich auf den Circle vorbereitet (z.B. Lernzeit
eingeplant)?
</li>
<li data-block-key="6piqr">Wie gut ist mir die Einhaltung der Lernzeiten gelungen? Was
f\u00fchrte zum Erfolg/Misserfolg?
</li>
<li data-block-key="dglus">Wie bin ich beim Lernen vorgegangen (Einsatz von
Lernmethoden)?
</li>
<li data-block-key="53o3r">Was will ich f\u00fcr den n\u00e4chsten Circle im
Lernprozess \u00e4ndern/verbessern?
</li>
</ul><h3 data-block-key="86e5g">Tools, die du f\u00fcr deine Reflexion in Form eines
Lerntagebuches verwenden kannst:</h3>
<ul>
<li data-block-key="16m0n">OneNote</li>
<li data-block-key="disfa">Miroboard</li>
<li data-block-key="2sr1l">Worddokument</li>
<li data-block-key="5lfsl">Powerpointpr\u00e4sentation</li>
<li data-block-key="fvlkb">Notizbuch</li>
</ul><p data-block-key="fu5sc">Der Vorteil eines digitalen Lerntagebuchs besteht in
erster Linie darin, dass sehr einfach Inhalte strukturiert, erg\u00e4nzt und
bearbeitet werden k\u00f6nnen.</p>
"""
),
)
],
)
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())],
)

View File

@ -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),
),
]

View File

@ -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"

View File

@ -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"

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB