From a33c161231682109b0ea28392a1723602f90220b Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Tue, 4 Oct 2022 15:48:53 +0200 Subject: [PATCH 01/14] Add learning path data for oktober demo --- .../learnpath/create_default_learning_path.py | 118 ++++++++---------- .../0002_alter_learningcontent_contents.py | 20 +++ server/vbv_lernwelt/learnpath/models.py | 2 + .../learnpath/models_learning_unit_content.py | 8 ++ .../tests/learning_path_factories.py | 87 ++++++++----- .../tests/media_library_factories.py | 2 +- 6 files changed, 142 insertions(+), 95 deletions(-) create mode 100644 server/vbv_lernwelt/learnpath/migrations/0002_alter_learningcontent_contents.py diff --git a/server/vbv_lernwelt/learnpath/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/create_default_learning_path.py index b5a13bf8..eaefddfe 100644 --- a/server/vbv_lernwelt/learnpath/create_default_learning_path.py +++ b/server/vbv_lernwelt/learnpath/create_default_learning_path.py @@ -30,46 +30,6 @@ def create_circle(title, learning_path): return CircleFactory( title=title, parent=learning_path, - description=""" - Nach dem Gespräch werten sie die Analyse aus und erstellen mit den - zur Verfügung stehenden Systemen formal korrekte Lösungsvorschläge bzw. - Ausschreibungen. Je nach Komplexität der Situation ziehen sie die nötigen - Fachspezialisten bei. - """, - job_situations=[ - ("job_situation", "Absicherung der Familie"), - ("job_situation", "Prämien einsparen"), - ("job_situation", "Deckung optimieren"), - ("job_situation", "Auto kaufen"), - ("job_situation", "Fahrzeugwechsel"), - ("job_situation", "Pensionerung inklusive Variante Frühpensionierung"), - ("job_situation", "Reisen"), - ], - goals=[ - ( - "goal", - "... die heutige Versicherungssituation von Privat- oder Geschäftskunden einzuschätzen.", - ), - ( - "goal", - "... deinem Kunden einen ungenügenden oder übermässigen Versicherungsschutz aufzuzeigen.", - ), - ( - "goal", - "... deinem Kunden zu helfen, sein Optimierungspotential voll auszuschöpfen.", - ), - ("goal", "... deinem Kunden seine optimale Lösung aufzuzeigen"), - ], - experts=[ - ( - "person", - { - "last_name": "Huggel", - "first_name": "Patrizia", - "email": "patrizia.huggel@example.com", - }, - ), - ], ) @@ -426,42 +386,68 @@ def create_default_learning_path(user=None, skip_locales=True): circle_basis = CircleFactory( title="Basis", parent=lp, - description=""" -In diesem Circle erklären wir dir, wie der Lehrgang -Versicherungsvermittler / in " aufgebaut ist. Zudem vermitteln wir dir die wichtigsten Grundlagen, -damit erfolgreich mit deinem Lernpfad starten kannst. -""", ) LearningSequenceFactory( title="Starten", parent=circle_basis, icon="it-icon-ls-start" ) + LearningUnitFactory(title="Einführung", parent=circle_basis) LearningContentFactory( - title='Einleitung Circle "Basis"', + title="Willkommen im Lehrgang Versicherungsvermitler VBV", parent=circle_basis, - minutes=15, - 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.", - ), - ) - ], ) + LearningUnitFactory(title="Arbeits- und Lerntechnik", parent=circle_basis) + LearningContentFactory( + title="Mediathek", + parent=circle_basis, + ) + LearningContentFactory( + title="Luca organisiert seinen Arbeitsalltag", + parent=circle_basis, + ) + LearningContentFactory( + title="Luca legt sich seine Lernstrategie zurecht", + parent=circle_basis, + ) + LearningContentFactory( + title="Fachcheck Arbeits- und Lerntechnik", + parent=circle_basis, + ) + + LearningSequenceFactory( + title="Grundlagen", parent=circle_basis, icon="it-icon-ls-watch" + ) + LearningUnitFactory(title="Versicherung", parent=circle_basis) + LearningContentFactory( + title="Mediathek", + parent=circle_basis, + ) + LearningContentFactory( + title="Luca startet durch", + parent=circle_basis, + ) + LearningContentFactory( + title="Fachcheck Allgemeines zu Versicherungen", + parent=circle_basis, + ) + LearningUnitFactory(title="Beratung und Verkauf", parent=circle_basis) + LearningContentFactory( + title="Mediathek", + parent=circle_basis, + ) + LearningContentFactory( + title="Luca macht sich fit im Verkauf", + parent=circle_basis, + ) + LearningContentFactory( + title="Fachcheck Beratung und Verkauf", + parent=circle_basis, + ) + LearningSequenceFactory(title="Beenden", parent=circle_basis, icon="it-icon-ls-end") + LearningUnitFactory(title="Jetzt kann's los gehen", parent=circle_basis) LearningContentFactory( - title="Kompetenzprofil anschauen", + title="Lerninhalt offen", parent=circle_basis, - minutes=30, - contents=[("document", DocumentBlockFactory())], - ) - LearningContentFactory( - title='Circle "Analyse" abschliessen', - parent=circle_basis, - minutes=30, - contents=[("document", DocumentBlockFactory())], ) TopicFactory(title="Gewinnen von Kunden", parent=lp) diff --git a/server/vbv_lernwelt/learnpath/migrations/0002_alter_learningcontent_contents.py b/server/vbv_lernwelt/learnpath/migrations/0002_alter_learningcontent_contents.py new file mode 100644 index 00000000..365bcf45 --- /dev/null +++ b/server/vbv_lernwelt/learnpath/migrations/0002_alter_learningcontent_contents.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.13 on 2022-10-04 13:34 + +from django.db import migrations +import wagtail.blocks +import wagtail.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('learnpath', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='learningcontent', + name='contents', + field=wagtail.fields.StreamField([('video', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('resource', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('exercise', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('online_training', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('media_library', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('document', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('test', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('book', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('assignment', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('placeholder', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())]))], use_json_field=None), + ), + ] diff --git a/server/vbv_lernwelt/learnpath/models.py b/server/vbv_lernwelt/learnpath/models.py index ac861d1c..bcf509a4 100644 --- a/server/vbv_lernwelt/learnpath/models.py +++ b/server/vbv_lernwelt/learnpath/models.py @@ -19,6 +19,7 @@ from vbv_lernwelt.learnpath.models_learning_unit_content import ( ResourceBlock, TestBlock, VideoBlock, + PlaceholderBlock, ) from vbv_lernwelt.learnpath.serializer_helpers import get_it_serializer_class @@ -272,6 +273,7 @@ class LearningContent(Page): ("test", TestBlock()), ("book", BookBlock()), ("assignment", AssignmentBlock()), + ("placeholder", PlaceholderBlock()), ] contents = StreamField( diff --git a/server/vbv_lernwelt/learnpath/models_learning_unit_content.py b/server/vbv_lernwelt/learnpath/models_learning_unit_content.py index cb3148f7..c0741e07 100644 --- a/server/vbv_lernwelt/learnpath/models_learning_unit_content.py +++ b/server/vbv_lernwelt/learnpath/models_learning_unit_content.py @@ -25,6 +25,14 @@ class DocumentBlock(blocks.StructBlock): icon = "media" +class PlaceholderBlock(blocks.StructBlock): + description = blocks.TextBlock() + url = blocks.URLBlock() + + class Meta: + icon = "media" + + class ExerciseBlock(blocks.StructBlock): description = blocks.TextBlock() url = blocks.URLBlock() diff --git a/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py index ff3beb3f..ddbb6867 100644 --- a/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py +++ b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py @@ -18,6 +18,7 @@ from vbv_lernwelt.learnpath.models_learning_unit_content import ( ResourceBlock, TestBlock, VideoBlock, + PlaceholderBlock, ) @@ -36,34 +37,6 @@ class TopicFactory(wagtail_factories.PageFactory): model = Topic -class CircleFactory(wagtail_factories.PageFactory): - title = "Gewinnen" - - class Meta: - model = Circle - - -class LearningSequenceFactory(wagtail_factories.PageFactory): - title = "Grundlagen" - - class Meta: - model = LearningSequence - - -class LearningUnitFactory(wagtail_factories.PageFactory): - title = "Lerneinheit" - - class Meta: - model = LearningUnit - - -class LearningContentFactory(wagtail_factories.PageFactory): - title = "Lerninhalt" - - class Meta: - model = LearningContent - - class VideoBlockFactory(wagtail_factories.StructBlockFactory): url = "https://www.youtube.com/embed/qhPIfxS2hvI" description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam" @@ -93,6 +66,13 @@ class DocumentBlockFactory(wagtail_factories.StructBlockFactory): model = DocumentBlock +class PlaceholderBlockFactory(wagtail_factories.StructBlockFactory): + description = "Platzhalter" + + class Meta: + model = PlaceholderBlock + + class ExerciseBlockFactory(wagtail_factories.StructBlockFactory): description = "Beispiel Übung" @@ -127,3 +107,54 @@ class MediaLibraryBlockFactory(wagtail_factories.StructBlockFactory): class Meta: model = MediaLibraryBlock + + +class CircleFactory(wagtail_factories.PageFactory): + title = "Analyse" + description = """ +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. +Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, +nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, +pretium quis, sem. Nulla consequat massa quis enim. Donec. + """.strip() + job_situations = [("job_situation", f"Job Situation {x + 1}") for x in range(7)] + goals = [ + ("goal", f"... hier ein Beispieltext für ein Ziel {x + 1}") for x in range(3) + ] + experts = [ + ( + "person", + { + "last_name": "Mustermann", + "first_name": "Patrizia", + "email": "patrizia.mustermann@example.com", + }, + ), + ] + + class Meta: + model = Circle + + +class LearningSequenceFactory(wagtail_factories.PageFactory): + title = "Anwenden" + icon = "it-icon-ls-apply" + + class Meta: + model = LearningSequence + + +class LearningUnitFactory(wagtail_factories.PageFactory): + title = "Fahrzeug" + + class Meta: + model = LearningUnit + + +class LearningContentFactory(wagtail_factories.PageFactory): + title = "Platzhalter Inhalt" + contents = [("placeholder", PlaceholderBlockFactory())] + minutes = 15 + + class Meta: + model = LearningContent diff --git a/server/vbv_lernwelt/media_library/tests/media_library_factories.py b/server/vbv_lernwelt/media_library/tests/media_library_factories.py index 0071830d..c498e73c 100644 --- a/server/vbv_lernwelt/media_library/tests/media_library_factories.py +++ b/server/vbv_lernwelt/media_library/tests/media_library_factories.py @@ -175,7 +175,7 @@ Nulla consequat massa quis enim. Donec. contents=[create_external_link_block() for _ in range(4)], ), create_media_collection( - title="Links", + title="Verankerung im Lernpfad", contents=[create_internal_link_block() for _ in range(3)], ), create_media_collection( From ad532dc50df56a81fdd28975b5184e0cb846c71e Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Tue, 4 Oct 2022 16:01:25 +0200 Subject: [PATCH 02/14] Add placeholder learning content --- .../components/learningPath/CircleDiagram.vue | 16 +- .../learningPath/LearningContentTypeBadge.vue | 3 +- .../learningPath/LearningSequence.vue | 2 +- client/src/types.ts | 3 +- client/src/utils/typeMaps.ts | 1 + .../learnpath/create_default_learning_path.py | 268 +++++++++++------- 6 files changed, 172 insertions(+), 121 deletions(-) diff --git a/client/src/components/learningPath/CircleDiagram.vue b/client/src/components/learningPath/CircleDiagram.vue index 23dedb21..9fa07a4b 100644 --- a/client/src/components/learningPath/CircleDiagram.vue +++ b/client/src/components/learningPath/CircleDiagram.vue @@ -236,20 +236,8 @@ function render() { - - + + diff --git a/client/src/components/learningPath/LearningContentTypeBadge.vue b/client/src/components/learningPath/LearningContentTypeBadge.vue index a12b8b26..63dcd50f 100644 --- a/client/src/components/learningPath/LearningContentTypeBadge.vue +++ b/client/src/components/learningPath/LearningContentTypeBadge.vue @@ -37,10 +37,11 @@ const props = defineProps<{ v-else-if="props.learningContentType === 'resource'" class="w-6 h-6" /> - +

{{ learningContentTypesToName.get(props.learningContentType) }}

diff --git a/client/src/components/learningPath/LearningSequence.vue b/client/src/components/learningPath/LearningSequence.vue index 444c7a89..f105eb12 100644 --- a/client/src/components/learningPath/LearningSequence.vue +++ b/client/src/components/learningPath/LearningSequence.vue @@ -155,7 +155,7 @@ const learningSequenceBorderClass = computed(() => {
diff --git a/client/src/types.ts b/client/src/types.ts index 8b049f0d..90242426 100644 --- a/client/src/types.ts +++ b/client/src/types.ts @@ -11,7 +11,8 @@ export type LearningContentType = | "online_training" | "resource" | "test" - | "video"; + | "video" + | "placeholder"; export interface LearningContentBlock { type: LearningContentType; diff --git a/client/src/utils/typeMaps.ts b/client/src/utils/typeMaps.ts index 02ec2b6b..81631956 100644 --- a/client/src/utils/typeMaps.ts +++ b/client/src/utils/typeMaps.ts @@ -10,4 +10,5 @@ export const learningContentTypesToName = new Map([ ["video", "Video"], ["test", "Test"], ["resource", "Hilfsmittel"], + ["placeholder", "Platzhalter"], ]); diff --git a/server/vbv_lernwelt/learnpath/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/create_default_learning_path.py index eaefddfe..59a13ec2 100644 --- a/server/vbv_lernwelt/learnpath/create_default_learning_path.py +++ b/server/vbv_lernwelt/learnpath/create_default_learning_path.py @@ -383,113 +383,11 @@ def create_default_learning_path(user=None, skip_locales=True): TopicFactory(title="Basis", is_visible=False, parent=lp) - circle_basis = CircleFactory( - title="Basis", - parent=lp, - ) - LearningSequenceFactory( - title="Starten", parent=circle_basis, icon="it-icon-ls-start" - ) - LearningUnitFactory(title="Einführung", parent=circle_basis) - LearningContentFactory( - title="Willkommen im Lehrgang Versicherungsvermitler VBV", - parent=circle_basis, - ) - LearningUnitFactory(title="Arbeits- und Lerntechnik", parent=circle_basis) - LearningContentFactory( - title="Mediathek", - parent=circle_basis, - ) - LearningContentFactory( - title="Luca organisiert seinen Arbeitsalltag", - parent=circle_basis, - ) - LearningContentFactory( - title="Luca legt sich seine Lernstrategie zurecht", - parent=circle_basis, - ) - LearningContentFactory( - title="Fachcheck Arbeits- und Lerntechnik", - parent=circle_basis, - ) - - LearningSequenceFactory( - title="Grundlagen", parent=circle_basis, icon="it-icon-ls-watch" - ) - LearningUnitFactory(title="Versicherung", parent=circle_basis) - LearningContentFactory( - title="Mediathek", - parent=circle_basis, - ) - LearningContentFactory( - title="Luca startet durch", - parent=circle_basis, - ) - LearningContentFactory( - title="Fachcheck Allgemeines zu Versicherungen", - parent=circle_basis, - ) - LearningUnitFactory(title="Beratung und Verkauf", parent=circle_basis) - LearningContentFactory( - title="Mediathek", - parent=circle_basis, - ) - LearningContentFactory( - title="Luca macht sich fit im Verkauf", - parent=circle_basis, - ) - LearningContentFactory( - title="Fachcheck Beratung und Verkauf", - parent=circle_basis, - ) - - LearningSequenceFactory(title="Beenden", parent=circle_basis, icon="it-icon-ls-end") - LearningUnitFactory(title="Jetzt kann's los gehen", parent=circle_basis) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle_basis, - ) + create_circle_basis(lp) TopicFactory(title="Gewinnen von Kunden", parent=lp) - circle_gewinnen = CircleFactory( - title="Gewinnen", - parent=lp, - description=""" -Versicherungsvermittlerinnen und -vermittler verfügen über -ein starkes Netzwerk, das sie gezielt pflegen und ausbauen. Sie beraten und betreuen ihre bestehenden Kundinnen und Kunden professionell und gewinnen so ihr Vertrauen. Dadurch schaffen sie die Basis für das Gewinnen -von neuen Kundinnen und Kunden. Versicherungsvermittlerinnen und -vermittler sprechen ihre bestehenden Kundinnen -und Kunden auf Weiterempfehlung an. So nutzen sie ihre -bestehenden Kontakte geschickt für das Anwerben von -Neukundinnen und -kunden.""", - goals=[ - ( - "goal", - "... Bestehende Kunden so zu beraten, dass sie von diesen weiterempfohlen werden", - ), - ( - "goal", - "... Geeignete Personen wie z.B. Garagisten, Architekten, Treuhänder auf die Vermittlung / Zusammenarbeit anzusprechen", - ), - ( - "goal", - "... Verschiedene Datenquellen wie Internet, Telefonbuch, Handelszeitung, Baugesuche etc. Gezielt für die Gewinnung von Neukunden zu benützen", - ), - ( - "goal", - "... Ein beliebiges Gespräch resp. Einen bestehenden Kontakt in die Richtung «Versicherung» zu lenken", - ), - ( - "goal", - "... Das Thema Risiko und Sicherheit in einem Gespräch gezielt und auf die Situation des jeweiligen Gesprächspartners bezogen einfliessen zu lassen", - ), - ( - "goal", - "... Im täglichen Kontakt potenzielle Kundinnen und Kunden zu erkennen", - ), - ], - ) - create_circle_children(circle_gewinnen, "Gewinnen") + create_circle_gewinnen(lp) TopicFactory(title="Beraten der Kunden", parent=lp) @@ -529,3 +427,165 @@ Neukundinnen und -kunden.""", # all pages belong to 'admin' by default Page.objects.update(owner=user) + + +def create_circle_basis(lp): + circle = CircleFactory( + title="Basis", + parent=lp, + description=""" +In diesem Circle erklären wir dir, wie der Lehrgang +Versicherungsvermittler / in " aufgebaut ist. Zudem vermitteln wir dir die wichtigsten Grundlagen, +damit erfolgreich mit deinem Lernpfad starten kannst. + """.strip(), + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Willkommen im Lehrgang Versicherungsvermitler VBV", + parent=circle, + ) + LearningUnitFactory(title="Arbeits- und Lerntechnik", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Luca organisiert seinen Arbeitsalltag", + parent=circle, + ) + LearningContentFactory( + title="Luca legt sich seine Lernstrategie zurecht", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Arbeits- und Lerntechnik", + parent=circle, + ) + LearningSequenceFactory(title="Grundlagen", parent=circle, icon="it-icon-ls-watch") + LearningUnitFactory(title="Versicherung", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Luca startet durch", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Allgemeines zu Versicherungen", + parent=circle, + ) + LearningUnitFactory(title="Beratung und Verkauf", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Luca macht sich fit im Verkauf", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Beratung und Verkauf", + parent=circle, + ) + 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, + ) + + +def create_circle_gewinnen(lp): + circle = CircleFactory( + title="Gewinnen", + parent=lp, + description=""" +Versicherungsvermittlerinnen und -vermittler verfügen über +ein starkes Netzwerk, das sie gezielt pflegen und ausbauen. Sie beraten und betreuen ihre bestehenden Kundinnen und Kunden professionell und gewinnen so ihr Vertrauen. Dadurch schaffen sie die Basis für das Gewinnen +von neuen Kundinnen und Kunden. Versicherungsvermittlerinnen und -vermittler sprechen ihre bestehenden Kundinnen +und Kunden auf Weiterempfehlung an. So nutzen sie ihre +bestehenden Kontakte geschickt für das Anwerben von +Neukundinnen und -kunden.""".strip(), + goals=[ + ( + "goal", + "... Bestehende Kunden so zu beraten, dass sie von diesen weiterempfohlen werden", + ), + ( + "goal", + "... Geeignete Personen wie z.B. Garagisten, Architekten, Treuhänder auf die Vermittlung / Zusammenarbeit anzusprechen", + ), + ( + "goal", + "... Verschiedene Datenquellen wie Internet, Telefonbuch, Handelszeitung, Baugesuche etc. Gezielt für die Gewinnung von Neukunden zu benützen", + ), + ( + "goal", + "... Ein beliebiges Gespräch resp. Einen bestehenden Kontakt in die Richtung «Versicherung» zu lenken", + ), + ( + "goal", + "... Das Thema Risiko und Sicherheit in einem Gespräch gezielt und auf die Situation des jeweiligen Gesprächspartners bezogen einfliessen zu lassen", + ), + ( + "goal", + "... Im täglichen Kontakt potenzielle Kundinnen und Kunden zu erkennen", + ), + ], + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + ) + + LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") + LearningUnitFactory(title="Kunden gewinnen", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Kunden gewinnen", + parent=circle, + ) + + LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-watch") + LearningUnitFactory(title="Sozialer Auftritt", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Sozialer Auftritt", + parent=circle, + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Sozialer Auftritt", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) From dbf3db3d23b35dfc4b1fc2acb9a0acbdfe5b4d52 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Tue, 4 Oct 2022 16:43:03 +0200 Subject: [PATCH 03/14] Add more circle data --- client/src/components/MainNavigationBar.vue | 2 +- .../learnpath/create_default_learning_path.py | 407 +++++++++++++++++- 2 files changed, 386 insertions(+), 23 deletions(-) diff --git a/client/src/components/MainNavigationBar.vue b/client/src/components/MainNavigationBar.vue index c6880623..b0d232a9 100644 --- a/client/src/components/MainNavigationBar.vue +++ b/client/src/components/MainNavigationBar.vue @@ -145,7 +145,7 @@ const profileDropdownData = [ > diff --git a/server/vbv_lernwelt/learnpath/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/create_default_learning_path.py index 59a13ec2..fbaf9e20 100644 --- a/server/vbv_lernwelt/learnpath/create_default_learning_path.py +++ b/server/vbv_lernwelt/learnpath/create_default_learning_path.py @@ -45,7 +45,7 @@ def create_circle_children(circle, title): 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.", + "den Kundenbedarf ermitteln, analysieren, priorisieren und anschliessend zusammenfassen kannst.", ), ) ], @@ -84,7 +84,7 @@ def create_circle_children(circle, title): 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.", + "den Kundenbedarf ermitteln, analysieren, priorisieren und anschliessend zusammenfassen kannst.", ), ) ], @@ -382,35 +382,26 @@ def create_default_learning_path(user=None, skip_locales=True): ) TopicFactory(title="Basis", is_visible=False, parent=lp) - create_circle_basis(lp) TopicFactory(title="Gewinnen von Kunden", parent=lp) - create_circle_gewinnen(lp) TopicFactory(title="Beraten der Kunden", parent=lp) - - circle_einstieg = create_circle("Einstieg", lp) - create_circle_children(circle_einstieg, "Einstieg") - - circle_analyse = create_circle("Analyse", lp) - create_circle_children(circle_analyse, "Analyse") - - circle_analyse = create_circle("Lösung", lp) - create_circle_children(circle_analyse, "Lösung") - - circle_analyse = create_circle("Abschluss", lp) - create_circle_children(circle_analyse, "Abschluss") + create_circle_einstieg(lp) + create_circle_analyse(lp) + create_circle_loesung(lp) + create_circle_abschluss(lp) TopicFactory(title="Betreuen und Ausbauen des Kundenstamms", parent=lp) + create_circle_betreuen(lp) - circle_analyse = create_circle("Betreuen", lp) - create_circle_children(circle_analyse, "Betreuen") - - TopicFactory(title="Prüfung", is_visible=True, parent=lp) - circle_analyse = create_circle("Prüfungsvorbereitung", lp) - create_circle_children(circle_analyse, "Prüfungsvorbereitung") + # circle_analyse = create_circle("Betreuen", lp) + # create_circle_children(circle_analyse, "Betreuen") + # + # TopicFactory(title="Prüfung", is_visible=True, parent=lp) + # circle_analyse = create_circle("Prüfungsvorbereitung", lp) + # create_circle_children(circle_analyse, "Prüfungsvorbereitung") # locales if not skip_locales: @@ -589,3 +580,375 @@ Neukundinnen und -kunden.""".strip(), title="Lerninhalt offen", parent=circle, ) + + +def create_circle_einstieg(lp): + circle = CircleFactory( + title="Einstieg", + parent=lp, + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + ) + + LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Patrizia & Marco sichern sich ab", + parent=circle, + category_name="Einkommenssicherung", + ) + + LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") + create_standard_learning_unit( + "Rafael Fasel wechselt sein Auto", + parent=circle, + category_name="Fahrzeug", + ) + create_standard_learning_unit( + "Rafael Fasel zieht von zu Hause aus", + parent=circle, + category_name="Haushalt", + ) + create_standard_learning_unit( + "Emma und Ayla campen durch Amerika", + parent=circle, + category_name="Reisen", + ) + create_standard_learning_unit( + "Herr und Frau Russo planen ihre Pensionierung", + parent=circle, + category_name="Pensionierung", + ) + create_standard_learning_unit( + "Familie Babic erwartet Nachwuchs", + parent=circle, + category_name="Gesundheit", + ) + create_standard_learning_unit( + "Anna Fleur übernimmt den Blumenladen", + parent=circle, + category_name="KMU", + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Gesprächseinstieg", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Der erste Eindruck zählt", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + +def create_circle_analyse(lp): + circle = CircleFactory( + title="Analyse", + parent=lp, + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + ) + + LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Patrizia & Marco sichern sich ab", + parent=circle, + category_name="Einkommenssicherung", + ) + + LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") + create_standard_learning_unit( + "Rafael Fasel wechselt sein Auto", + parent=circle, + category_name="Fahrzeug", + ) + create_standard_learning_unit( + "Rafael Fasel zieht von zu Hause aus", + parent=circle, + category_name="Haushalt", + ) + create_standard_learning_unit( + "Emma und Ayla campen durch Amerika", + parent=circle, + category_name="Reisen", + ) + create_standard_learning_unit( + "Herr und Frau Russo planen ihre Pensionierung", + parent=circle, + category_name="Pensionierung", + ) + create_standard_learning_unit( + "Familie Babic erwartet Nachwuchs", + parent=circle, + category_name="Gesundheit", + ) + create_standard_learning_unit( + "Anna Fleur übernimmt den Blumenladen", + parent=circle, + category_name="KMU", + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Gesprächseinstieg", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + +def create_circle_loesung(lp): + circle = CircleFactory( + title="Lösung", + parent=lp, + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + ) + + LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Patrizia & Marco sichern sich ab", + parent=circle, + category_name="Einkommenssicherung", + ) + + LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") + create_standard_learning_unit( + "Rafael Fasel wechselt sein Auto", + parent=circle, + category_name="Fahrzeug", + ) + create_standard_learning_unit( + "Rafael Fasel zieht von zu Hause aus", + parent=circle, + category_name="Haushalt", + ) + create_standard_learning_unit( + "Emma und Ayla campen durch Amerika", + parent=circle, + category_name="Reisen", + ) + create_standard_learning_unit( + "Herr und Frau Russo planen ihre Pensionierung", + parent=circle, + category_name="Pensionierung", + ) + create_standard_learning_unit( + "Familie Babic erwartet Nachwuchs", + parent=circle, + category_name="Gesundheit", + ) + create_standard_learning_unit( + "Anna Fleur übernimmt den Blumenladen", + parent=circle, + category_name="KMU", + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Heirat", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Patrizia & Marco heiraten", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Heirat", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + +def create_circle_abschluss(lp): + circle = CircleFactory( + title="Abschluss", + parent=lp, + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + ) + + LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Patrizia & Marco sichern sich ab", + parent=circle, + category_name="Einkommenssicherung", + ) + + LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") + create_standard_learning_unit( + "Rafael Fasel wechselt sein Auto", + parent=circle, + category_name="Fahrzeug", + ) + create_standard_learning_unit( + "Rafael Fasel zieht von zu Hause aus", + parent=circle, + category_name="Haushalt", + ) + create_standard_learning_unit( + "Emma und Ayla campen durch Amerika", + parent=circle, + category_name="Reisen", + ) + create_standard_learning_unit( + "Herr und Frau Russo planen ihre Pensionierung", + parent=circle, + category_name="Pensionierung", + ) + create_standard_learning_unit( + "Familie Babic erwartet Nachwuchs", + parent=circle, + category_name="Gesundheit", + ) + create_standard_learning_unit( + "Anna Fleur übernimmt den Blumenladen", + parent=circle, + category_name="KMU", + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Auswandern", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Emma und Ayla wandern nach Amerika aus", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Auswandern", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + +def create_circle_betreuen(lp): + circle = CircleFactory( + title="Abschluss", + parent=lp, + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + ) + + LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Patrizia Feller macht sich selbsständig", + parent=circle, + category_name="Selbständigkeit", + ) + + LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") + create_standard_learning_unit( + "Familie Feller Bonsera kaufen ein Haus", + parent=circle, + category_name="Wohneigentum", + ) + create_standard_learning_unit( + "Rafael Fasel hat Ärger mit dem Vermieter", + parent=circle, + category_name="Rechtsstreitigkeiten", + ) + create_standard_learning_unit( + "Familie Babic spart auf ein Ziel", + parent=circle, + category_name="Sparen", + ) + create_standard_learning_unit( + "Chiara übernimmt das Haus der Eltern", + parent=circle, + category_name="Erben / Vererben", + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Bauen", parent=circle) + create_standard_learning_unit( + "Blumenladen Fleur expandiert", + parent=circle, + category_name="Wohneigentum", + ) + create_standard_learning_unit( + "Davide & Giulia verkaufen ihr Haus an Chiara", + parent=circle, + category_name="Wohneigentum", + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + +def create_standard_learning_unit(title, parent, category_name): + LearningUnitFactory( + title=category_name, + parent=parent, + course_category=CourseCategory.objects.get( + course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, title=category_name + ), + ) + LearningContentFactory( + title=f"Mediathek {category_name}", + parent=parent, + ) + LearningContentFactory( + title=title, + parent=parent, + ) + LearningContentFactory( + title=f"Fachcheck {category_name}", + parent=parent, + ) From 647631491da73bb844949d7a0eea38c64af1a8a2 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Tue, 4 Oct 2022 17:35:56 +0200 Subject: [PATCH 04/14] Add Performance Criteria for oktober demo --- .../create_default_competence_profile.py | 178 ++++++++++++++++++ .../learnpath/create_default_learning_path.py | 23 ++- .../0002_alter_learningcontent_contents.py | 104 +++++++++- server/vbv_lernwelt/learnpath/models.py | 2 +- .../tests/learning_path_factories.py | 2 +- 5 files changed, 300 insertions(+), 9 deletions(-) diff --git a/server/vbv_lernwelt/competence/create_default_competence_profile.py b/server/vbv_lernwelt/competence/create_default_competence_profile.py index feb410dc..e72c96f9 100644 --- a/server/vbv_lernwelt/competence/create_default_competence_profile.py +++ b/server/vbv_lernwelt/competence/create_default_competence_profile.py @@ -130,6 +130,184 @@ def create_default_competence_profile(): items=[("item", i) for i in c["items"]], ) + # Daten anhand von WEVM_Version Oktober 2022 + # Einstieg/Beobachten – Selbsteinschätzung «Einkommenssicherung» + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + + # Einstieg / Anwenden – Selbsteinschätzung «Fahrzeug» + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + + # Einstieg / Anwenden – Selbsteinschätzung «Reisen» + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + + # Analyse / Beobachten – Selbsteinschätzung «Einkommenssicherung» + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + + # Analyse/Anwenden – Selbsteinschätzung «Fahrzeug» PerformanceCriteriaFactory( parent=CompetencePage.objects.get(competence_id="B1"), competence_id="B1.3", diff --git a/server/vbv_lernwelt/learnpath/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/create_default_learning_path.py index fbaf9e20..28619886 100644 --- a/server/vbv_lernwelt/learnpath/create_default_learning_path.py +++ b/server/vbv_lernwelt/learnpath/create_default_learning_path.py @@ -45,7 +45,7 @@ def create_circle_children(circle, title): 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.", + "den Kundenbedarf ermitteln, analysieren, priorisieren und anschliessend zusammenfassen kannst.", ), ) ], @@ -84,7 +84,7 @@ def create_circle_children(circle, title): 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.", + "den Kundenbedarf ermitteln, analysieren, priorisieren und anschliessend zusammenfassen kannst.", ), ) ], @@ -592,6 +592,16 @@ def create_circle_einstieg(lp): LearningContentFactory( title="Verschaff dir einen Überblick", parent=circle, + 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.", + ), + ) + ], ) LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") @@ -662,6 +672,15 @@ def create_circle_analyse(lp): LearningContentFactory( title="Verschaff dir einen Überblick", parent=circle, + contents=[ + ( + "video", + VideoBlockFactory( + url="https://onedrive.live.com/embed?cid=26E4A934B79DCE5E&resid=26E4A934B79DCE5E%2153352&authkey=ABAdnARrD5VsIG8", + description="", + ), + ) + ], ) LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") diff --git a/server/vbv_lernwelt/learnpath/migrations/0002_alter_learningcontent_contents.py b/server/vbv_lernwelt/learnpath/migrations/0002_alter_learningcontent_contents.py index 365bcf45..39521cad 100644 --- a/server/vbv_lernwelt/learnpath/migrations/0002_alter_learningcontent_contents.py +++ b/server/vbv_lernwelt/learnpath/migrations/0002_alter_learningcontent_contents.py @@ -1,20 +1,114 @@ # Generated by Django 3.2.13 on 2022-10-04 13:34 -from django.db import migrations import wagtail.blocks import wagtail.fields +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('learnpath', '0001_initial'), + ("learnpath", "0001_initial"), ] operations = [ migrations.AlterField( - model_name='learningcontent', - name='contents', - field=wagtail.fields.StreamField([('video', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('resource', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('exercise', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('online_training', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('media_library', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('document', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('test', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('book', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('assignment', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())])), ('placeholder', wagtail.blocks.StructBlock([('description', wagtail.blocks.TextBlock()), ('url', wagtail.blocks.URLBlock())]))], use_json_field=None), + model_name="learningcontent", + name="contents", + field=wagtail.fields.StreamField( + [ + ( + "video", + wagtail.blocks.StructBlock( + [ + ("description", wagtail.blocks.TextBlock()), + ("url", wagtail.blocks.URLBlock()), + ] + ), + ), + ( + "resource", + wagtail.blocks.StructBlock( + [ + ("description", wagtail.blocks.TextBlock()), + ("url", wagtail.blocks.URLBlock()), + ] + ), + ), + ( + "exercise", + wagtail.blocks.StructBlock( + [ + ("description", wagtail.blocks.TextBlock()), + ("url", wagtail.blocks.URLBlock()), + ] + ), + ), + ( + "online_training", + wagtail.blocks.StructBlock( + [ + ("description", wagtail.blocks.TextBlock()), + ("url", wagtail.blocks.URLBlock()), + ] + ), + ), + ( + "media_library", + wagtail.blocks.StructBlock( + [ + ("description", wagtail.blocks.TextBlock()), + ("url", wagtail.blocks.URLBlock()), + ] + ), + ), + ( + "document", + wagtail.blocks.StructBlock( + [ + ("description", wagtail.blocks.TextBlock()), + ("url", wagtail.blocks.URLBlock()), + ] + ), + ), + ( + "test", + wagtail.blocks.StructBlock( + [ + ("description", wagtail.blocks.TextBlock()), + ("url", wagtail.blocks.URLBlock()), + ] + ), + ), + ( + "book", + wagtail.blocks.StructBlock( + [ + ("description", wagtail.blocks.TextBlock()), + ("url", wagtail.blocks.URLBlock()), + ] + ), + ), + ( + "assignment", + wagtail.blocks.StructBlock( + [ + ("description", wagtail.blocks.TextBlock()), + ("url", wagtail.blocks.URLBlock()), + ] + ), + ), + ( + "placeholder", + wagtail.blocks.StructBlock( + [ + ("description", wagtail.blocks.TextBlock()), + ("url", wagtail.blocks.URLBlock()), + ] + ), + ), + ], + use_json_field=None, + ), ), ] diff --git a/server/vbv_lernwelt/learnpath/models.py b/server/vbv_lernwelt/learnpath/models.py index bcf509a4..c57799c5 100644 --- a/server/vbv_lernwelt/learnpath/models.py +++ b/server/vbv_lernwelt/learnpath/models.py @@ -16,10 +16,10 @@ from vbv_lernwelt.learnpath.models_learning_unit_content import ( ExerciseBlock, MediaLibraryBlock, OnlineTrainingBlock, + PlaceholderBlock, ResourceBlock, TestBlock, VideoBlock, - PlaceholderBlock, ) from vbv_lernwelt.learnpath.serializer_helpers import get_it_serializer_class diff --git a/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py index ddbb6867..fe6068fe 100644 --- a/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py +++ b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py @@ -15,10 +15,10 @@ from vbv_lernwelt.learnpath.models_learning_unit_content import ( ExerciseBlock, MediaLibraryBlock, OnlineTrainingBlock, + PlaceholderBlock, ResourceBlock, TestBlock, VideoBlock, - PlaceholderBlock, ) From dec1b874a7697b2276bfffe60d2771e15f3994aa Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Wed, 5 Oct 2022 11:16:52 +0200 Subject: [PATCH 05/14] Add Performance Criteria for oktober demo --- .../create_default_competence_profile.py | 178 ++++++++++++++++++ 1 file changed, 178 insertions(+) diff --git a/server/vbv_lernwelt/competence/create_default_competence_profile.py b/server/vbv_lernwelt/competence/create_default_competence_profile.py index e72c96f9..c4491463 100644 --- a/server/vbv_lernwelt/competence/create_default_competence_profile.py +++ b/server/vbv_lernwelt/competence/create_default_competence_profile.py @@ -332,3 +332,181 @@ def create_default_competence_profile(): slug="versicherungsvermittlerin-lp-circle-analyse-lu-fahrzeug" ), ) + + # Analyse/Anwenden – Selbsteinschätzung «Reisen» + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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" + ), + ) + + # Lösung/Anwenden – Selbsteinschätzung «Fahrzeug» + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-fahrzeug" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-fahrzeug" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-fahrzeug" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-fahrzeug" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-fahrzeug" + ), + ) + + # Lösung/Anwenden – Selbsteinschätzung «Reisen» + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-reisen" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-reisen" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-reisen" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-reisen" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-reisen" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-reisen" + ), + ) + + # Abschluss/Anwenden – Selbsteinschätzung «Fahrzeug» + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-fahrzeug" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-fahrzeug" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-fahrzeug" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-fahrzeug" + ), + ) + + # Abschluss / Anwenden – Selbsteinschätzung «Reisen» + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-reisen" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get(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-analyse-lu-reisen" + ), + ) From 3bf9e75714b431168e2c114a07c785416b42f367 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Wed, 5 Oct 2022 11:32:40 +0200 Subject: [PATCH 06/14] Add urls to media_libraries in Lernpfad --- .../learningPath/LearningContent.vue | 9 ++++++++- .../learnpath/create_default_learning_path.py | 9 +++++++++ .../learnpath/models_learning_unit_content.py | 20 +++++++++---------- .../tests/learning_path_factories.py | 2 +- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/client/src/components/learningPath/LearningContent.vue b/client/src/components/learningPath/LearningContent.vue index 8f59ba1d..a2705061 100644 --- a/client/src/components/learningPath/LearningContent.vue +++ b/client/src/components/learningPath/LearningContent.vue @@ -37,7 +37,7 @@ const block = computed(() => {

- {{ learningContent?.title }} + {{ learningContent.title }}

+ +
+

+ + {{ learningContent.title }} + +

diff --git a/server/vbv_lernwelt/learnpath/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/create_default_learning_path.py index 28619886..7fc17f65 100644 --- a/server/vbv_lernwelt/learnpath/create_default_learning_path.py +++ b/server/vbv_lernwelt/learnpath/create_default_learning_path.py @@ -1,6 +1,7 @@ import wagtail_factories 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_localize.models import LocaleSynchronization @@ -962,6 +963,14 @@ def create_standard_learning_unit(title, parent, category_name): LearningContentFactory( title=f"Mediathek {category_name}", parent=parent, + contents=[ + ( + "media_library", + MediaLibraryBlockFactory( + url=f"/media/versicherungsvermittlerin-media/category/{slugify(category_name)}" + ), + ) + ], ) LearningContentFactory( title=title, diff --git a/server/vbv_lernwelt/learnpath/models_learning_unit_content.py b/server/vbv_lernwelt/learnpath/models_learning_unit_content.py index c0741e07..c3bca514 100644 --- a/server/vbv_lernwelt/learnpath/models_learning_unit_content.py +++ b/server/vbv_lernwelt/learnpath/models_learning_unit_content.py @@ -3,7 +3,7 @@ from wagtail import blocks class AssignmentBlock(blocks.StructBlock): description = blocks.TextBlock() - url = blocks.URLBlock() + url = blocks.TextBlock() class Meta: icon = "media" @@ -11,7 +11,7 @@ class AssignmentBlock(blocks.StructBlock): class BookBlock(blocks.StructBlock): description = blocks.TextBlock() - url = blocks.URLBlock() + url = blocks.TextBlock() class Meta: icon = "media" @@ -19,7 +19,7 @@ class BookBlock(blocks.StructBlock): class DocumentBlock(blocks.StructBlock): description = blocks.TextBlock() - url = blocks.URLBlock() + url = blocks.TextBlock() class Meta: icon = "media" @@ -27,7 +27,7 @@ class DocumentBlock(blocks.StructBlock): class PlaceholderBlock(blocks.StructBlock): description = blocks.TextBlock() - url = blocks.URLBlock() + url = blocks.TextBlock() class Meta: icon = "media" @@ -35,7 +35,7 @@ class PlaceholderBlock(blocks.StructBlock): class ExerciseBlock(blocks.StructBlock): description = blocks.TextBlock() - url = blocks.URLBlock() + url = blocks.TextBlock() class Meta: icon = "media" @@ -43,7 +43,7 @@ class ExerciseBlock(blocks.StructBlock): class MediaLibraryBlock(blocks.StructBlock): description = blocks.TextBlock() - url = blocks.URLBlock() + url = blocks.TextBlock() class Meta: icon = "media" @@ -51,7 +51,7 @@ class MediaLibraryBlock(blocks.StructBlock): class OnlineTrainingBlock(blocks.StructBlock): description = blocks.TextBlock() - url = blocks.URLBlock() + url = blocks.TextBlock() class Meta: icon = "media" @@ -59,7 +59,7 @@ class OnlineTrainingBlock(blocks.StructBlock): class ResourceBlock(blocks.StructBlock): description = blocks.TextBlock() - url = blocks.URLBlock() + url = blocks.TextBlock() class Meta: icon = "media" @@ -67,7 +67,7 @@ class ResourceBlock(blocks.StructBlock): class TestBlock(blocks.StructBlock): description = blocks.TextBlock() - url = blocks.URLBlock() + url = blocks.TextBlock() class Meta: icon = "media" @@ -76,7 +76,7 @@ class TestBlock(blocks.StructBlock): class VideoBlock(blocks.StructBlock): # TODO: Possible video Types for the user, upload file, add URL description = blocks.TextBlock() - url = blocks.URLBlock() + url = blocks.TextBlock() 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 fe6068fe..36d761c7 100644 --- a/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py +++ b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py @@ -103,7 +103,7 @@ class ResourceBlockFactory(wagtail_factories.StructBlockFactory): class MediaLibraryBlockFactory(wagtail_factories.StructBlockFactory): - description = "Beispiel Mediathekeninhalt" + description = "Sie erreichen die Mediathek mit einem Klick auf den unteren Link" class Meta: model = MediaLibraryBlock From b7e4d83e7691b3f7d8cd360ffb08223483af3d3a Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Wed, 5 Oct 2022 11:49:18 +0200 Subject: [PATCH 07/14] Add wbts to lernfpad oktober demo --- .../learningPath/LearningContent.vue | 5 +- client/src/services/learningPath.ts | 2 +- .../learnpath/create_default_learning_path.py | 1277 +++++++++-------- .../0003_alter_learningcontent_contents.py | 20 + server/vbv_lernwelt/learnpath/models.py | 9 + 5 files changed, 684 insertions(+), 629 deletions(-) create mode 100644 server/vbv_lernwelt/learnpath/migrations/0003_alter_learningcontent_contents.py diff --git a/client/src/components/learningPath/LearningContent.vue b/client/src/components/learningPath/LearningContent.vue index a2705061..4932fadf 100644 --- a/client/src/components/learningPath/LearningContent.vue +++ b/client/src/components/learningPath/LearningContent.vue @@ -50,7 +50,7 @@ const block = computed(() => { -
+
-
-

+

{{ learningContent.title }} diff --git a/client/src/services/learningPath.ts b/client/src/services/learningPath.ts index 94a85cbc..eafdf083 100644 --- a/client/src/services/learningPath.ts +++ b/client/src/services/learningPath.ts @@ -33,7 +33,7 @@ export class LearningPath implements CourseWagtailPage { return new LearningPath( json.id, json.slug, - json.title, + json.course.title, json.translation_key, json.frontend_url, json.course.id, diff --git a/server/vbv_lernwelt/learnpath/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/create_default_learning_path.py index 7fc17f65..21bcc00e 100644 --- a/server/vbv_lernwelt/learnpath/create_default_learning_path.py +++ b/server/vbv_lernwelt/learnpath/create_default_learning_path.py @@ -27,12 +27,660 @@ from vbv_lernwelt.learnpath.tests.learning_path_factories import ( ) -def create_circle(title, learning_path): - return CircleFactory( - title=title, - parent=learning_path, +def create_default_learning_path(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_VERSICHERUNGSVERMITTLERIN_ID) + lp = LearningPathFactory( + title="Lernpfad", + parent=course_page, ) + TopicFactory(title="Basis", is_visible=False, parent=lp) + create_circle_basis(lp) + + TopicFactory(title="Gewinnen von Kunden", parent=lp) + create_circle_gewinnen(lp) + + TopicFactory(title="Beraten der Kunden", parent=lp) + create_circle_einstieg(lp) + create_circle_analyse(lp) + create_circle_loesung(lp) + create_circle_abschluss(lp) + + TopicFactory(title="Betreuen und Ausbauen des Kundenstamms", parent=lp) + create_circle_betreuen(lp) + + # circle_analyse = create_circle("Betreuen", lp) + # create_circle_children(circle_analyse, "Betreuen") + # + # TopicFactory(title="Prüfung", is_visible=True, parent=lp) + # circle_analyse = create_circle("Prüfungsvorbereitung", lp) + # create_circle_children(circle_analyse, "Prüfungsvorbereitung") + + # 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) + + +def create_circle_basis(lp): + circle = CircleFactory( + title="Basis", + parent=lp, + description=""" +In diesem Circle erklären wir dir, wie der Lehrgang +Versicherungsvermittler / in " aufgebaut ist. Zudem vermitteln wir dir die wichtigsten Grundlagen, +damit erfolgreich mit deinem Lernpfad starten kannst. + """.strip(), + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Willkommen im Lehrgang Versicherungsvermitler VBV", + parent=circle, + ) + LearningUnitFactory(title="Arbeits- und Lerntechnik", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Luca organisiert seinen Arbeitsalltag", + parent=circle, + ) + LearningContentFactory( + title="Luca legt sich seine Lernstrategie zurecht", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Arbeits- und Lerntechnik", + parent=circle, + ) + LearningSequenceFactory(title="Grundlagen", parent=circle, icon="it-icon-ls-watch") + LearningUnitFactory(title="Versicherung", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Luca startet durch", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Allgemeines zu Versicherungen", + parent=circle, + ) + LearningUnitFactory(title="Beratung und Verkauf", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Luca macht sich fit im Verkauf", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Beratung und Verkauf", + parent=circle, + ) + 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, + ) + + +def create_circle_gewinnen(lp): + circle = CircleFactory( + title="Gewinnen", + parent=lp, + description=""" +Versicherungsvermittlerinnen und -vermittler verfügen über +ein starkes Netzwerk, das sie gezielt pflegen und ausbauen. Sie beraten und betreuen ihre bestehenden Kundinnen und Kunden professionell und gewinnen so ihr Vertrauen. Dadurch schaffen sie die Basis für das Gewinnen +von neuen Kundinnen und Kunden. Versicherungsvermittlerinnen und -vermittler sprechen ihre bestehenden Kundinnen +und Kunden auf Weiterempfehlung an. So nutzen sie ihre +bestehenden Kontakte geschickt für das Anwerben von +Neukundinnen und -kunden.""".strip(), + goals=[ + ( + "goal", + "... Bestehende Kunden so zu beraten, dass sie von diesen weiterempfohlen werden", + ), + ( + "goal", + "... Geeignete Personen wie z.B. Garagisten, Architekten, Treuhänder auf die Vermittlung / Zusammenarbeit anzusprechen", + ), + ( + "goal", + "... Verschiedene Datenquellen wie Internet, Telefonbuch, Handelszeitung, Baugesuche etc. Gezielt für die Gewinnung von Neukunden zu benützen", + ), + ( + "goal", + "... Ein beliebiges Gespräch resp. Einen bestehenden Kontakt in die Richtung «Versicherung» zu lenken", + ), + ( + "goal", + "... Das Thema Risiko und Sicherheit in einem Gespräch gezielt und auf die Situation des jeweiligen Gesprächspartners bezogen einfliessen zu lassen", + ), + ( + "goal", + "... Im täglichen Kontakt potenzielle Kundinnen und Kunden zu erkennen", + ), + ], + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + ) + + LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") + LearningUnitFactory(title="Kunden gewinnen", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Kunden gewinnen", + parent=circle, + ) + + LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-watch") + LearningUnitFactory(title="Sozialer Auftritt", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Sozialer Auftritt", + parent=circle, + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Sozialer Auftritt", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + +def create_circle_einstieg(lp): + circle = CircleFactory( + title="Einstieg", + parent=lp, + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + 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.", + ), + ) + ], + ) + + LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Patrizia & Marco sichern sich ab", + parent=circle, + category_name="Einkommenssicherung", + wbt_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") + create_standard_learning_unit( + "Rafael Fasel wechselt sein Auto", + parent=circle, + category_name="Fahrzeug", + wbt_url="/static/media/web_based_trainings/training-04-a-01-rafael-fasel-wechselt-sein-auto-einstieg/scormcontent/index.html", + ) + create_standard_learning_unit( + "Rafael Fasel zieht von zu Hause aus", + parent=circle, + category_name="Haushalt", + ) + create_standard_learning_unit( + "Emma und Ayla campen durch Amerika", + parent=circle, + category_name="Reisen", + wbt_url="/static/media/web_based_trainings/story-06-a-01-emma-und-ayla-campen-durch-amerika-einstieg/scormcontent/index.html", + check_url="/static/media/demo_oktober/fach_check_reisen/index.html", + ) + create_standard_learning_unit( + "Herr und Frau Russo planen ihre Pensionierung", + parent=circle, + category_name="Pensionierung", + ) + create_standard_learning_unit( + "Familie Babic erwartet Nachwuchs", + parent=circle, + category_name="Gesundheit", + ) + create_standard_learning_unit( + "Anna Fleur übernimmt den Blumenladen", + parent=circle, + category_name="KMU", + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Gesprächseinstieg", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Der erste Eindruck zählt", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + +def create_circle_analyse(lp): + circle = CircleFactory( + title="Analyse", + parent=lp, + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + contents=[ + ( + "video", + VideoBlockFactory( + url="https://onedrive.live.com/embed?cid=26E4A934B79DCE5E&resid=26E4A934B79DCE5E%2153352&authkey=ABAdnARrD5VsIG8", + description="", + ), + ) + ], + ) + + LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Patrizia & Marco sichern sich ab", + parent=circle, + category_name="Einkommenssicherung", + ) + + LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") + create_standard_learning_unit( + "Rafael Fasel wechselt sein Auto", + parent=circle, + category_name="Fahrzeug", + wbt_url="/static/media/web_based_trainings/story-04-a-02-rafael-fasel-wechselt-sein-auto-analyse/scormcontent/index.html", + ) + create_standard_learning_unit( + "Rafael Fasel zieht von zu Hause aus", + parent=circle, + category_name="Haushalt", + ) + create_standard_learning_unit( + "Emma und Ayla campen durch Amerika", + parent=circle, + category_name="Reisen", + check_url="/static/media/demo_oktober/fach_check_reisen/index.html", + ) + create_standard_learning_unit( + "Herr und Frau Russo planen ihre Pensionierung", + parent=circle, + category_name="Pensionierung", + ) + create_standard_learning_unit( + "Familie Babic erwartet Nachwuchs", + parent=circle, + category_name="Gesundheit", + ) + create_standard_learning_unit( + "Anna Fleur übernimmt den Blumenladen", + parent=circle, + category_name="KMU", + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Gesprächseinstieg", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + +def create_circle_loesung(lp): + circle = CircleFactory( + title="Lösung", + parent=lp, + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + ) + + LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Patrizia & Marco sichern sich ab", + parent=circle, + category_name="Einkommenssicherung", + ) + + LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") + create_standard_learning_unit( + "Rafael Fasel wechselt sein Auto", + parent=circle, + category_name="Fahrzeug", + ) + create_standard_learning_unit( + "Rafael Fasel zieht von zu Hause aus", + parent=circle, + category_name="Haushalt", + ) + create_standard_learning_unit( + "Emma und Ayla campen durch Amerika", + parent=circle, + category_name="Reisen", + check_url="/static/media/demo_oktober/fach_check_reisen/index.html", + ) + create_standard_learning_unit( + "Herr und Frau Russo planen ihre Pensionierung", + parent=circle, + category_name="Pensionierung", + ) + create_standard_learning_unit( + "Familie Babic erwartet Nachwuchs", + parent=circle, + category_name="Gesundheit", + ) + create_standard_learning_unit( + "Anna Fleur übernimmt den Blumenladen", + parent=circle, + category_name="KMU", + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Heirat", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Patrizia & Marco heiraten", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Heirat", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + +def create_circle_abschluss(lp): + circle = CircleFactory( + title="Abschluss", + parent=lp, + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + ) + + LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Patrizia & Marco sichern sich ab", + parent=circle, + category_name="Einkommenssicherung", + ) + + LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") + create_standard_learning_unit( + "Rafael Fasel wechselt sein Auto", + parent=circle, + category_name="Fahrzeug", + ) + create_standard_learning_unit( + "Rafael Fasel zieht von zu Hause aus", + parent=circle, + category_name="Haushalt", + ) + create_standard_learning_unit( + "Emma und Ayla campen durch Amerika", + parent=circle, + category_name="Reisen", + check_url="/static/media/demo_oktober/fach_check_reisen/index.html", + ) + create_standard_learning_unit( + "Herr und Frau Russo planen ihre Pensionierung", + parent=circle, + category_name="Pensionierung", + ) + create_standard_learning_unit( + "Familie Babic erwartet Nachwuchs", + parent=circle, + category_name="Gesundheit", + ) + create_standard_learning_unit( + "Anna Fleur übernimmt den Blumenladen", + parent=circle, + category_name="KMU", + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Auswandern", parent=circle) + LearningContentFactory( + title="Mediathek", + parent=circle, + ) + LearningContentFactory( + title="Emma und Ayla wandern nach Amerika aus", + parent=circle, + ) + LearningContentFactory( + title="Fachcheck Auswandern", + parent=circle, + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + +def create_circle_betreuen(lp): + circle = CircleFactory( + title="Abschluss", + parent=lp, + ) + LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") + LearningUnitFactory(title="Einführung", parent=circle) + LearningContentFactory( + title="Verschaff dir einen Überblick", + parent=circle, + ) + + LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") + create_standard_learning_unit( + "Patrizia Feller macht sich selbsständig", + parent=circle, + category_name="Selbständigkeit", + ) + + LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") + create_standard_learning_unit( + "Familie Feller Bonsera kaufen ein Haus", + parent=circle, + category_name="Wohneigentum", + ) + create_standard_learning_unit( + "Rafael Fasel hat Ärger mit dem Vermieter", + parent=circle, + category_name="Rechtsstreitigkeiten", + ) + create_standard_learning_unit( + "Familie Babic spart auf ein Ziel", + parent=circle, + category_name="Sparen", + ) + create_standard_learning_unit( + "Chiara übernimmt das Haus der Eltern", + parent=circle, + category_name="Erben / Vererben", + ) + + LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") + LearningUnitFactory(title="Bauen", parent=circle) + create_standard_learning_unit( + "Blumenladen Fleur expandiert", + parent=circle, + category_name="Wohneigentum", + ) + create_standard_learning_unit( + "Davide & Giulia verkaufen ihr Haus an Chiara", + parent=circle, + category_name="Wohneigentum", + ) + + LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory(title="Circle beenden", parent=circle) + LearningContentFactory( + title="Lerninhalt offen", + parent=circle, + ) + + +def create_standard_learning_unit( + title, parent, category_name, wbt_url=None, check_url=None +): + LearningUnitFactory( + title=category_name, + parent=parent, + course_category=CourseCategory.objects.get( + course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, title=category_name + ), + ) + LearningContentFactory( + title=f"Mediathek {category_name}", + parent=parent, + contents=[ + ( + "media_library", + MediaLibraryBlockFactory( + url=f"/media/versicherungsvermittlerin-media/category/{slugify(category_name)}" + ), + ) + ], + ) + + if wbt_url is None: + LearningContentFactory( + title=title, + parent=parent, + ) + else: + LearningContentFactory( + title=title, + parent=parent, + contents=[ + ( + "exercise", + ExerciseBlockFactory(url=wbt_url), + ) + ], + ) + + if check_url is None: + LearningContentFactory( + title=f"Fachcheck {category_name}", + parent=parent, + ) + else: + LearningContentFactory( + title=f"Fachcheck {category_name}", + parent=parent, + contents=[ + ( + "test", + TestBlockFactory(url=check_url), + ) + ], + ) + def create_circle_children(circle, title): LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") @@ -359,624 +1007,3 @@ def create_circle_children(circle, title): minutes=30, contents=[("document", DocumentBlockFactory())], ) - - -def create_default_learning_path(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() - - # create_default_competences() - - course_page = CoursePage.objects.get(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID) - lp = LearningPathFactory( - title="Versicherungsvermittler/in", - parent=course_page, - ) - - TopicFactory(title="Basis", is_visible=False, parent=lp) - create_circle_basis(lp) - - TopicFactory(title="Gewinnen von Kunden", parent=lp) - create_circle_gewinnen(lp) - - TopicFactory(title="Beraten der Kunden", parent=lp) - create_circle_einstieg(lp) - create_circle_analyse(lp) - create_circle_loesung(lp) - create_circle_abschluss(lp) - - TopicFactory(title="Betreuen und Ausbauen des Kundenstamms", parent=lp) - create_circle_betreuen(lp) - - # circle_analyse = create_circle("Betreuen", lp) - # create_circle_children(circle_analyse, "Betreuen") - # - # TopicFactory(title="Prüfung", is_visible=True, parent=lp) - # circle_analyse = create_circle("Prüfungsvorbereitung", lp) - # create_circle_children(circle_analyse, "Prüfungsvorbereitung") - - # 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) - - -def create_circle_basis(lp): - circle = CircleFactory( - title="Basis", - parent=lp, - description=""" -In diesem Circle erklären wir dir, wie der Lehrgang -Versicherungsvermittler / in " aufgebaut ist. Zudem vermitteln wir dir die wichtigsten Grundlagen, -damit erfolgreich mit deinem Lernpfad starten kannst. - """.strip(), - ) - LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") - LearningUnitFactory(title="Einführung", parent=circle) - LearningContentFactory( - title="Willkommen im Lehrgang Versicherungsvermitler VBV", - parent=circle, - ) - LearningUnitFactory(title="Arbeits- und Lerntechnik", parent=circle) - LearningContentFactory( - title="Mediathek", - parent=circle, - ) - LearningContentFactory( - title="Luca organisiert seinen Arbeitsalltag", - parent=circle, - ) - LearningContentFactory( - title="Luca legt sich seine Lernstrategie zurecht", - parent=circle, - ) - LearningContentFactory( - title="Fachcheck Arbeits- und Lerntechnik", - parent=circle, - ) - LearningSequenceFactory(title="Grundlagen", parent=circle, icon="it-icon-ls-watch") - LearningUnitFactory(title="Versicherung", parent=circle) - LearningContentFactory( - title="Mediathek", - parent=circle, - ) - LearningContentFactory( - title="Luca startet durch", - parent=circle, - ) - LearningContentFactory( - title="Fachcheck Allgemeines zu Versicherungen", - parent=circle, - ) - LearningUnitFactory(title="Beratung und Verkauf", parent=circle) - LearningContentFactory( - title="Mediathek", - parent=circle, - ) - LearningContentFactory( - title="Luca macht sich fit im Verkauf", - parent=circle, - ) - LearningContentFactory( - title="Fachcheck Beratung und Verkauf", - parent=circle, - ) - 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, - ) - - -def create_circle_gewinnen(lp): - circle = CircleFactory( - title="Gewinnen", - parent=lp, - description=""" -Versicherungsvermittlerinnen und -vermittler verfügen über -ein starkes Netzwerk, das sie gezielt pflegen und ausbauen. Sie beraten und betreuen ihre bestehenden Kundinnen und Kunden professionell und gewinnen so ihr Vertrauen. Dadurch schaffen sie die Basis für das Gewinnen -von neuen Kundinnen und Kunden. Versicherungsvermittlerinnen und -vermittler sprechen ihre bestehenden Kundinnen -und Kunden auf Weiterempfehlung an. So nutzen sie ihre -bestehenden Kontakte geschickt für das Anwerben von -Neukundinnen und -kunden.""".strip(), - goals=[ - ( - "goal", - "... Bestehende Kunden so zu beraten, dass sie von diesen weiterempfohlen werden", - ), - ( - "goal", - "... Geeignete Personen wie z.B. Garagisten, Architekten, Treuhänder auf die Vermittlung / Zusammenarbeit anzusprechen", - ), - ( - "goal", - "... Verschiedene Datenquellen wie Internet, Telefonbuch, Handelszeitung, Baugesuche etc. Gezielt für die Gewinnung von Neukunden zu benützen", - ), - ( - "goal", - "... Ein beliebiges Gespräch resp. Einen bestehenden Kontakt in die Richtung «Versicherung» zu lenken", - ), - ( - "goal", - "... Das Thema Risiko und Sicherheit in einem Gespräch gezielt und auf die Situation des jeweiligen Gesprächspartners bezogen einfliessen zu lassen", - ), - ( - "goal", - "... Im täglichen Kontakt potenzielle Kundinnen und Kunden zu erkennen", - ), - ], - ) - LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") - LearningUnitFactory(title="Einführung", parent=circle) - LearningContentFactory( - title="Verschaff dir einen Überblick", - parent=circle, - ) - - LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") - LearningUnitFactory(title="Kunden gewinnen", parent=circle) - LearningContentFactory( - title="Mediathek", - parent=circle, - ) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) - LearningContentFactory( - title="Fachcheck Kunden gewinnen", - parent=circle, - ) - - LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-watch") - LearningUnitFactory(title="Sozialer Auftritt", parent=circle) - LearningContentFactory( - title="Mediathek", - parent=circle, - ) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) - LearningContentFactory( - title="Fachcheck Sozialer Auftritt", - parent=circle, - ) - - LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") - LearningUnitFactory(title="Sozialer Auftritt", parent=circle) - LearningContentFactory( - title="Mediathek", - parent=circle, - ) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) - - LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") - LearningUnitFactory(title="Circle beenden", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) - - -def create_circle_einstieg(lp): - circle = CircleFactory( - title="Einstieg", - parent=lp, - ) - LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") - LearningUnitFactory(title="Einführung", parent=circle) - LearningContentFactory( - title="Verschaff dir einen Überblick", - parent=circle, - 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.", - ), - ) - ], - ) - - LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") - create_standard_learning_unit( - "Patrizia & Marco sichern sich ab", - parent=circle, - category_name="Einkommenssicherung", - ) - - LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") - create_standard_learning_unit( - "Rafael Fasel wechselt sein Auto", - parent=circle, - category_name="Fahrzeug", - ) - create_standard_learning_unit( - "Rafael Fasel zieht von zu Hause aus", - parent=circle, - category_name="Haushalt", - ) - create_standard_learning_unit( - "Emma und Ayla campen durch Amerika", - parent=circle, - category_name="Reisen", - ) - create_standard_learning_unit( - "Herr und Frau Russo planen ihre Pensionierung", - parent=circle, - category_name="Pensionierung", - ) - create_standard_learning_unit( - "Familie Babic erwartet Nachwuchs", - parent=circle, - category_name="Gesundheit", - ) - create_standard_learning_unit( - "Anna Fleur übernimmt den Blumenladen", - parent=circle, - category_name="KMU", - ) - - LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") - LearningUnitFactory(title="Gesprächseinstieg", parent=circle) - LearningContentFactory( - title="Mediathek", - parent=circle, - ) - LearningContentFactory( - title="Der erste Eindruck zählt", - parent=circle, - ) - - LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") - LearningUnitFactory(title="Circle beenden", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) - - -def create_circle_analyse(lp): - circle = CircleFactory( - title="Analyse", - parent=lp, - ) - LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") - LearningUnitFactory(title="Einführung", parent=circle) - LearningContentFactory( - title="Verschaff dir einen Überblick", - parent=circle, - contents=[ - ( - "video", - VideoBlockFactory( - url="https://onedrive.live.com/embed?cid=26E4A934B79DCE5E&resid=26E4A934B79DCE5E%2153352&authkey=ABAdnARrD5VsIG8", - description="", - ), - ) - ], - ) - - LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") - create_standard_learning_unit( - "Patrizia & Marco sichern sich ab", - parent=circle, - category_name="Einkommenssicherung", - ) - - LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") - create_standard_learning_unit( - "Rafael Fasel wechselt sein Auto", - parent=circle, - category_name="Fahrzeug", - ) - create_standard_learning_unit( - "Rafael Fasel zieht von zu Hause aus", - parent=circle, - category_name="Haushalt", - ) - create_standard_learning_unit( - "Emma und Ayla campen durch Amerika", - parent=circle, - category_name="Reisen", - ) - create_standard_learning_unit( - "Herr und Frau Russo planen ihre Pensionierung", - parent=circle, - category_name="Pensionierung", - ) - create_standard_learning_unit( - "Familie Babic erwartet Nachwuchs", - parent=circle, - category_name="Gesundheit", - ) - create_standard_learning_unit( - "Anna Fleur übernimmt den Blumenladen", - parent=circle, - category_name="KMU", - ) - - LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") - LearningUnitFactory(title="Gesprächseinstieg", parent=circle) - LearningContentFactory( - title="Mediathek", - parent=circle, - ) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) - - LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") - LearningUnitFactory(title="Circle beenden", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) - - -def create_circle_loesung(lp): - circle = CircleFactory( - title="Lösung", - parent=lp, - ) - LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") - LearningUnitFactory(title="Einführung", parent=circle) - LearningContentFactory( - title="Verschaff dir einen Überblick", - parent=circle, - ) - - LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") - create_standard_learning_unit( - "Patrizia & Marco sichern sich ab", - parent=circle, - category_name="Einkommenssicherung", - ) - - LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") - create_standard_learning_unit( - "Rafael Fasel wechselt sein Auto", - parent=circle, - category_name="Fahrzeug", - ) - create_standard_learning_unit( - "Rafael Fasel zieht von zu Hause aus", - parent=circle, - category_name="Haushalt", - ) - create_standard_learning_unit( - "Emma und Ayla campen durch Amerika", - parent=circle, - category_name="Reisen", - ) - create_standard_learning_unit( - "Herr und Frau Russo planen ihre Pensionierung", - parent=circle, - category_name="Pensionierung", - ) - create_standard_learning_unit( - "Familie Babic erwartet Nachwuchs", - parent=circle, - category_name="Gesundheit", - ) - create_standard_learning_unit( - "Anna Fleur übernimmt den Blumenladen", - parent=circle, - category_name="KMU", - ) - - LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") - LearningUnitFactory(title="Heirat", parent=circle) - LearningContentFactory( - title="Mediathek", - parent=circle, - ) - LearningContentFactory( - title="Patrizia & Marco heiraten", - parent=circle, - ) - LearningContentFactory( - title="Fachcheck Heirat", - parent=circle, - ) - - LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") - LearningUnitFactory(title="Circle beenden", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) - - -def create_circle_abschluss(lp): - circle = CircleFactory( - title="Abschluss", - parent=lp, - ) - LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") - LearningUnitFactory(title="Einführung", parent=circle) - LearningContentFactory( - title="Verschaff dir einen Überblick", - parent=circle, - ) - - LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") - create_standard_learning_unit( - "Patrizia & Marco sichern sich ab", - parent=circle, - category_name="Einkommenssicherung", - ) - - LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") - create_standard_learning_unit( - "Rafael Fasel wechselt sein Auto", - parent=circle, - category_name="Fahrzeug", - ) - create_standard_learning_unit( - "Rafael Fasel zieht von zu Hause aus", - parent=circle, - category_name="Haushalt", - ) - create_standard_learning_unit( - "Emma und Ayla campen durch Amerika", - parent=circle, - category_name="Reisen", - ) - create_standard_learning_unit( - "Herr und Frau Russo planen ihre Pensionierung", - parent=circle, - category_name="Pensionierung", - ) - create_standard_learning_unit( - "Familie Babic erwartet Nachwuchs", - parent=circle, - category_name="Gesundheit", - ) - create_standard_learning_unit( - "Anna Fleur übernimmt den Blumenladen", - parent=circle, - category_name="KMU", - ) - - LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") - LearningUnitFactory(title="Auswandern", parent=circle) - LearningContentFactory( - title="Mediathek", - parent=circle, - ) - LearningContentFactory( - title="Emma und Ayla wandern nach Amerika aus", - parent=circle, - ) - LearningContentFactory( - title="Fachcheck Auswandern", - parent=circle, - ) - - LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") - LearningUnitFactory(title="Circle beenden", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) - - -def create_circle_betreuen(lp): - circle = CircleFactory( - title="Abschluss", - parent=lp, - ) - LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start") - LearningUnitFactory(title="Einführung", parent=circle) - LearningContentFactory( - title="Verschaff dir einen Überblick", - parent=circle, - ) - - LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch") - create_standard_learning_unit( - "Patrizia Feller macht sich selbsständig", - parent=circle, - category_name="Selbständigkeit", - ) - - LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply") - create_standard_learning_unit( - "Familie Feller Bonsera kaufen ein Haus", - parent=circle, - category_name="Wohneigentum", - ) - create_standard_learning_unit( - "Rafael Fasel hat Ärger mit dem Vermieter", - parent=circle, - category_name="Rechtsstreitigkeiten", - ) - create_standard_learning_unit( - "Familie Babic spart auf ein Ziel", - parent=circle, - category_name="Sparen", - ) - create_standard_learning_unit( - "Chiara übernimmt das Haus der Eltern", - parent=circle, - category_name="Erben / Vererben", - ) - - LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice") - LearningUnitFactory(title="Bauen", parent=circle) - create_standard_learning_unit( - "Blumenladen Fleur expandiert", - parent=circle, - category_name="Wohneigentum", - ) - create_standard_learning_unit( - "Davide & Giulia verkaufen ihr Haus an Chiara", - parent=circle, - category_name="Wohneigentum", - ) - - LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end") - LearningUnitFactory(title="Circle beenden", parent=circle) - LearningContentFactory( - title="Lerninhalt offen", - parent=circle, - ) - - -def create_standard_learning_unit(title, parent, category_name): - LearningUnitFactory( - title=category_name, - parent=parent, - course_category=CourseCategory.objects.get( - course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, title=category_name - ), - ) - LearningContentFactory( - title=f"Mediathek {category_name}", - parent=parent, - contents=[ - ( - "media_library", - MediaLibraryBlockFactory( - url=f"/media/versicherungsvermittlerin-media/category/{slugify(category_name)}" - ), - ) - ], - ) - LearningContentFactory( - title=title, - parent=parent, - ) - LearningContentFactory( - title=f"Fachcheck {category_name}", - parent=parent, - ) diff --git a/server/vbv_lernwelt/learnpath/migrations/0003_alter_learningcontent_contents.py b/server/vbv_lernwelt/learnpath/migrations/0003_alter_learningcontent_contents.py new file mode 100644 index 00000000..9965516c --- /dev/null +++ b/server/vbv_lernwelt/learnpath/migrations/0003_alter_learningcontent_contents.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.13 on 2022-10-05 10:06 + +from django.db import migrations +import wagtail.blocks +import wagtail.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('learnpath', '0002_alter_learningcontent_contents'), + ] + + 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())])), ('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.py b/server/vbv_lernwelt/learnpath/models.py index c57799c5..31a1d794 100644 --- a/server/vbv_lernwelt/learnpath/models.py +++ b/server/vbv_lernwelt/learnpath/models.py @@ -87,6 +87,9 @@ class Topic(Page): ], ) + def get_admin_display_title(self): + return f"Thema: {self.draft_title}" + class Meta: verbose_name = "Topic" @@ -198,6 +201,9 @@ class LearningSequence(Page): {self.draft_title} """ + def get_admin_display_title(self): + return f"LS: {self.draft_title}" + def full_clean(self, *args, **kwargs): self.slug = find_slug_with_parent_prefix(self, "ls") super(LearningSequence, self).full_clean(*args, **kwargs) @@ -247,6 +253,9 @@ class LearningUnit(Page): short_slug = self.slug.replace(f"{self.get_parent().slug}-lu-", "") return f"{self.get_parent().specific.get_frontend_url()}/evaluate/{short_slug}" + def get_admin_display_title(self): + return f"LE: {self.draft_title}" + @classmethod def get_serializer_class(cls): from vbv_lernwelt.learnpath.serializers import LearningUnitSerializer From 6abeb6a2b1d32f135b52c0c254333fc00215c65b Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Wed, 5 Oct 2022 13:32:03 +0200 Subject: [PATCH 08/14] Refactor some layouts --- .../learningPath/LearningContent.vue | 18 +++-- .../LearningPathViewVertical.vue | 0 .../learningPath/SelfEvaluation.vue | 2 +- client/src/pages/CockpitPage.vue | 29 ++++++++ client/src/pages/CockpitView.vue | 27 -------- client/src/pages/LoginPage.vue | 66 ++++++++++++++++++ client/src/pages/LoginView.vue | 58 ---------------- .../{MessagesView.vue => MessagesPage.vue} | 0 .../{ProfileView.vue => ProfilePage.vue} | 0 .../src/pages/{ShopView.vue => ShopPage.vue} | 0 ...{StyleGuideView.vue => StyleGuidePage.vue} | 0 .../CirclePage.vue} | 0 .../LearningContentPage.vue} | 0 .../LearningPathPage.vue} | 69 ++++++++++--------- .../SelfEvaluationPage.vue} | 0 client/src/router/index.ts | 38 +++++----- client/tailwind.css | 4 +- 17 files changed, 165 insertions(+), 146 deletions(-) rename client/src/{pages => components/learningPath}/LearningPathViewVertical.vue (100%) create mode 100644 client/src/pages/CockpitPage.vue delete mode 100644 client/src/pages/CockpitView.vue create mode 100644 client/src/pages/LoginPage.vue delete mode 100644 client/src/pages/LoginView.vue rename client/src/pages/{MessagesView.vue => MessagesPage.vue} (100%) rename client/src/pages/{ProfileView.vue => ProfilePage.vue} (100%) rename client/src/pages/{ShopView.vue => ShopPage.vue} (100%) rename client/src/pages/{StyleGuideView.vue => StyleGuidePage.vue} (100%) rename client/src/pages/{CircleView.vue => learningPath/CirclePage.vue} (100%) rename client/src/pages/{LearningContentView.vue => learningPath/LearningContentPage.vue} (100%) rename client/src/pages/{LearningPathView.vue => learningPath/LearningPathPage.vue} (61%) rename client/src/pages/{LearningUnitSelfEvaluationView.vue => learningPath/SelfEvaluationPage.vue} (100%) diff --git a/client/src/components/learningPath/LearningContent.vue b/client/src/components/learningPath/LearningContent.vue index 4932fadf..8e4a85d4 100644 --- a/client/src/components/learningPath/LearningContent.vue +++ b/client/src/components/learningPath/LearningContent.vue @@ -55,8 +55,6 @@ const block = computed(() => {

-

{{ block.value.description }}

-
-

+

+

{{ learningContent.title }}

+ +

{{ block.value.description }}

- {{ learningContent.title }} + Mediathek öffnen -

+
+ +
+

{{ block.value.description }}

+

{{ learningContent.title }}

+
+ +
{{ block.value.description }}
diff --git a/client/src/pages/LearningPathViewVertical.vue b/client/src/components/learningPath/LearningPathViewVertical.vue similarity index 100% rename from client/src/pages/LearningPathViewVertical.vue rename to client/src/components/learningPath/LearningPathViewVertical.vue diff --git a/client/src/components/learningPath/SelfEvaluation.vue b/client/src/components/learningPath/SelfEvaluation.vue index 389cd691..7fe4afe6 100644 --- a/client/src/components/learningPath/SelfEvaluation.vue +++ b/client/src/components/learningPath/SelfEvaluation.vue @@ -50,7 +50,7 @@ function handleContinue() { -
+
Schritt {{ state.questionIndex + 1 }} von {{ questions.length }}
diff --git a/client/src/pages/CockpitPage.vue b/client/src/pages/CockpitPage.vue new file mode 100644 index 00000000..76cb303e --- /dev/null +++ b/client/src/pages/CockpitPage.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/client/src/pages/CockpitView.vue b/client/src/pages/CockpitView.vue deleted file mode 100644 index 69407013..00000000 --- a/client/src/pages/CockpitView.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - - - diff --git a/client/src/pages/LoginPage.vue b/client/src/pages/LoginPage.vue new file mode 100644 index 00000000..7c972ef7 --- /dev/null +++ b/client/src/pages/LoginPage.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/client/src/pages/LoginView.vue b/client/src/pages/LoginView.vue deleted file mode 100644 index 8f7c21b2..00000000 --- a/client/src/pages/LoginView.vue +++ /dev/null @@ -1,58 +0,0 @@ - - - - - diff --git a/client/src/pages/MessagesView.vue b/client/src/pages/MessagesPage.vue similarity index 100% rename from client/src/pages/MessagesView.vue rename to client/src/pages/MessagesPage.vue diff --git a/client/src/pages/ProfileView.vue b/client/src/pages/ProfilePage.vue similarity index 100% rename from client/src/pages/ProfileView.vue rename to client/src/pages/ProfilePage.vue diff --git a/client/src/pages/ShopView.vue b/client/src/pages/ShopPage.vue similarity index 100% rename from client/src/pages/ShopView.vue rename to client/src/pages/ShopPage.vue diff --git a/client/src/pages/StyleGuideView.vue b/client/src/pages/StyleGuidePage.vue similarity index 100% rename from client/src/pages/StyleGuideView.vue rename to client/src/pages/StyleGuidePage.vue diff --git a/client/src/pages/CircleView.vue b/client/src/pages/learningPath/CirclePage.vue similarity index 100% rename from client/src/pages/CircleView.vue rename to client/src/pages/learningPath/CirclePage.vue diff --git a/client/src/pages/LearningContentView.vue b/client/src/pages/learningPath/LearningContentPage.vue similarity index 100% rename from client/src/pages/LearningContentView.vue rename to client/src/pages/learningPath/LearningContentPage.vue diff --git a/client/src/pages/LearningPathView.vue b/client/src/pages/learningPath/LearningPathPage.vue similarity index 61% rename from client/src/pages/LearningPathView.vue rename to client/src/pages/learningPath/LearningPathPage.vue index afe187fc..9246d84c 100644 --- a/client/src/pages/LearningPathView.vue +++ b/client/src/pages/learningPath/LearningPathPage.vue @@ -6,7 +6,7 @@ import { useUserStore } from "@/stores/user"; import { onMounted } from "vue"; import LearningPathDiagram from "@/components/learningPath/LearningPathDiagram.vue"; -import LearningPathViewVertical from "@/pages/LearningPathViewVertical.vue"; +import LearningPathViewVertical from "@/components/learningPath/LearningPathViewVertical.vue"; import type { LearningPath } from "@/services/learningPath"; log.debug("LearningPathView created"); @@ -74,42 +74,43 @@ const createContinueUrl = (learningPath: LearningPath): [string, boolean] => { >
-

- {{ learningPathStore.learningPath.title }} -

- -
-
-

Willkommmen zurück, {{ userStore.first_name }}

-

-
+
+

+ {{ learningPathStore.learningPath.title }} +

- Nächster Schritt -

- {{ - learningPathStore.learningPath.nextLearningContent.parentCircle.title - }}: - {{ - learningPathStore.learningPath.nextLearningContent - .parentLearningSequence?.title - }} -

- +

Willkommmen zurück, {{ userStore.first_name }}

+

+
+
- - Los geht's - - Weiter geht's - + Nächster Schritt +

+ {{ + learningPathStore.learningPath.nextLearningContent.parentCircle.title + }}: + {{ + learningPathStore.learningPath.nextLearningContent + .parentLearningSequence?.title + }} +

+ + + Los geht's + + Weiter geht's + +
diff --git a/client/src/pages/LearningUnitSelfEvaluationView.vue b/client/src/pages/learningPath/SelfEvaluationPage.vue similarity index 100% rename from client/src/pages/LearningUnitSelfEvaluationView.vue rename to client/src/pages/learningPath/SelfEvaluationPage.vue diff --git a/client/src/router/index.ts b/client/src/router/index.ts index 2f23c424..88e481b7 100644 --- a/client/src/router/index.ts +++ b/client/src/router/index.ts @@ -1,5 +1,5 @@ -import CockpitView from "@/pages/CockpitView.vue"; -import LoginView from "@/pages/LoginView.vue"; +import CockpitView from "@/pages/CockpitPage.vue"; +import LoginView from "@/pages/LoginPage.vue"; import { redirectToLoginIfRequired, updateLoggedIn } from "@/router/guards"; import { useAppStore } from "@/stores/app"; import { createRouter, createWebHistory } from "vue-router"; @@ -20,10 +20,6 @@ const router = createRouter({ name: "home", component: CockpitView, }, - { - path: "/shop", - component: () => import("@/pages/ShopView.vue"), - }, { path: "/media/:mediaLibraryPageSlug", props: true, @@ -49,37 +45,41 @@ const router = createRouter({ }, ], }, - { - path: "/messages", - component: () => import("@/pages/MessagesView.vue"), - }, - { - path: "/profile", - component: () => import("@/pages/ProfileView.vue"), - }, { path: "/learn/:learningPathSlug", - component: () => import("../pages/LearningPathView.vue"), + component: () => import("../pages/learningPath/LearningPathPage.vue"), props: true, }, { path: "/learn/:learningPathSlug/:circleSlug", - component: () => import("../pages/CircleView.vue"), + component: () => import("../pages/learningPath/CirclePage.vue"), props: true, }, { path: "/learn/:learningPathSlug/:circleSlug/evaluate/:learningUnitSlug", - component: () => import("../pages/LearningUnitSelfEvaluationView.vue"), + component: () => import("../pages/learningPath/SelfEvaluationPage.vue"), props: true, }, { path: "/learn/:learningPathSlug/:circleSlug/:contentSlug", - component: () => import("../pages/LearningContentView.vue"), + component: () => import("../pages/learningPath/LearningContentPage.vue"), props: true, }, + { + path: "/shop", + component: () => import("@/pages/ShopPage.vue"), + }, + { + path: "/messages", + component: () => import("@/pages/MessagesPage.vue"), + }, + { + path: "/profile", + component: () => import("@/pages/ProfilePage.vue"), + }, { path: "/styleguide", - component: () => import("../pages/StyleGuideView.vue"), + component: () => import("../pages/StyleGuidePage.vue"), meta: { public: true, }, diff --git a/client/tailwind.css b/client/tailwind.css index 7ff15ab8..b89819f6 100644 --- a/client/tailwind.css +++ b/client/tailwind.css @@ -60,11 +60,11 @@ svg { } .container-medium { - @apply mx-auto max-w-5xl px-4 lg:px-8 py-4; + @apply mx-auto max-w-5xl w-full px-4 lg:px-8 py-4; } .container-large { - @apply mx-auto max-w-9xl px-4 lg:px-8 py-4; + @apply mx-auto max-w-6xl w-full px-4 lg:px-8 py-4; } } From 914223bc77f35db8b2cabbfaec283e67ebf11766 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Wed, 5 Oct 2022 14:12:03 +0200 Subject: [PATCH 09/14] Adapt design of media library --- client/src/components/AppFooter.vue | 9 +++++- .../src/components/mediaLibrary/LinkCard.vue | 4 +-- .../components/mediaLibrary/OverviewCard.vue | 6 ++-- .../mediaLibrary/MLCategoryDetailPage.vue | 23 +++++++++------ .../mediaLibrary/MLCategoryIndexPage.vue | 4 +-- .../pages/mediaLibrary/MLCategoryLayout.vue | 27 ++++++++++++------ client/src/pages/mediaLibrary/MLIndexPage.vue | 4 +-- .../src/pages/mediaLibrary/MLParentPage.vue | 14 ++++----- .../static/icons/demo/category-large.png | Bin 0 -> 56716 bytes 9 files changed, 56 insertions(+), 35 deletions(-) create mode 100644 server/vbv_lernwelt/static/icons/demo/category-large.png diff --git a/client/src/components/AppFooter.vue b/client/src/components/AppFooter.vue index 927b6d3e..3fde9bf6 100644 --- a/client/src/components/AppFooter.vue +++ b/client/src/components/AppFooter.vue @@ -5,10 +5,17 @@ log.debug("AppFooter created"); diff --git a/client/src/components/mediaLibrary/LinkCard.vue b/client/src/components/mediaLibrary/LinkCard.vue index 943a4973..760ba159 100644 --- a/client/src/components/mediaLibrary/LinkCard.vue +++ b/client/src/components/mediaLibrary/LinkCard.vue @@ -1,7 +1,7 @@ diff --git a/client/src/pages/mediaLibrary/MLCategoryDetailPage.vue b/client/src/pages/mediaLibrary/MLCategoryDetailPage.vue index 9efbc880..126b5a0f 100644 --- a/client/src/pages/mediaLibrary/MLCategoryDetailPage.vue +++ b/client/src/pages/mediaLibrary/MLCategoryDetailPage.vue @@ -52,27 +52,32 @@ const hasMoreItemsForType = (itemType: string, items: object[]) => {