From 904d24f566c648d7aa632cf1d7154562a0d06233 Mon Sep 17 00:00:00 2001
From: Daniel Egger
Date: Fri, 26 May 2023 12:43:57 +0200
Subject: [PATCH 1/7] Add `LearningContentDocumentList`
---
.../0005_learningcontentdocumentlist.py | 31 +++++++++++++++++++
server/vbv_lernwelt/learnpath/models.py | 26 +++++++++++++++-
.../tests/learning_path_factories.py | 18 +++++++++++
3 files changed, 74 insertions(+), 1 deletion(-)
create mode 100644 server/vbv_lernwelt/learnpath/migrations/0005_learningcontentdocumentlist.py
diff --git a/server/vbv_lernwelt/learnpath/migrations/0005_learningcontentdocumentlist.py b/server/vbv_lernwelt/learnpath/migrations/0005_learningcontentdocumentlist.py
new file mode 100644
index 00000000..0bf83528
--- /dev/null
+++ b/server/vbv_lernwelt/learnpath/migrations/0005_learningcontentdocumentlist.py
@@ -0,0 +1,31 @@
+# Generated by Django 3.2.13 on 2023-05-26 10:34
+
+from django.db import migrations, models
+import django.db.models.deletion
+import wagtail.blocks
+import wagtail.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('wagtailcore', '0083_workflowcontenttype'),
+ ('learnpath', '0004_learningcontentassignment_assignment_type'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='LearningContentDocumentList',
+ fields=[
+ ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
+ ('minutes', models.PositiveIntegerField(default=15)),
+ ('description', wagtail.fields.RichTextField(blank=True)),
+ ('content_url', models.TextField(blank=True)),
+ ('documents', wagtail.fields.StreamField([('document', wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('description', wagtail.blocks.TextBlock(default='', required=False)), ('icon_url', wagtail.blocks.TextBlock(default='', required=False)), ('link_display_text', wagtail.blocks.CharBlock(default='Link öffnen', max_length=255)), ('url', wagtail.blocks.TextBlock(default='', required=False)), ('open_window', wagtail.blocks.BooleanBlock(default=False))]))], blank=True, use_json_field=True)),
+ ],
+ options={
+ 'abstract': False,
+ },
+ bases=('wagtailcore.page',),
+ ),
+ ]
diff --git a/server/vbv_lernwelt/learnpath/models.py b/server/vbv_lernwelt/learnpath/models.py
index 61c8de62..a430457f 100644
--- a/server/vbv_lernwelt/learnpath/models.py
+++ b/server/vbv_lernwelt/learnpath/models.py
@@ -3,13 +3,14 @@ import re
from django.db import models
from django.utils.text import slugify
from wagtail.admin.panels import FieldPanel, PageChooserPanel
-from wagtail.fields import RichTextField
+from wagtail.fields import RichTextField, StreamField
from wagtail.models import Page
from vbv_lernwelt.assignment.models import AssignmentType
from vbv_lernwelt.core.constants import DEFAULT_RICH_TEXT_FEATURES_WITH_HEADER
from vbv_lernwelt.core.model_utils import find_available_slug
from vbv_lernwelt.course.models import CourseBasePage, CoursePage
+from vbv_lernwelt.media_library.content_blocks import LearnMediaBlock
class LearningPath(CourseBasePage):
@@ -352,6 +353,29 @@ class LearningContentAssignment(LearningContent):
]
+class LearningContentDocumentList(LearningContent):
+ serialize_field_names = LearningContent.serialize_field_names + [
+ "documents",
+ ]
+ parent_page_types = ["learnpath.Circle"]
+ subpage_types = []
+
+ documents = StreamField(
+ [
+ ("document", LearnMediaBlock()),
+ ],
+ use_json_field=True,
+ blank=True,
+ )
+
+ content_panels = [
+ FieldPanel("title", classname="full title"),
+ FieldPanel("minutes"),
+ FieldPanel("description"),
+ FieldPanel("documents"),
+ ]
+
+
def find_slug_with_parent_prefix(page, type_prefix, slug_postfix=None):
parent_slug = page.get_ancestors().exact_type(LearningPath, Circle).last().slug
if parent_slug:
diff --git a/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py
index 77dc136e..f5428bfd 100644
--- a/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py
+++ b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py
@@ -16,6 +16,10 @@ from vbv_lernwelt.learnpath.models import (
LearningSequence,
LearningUnit,
Topic,
+ LearningContentDocumentList,
+)
+from vbv_lernwelt.media_library.tests.media_library_factories import (
+ LearnMediaBlockFactory,
)
@@ -172,3 +176,17 @@ class LearningContentAssignmentFactory(wagtail_factories.PageFactory):
class Meta:
model = LearningContentAssignment
+
+
+class LearningContentDocumentListFactory(wagtail_factories.PageFactory):
+ title = "Dokumente"
+ minutes = 0
+ content_url = ""
+ description = RichText("")
+ documents = [
+ ("document", LearnMediaBlockFactory()),
+ ("document", LearnMediaBlockFactory()),
+ ]
+
+ class Meta:
+ model = LearningContentDocumentList
From 993795172823dff81ee68e21a720fd298eccafea Mon Sep 17 00:00:00 2001
From: Daniel Egger
Date: Fri, 26 May 2023 14:28:20 +0200
Subject: [PATCH 2/7] Wire document list to frontend
---
.../LearningContentParent.vue | 2 ++
.../blocks/DocumentListBlock.vue | 18 ++++++++++++++++++
client/src/services/circle.ts | 3 +++
client/src/types.ts | 12 ++++++++++++
client/src/utils/typeMaps.ts | 4 +++-
client/src/utils/utils.ts | 4 ++--
6 files changed, 40 insertions(+), 3 deletions(-)
create mode 100644 client/src/pages/learningPath/learningContentPage/blocks/DocumentListBlock.vue
diff --git a/client/src/pages/learningPath/learningContentPage/LearningContentParent.vue b/client/src/pages/learningPath/learningContentPage/LearningContentParent.vue
index e34bae26..5d5cb0ee 100644
--- a/client/src/pages/learningPath/learningContentPage/LearningContentParent.vue
+++ b/client/src/pages/learningPath/learningContentPage/LearningContentParent.vue
@@ -1,5 +1,6 @@
+
+
+
+
+
+
diff --git a/client/src/services/circle.ts b/client/src/services/circle.ts
index 7cacaff2..1455c12e 100644
--- a/client/src/services/circle.ts
+++ b/client/src/services/circle.ts
@@ -14,11 +14,13 @@ import type {
import groupBy from "lodash/groupBy";
import partition from "lodash/partition";
import values from "lodash/values";
+import log from "loglevel";
function isLearningContentType(object: any): object is LearningContent {
return (
object?.content_type === "learnpath.LearningContentAssignment" ||
object?.content_type === "learnpath.LearningContentAttendanceCourse" ||
+ object?.content_type === "learnpath.LearningContentDocumentList" ||
object?.content_type === "learnpath.LearningContentFeedback" ||
object?.content_type === "learnpath.LearningContentLearningModule" ||
object?.content_type === "learnpath.LearningContentMediaLibrary" ||
@@ -83,6 +85,7 @@ export function parseLearningSequences(
learningUnit.learningContents.push(child);
} else {
+ log.error("Unknown CircleChild found...", child);
throw new Error("Unknown CircleChild found...");
}
});
diff --git a/client/src/types.ts b/client/src/types.ts
index 1a090d74..5a1a0fb7 100644
--- a/client/src/types.ts
+++ b/client/src/types.ts
@@ -23,6 +23,7 @@ export interface CircleLight {
export type LearningContent =
| LearningContentAssignment
| LearningContentAttendanceCourse
+ | LearningContentDocumentList
| LearningContentFeedback
| LearningContentLearningModule
| LearningContentMediaLibrary
@@ -55,6 +56,17 @@ export interface LearningContentAttendanceCourse extends LearningContentInterfac
readonly content_type: "learnpath.LearningContentAttendanceCourse";
}
+export interface LearningContentDocument {
+ readonly type: "document";
+ readonly id: string;
+ readonly value: MediaLibraryContentBlockValue;
+}
+
+export interface LearningContentDocumentList extends LearningContentInterface {
+ readonly content_type: "learnpath.LearningContentDocumentList";
+ readonly documents: LearningContentDocument[];
+}
+
export interface LearningContentFeedback extends LearningContentInterface {
readonly content_type: "learnpath.LearningContentFeedback";
}
diff --git a/client/src/utils/typeMaps.ts b/client/src/utils/typeMaps.ts
index fa443537..96d8bb34 100644
--- a/client/src/utils/typeMaps.ts
+++ b/client/src/utils/typeMaps.ts
@@ -26,6 +26,8 @@ export function learningContentTypeData(
}
case "learnpath.LearningContentAttendanceCourse":
return { title: "Präsenzkurs", icon: "it-icon-lc-training" };
+ case "learnpath.LearningContentDocumentList":
+ return { title: "Dokumente", icon: "it-icon-lc-document" };
case "learnpath.LearningContentLearningModule":
return { title: "Lernmodul", icon: "it-icon-lc-learning-module" };
case "learnpath.LearningContentMediaLibrary":
@@ -42,5 +44,5 @@ export function learningContentTypeData(
return { title: "In Umsetzung", icon: "it-icon-lc-document" };
}
- return assertUnreachable();
+ return assertUnreachable(`did not handle ${lc.content_type}`);
}
diff --git a/client/src/utils/utils.ts b/client/src/utils/utils.ts
index c6a55326..52bceeee 100644
--- a/client/src/utils/utils.ts
+++ b/client/src/utils/utils.ts
@@ -1,3 +1,3 @@
-export function assertUnreachable(): never {
- throw new Error("Didn't expect to get here");
+export function assertUnreachable(msg: string): never {
+ throw new Error("Didn't expect to get here, " + msg);
}
From 2d58cdd9fed1ff7030be38b5bce53d4293464cc0 Mon Sep 17 00:00:00 2001
From: Daniel Egger
Date: Fri, 26 May 2023 16:05:25 +0200
Subject: [PATCH 3/7] Add code after rebase
---
.../blocks/DocumentListBlock.vue | 37 ++++++++++++++++++-
.../vbv_lernwelt/course/creators/uk_course.py | 3 +-
2 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/client/src/pages/learningPath/learningContentPage/blocks/DocumentListBlock.vue b/client/src/pages/learningPath/learningContentPage/blocks/DocumentListBlock.vue
index edeaf119..2f7694f9 100644
--- a/client/src/pages/learningPath/learningContentPage/blocks/DocumentListBlock.vue
+++ b/client/src/pages/learningPath/learningContentPage/blocks/DocumentListBlock.vue
@@ -1,4 +1,5 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Test starten
+
+
+
+
+
+
diff --git a/client/src/types.ts b/client/src/types.ts
index 5a1a0fb7..9e25f7d1 100644
--- a/client/src/types.ts
+++ b/client/src/types.ts
@@ -85,11 +85,12 @@ export interface LearningContentPlaceholder extends LearningContentInterface {
export interface LearningContentRichText extends LearningContentInterface {
readonly content_type: "learnpath.LearningContentRichText";
- text: string;
+ readonly text: string;
}
export interface LearningContentTest extends LearningContentInterface {
readonly content_type: "learnpath.LearningContentTest";
+ readonly checkbox_text: string;
}
export interface LearningContentVideo extends LearningContentInterface {
diff --git a/client/src/utils/typeMaps.ts b/client/src/utils/typeMaps.ts
index 96d8bb34..dbe01f63 100644
--- a/client/src/utils/typeMaps.ts
+++ b/client/src/utils/typeMaps.ts
@@ -44,5 +44,7 @@ export function learningContentTypeData(
return { title: "In Umsetzung", icon: "it-icon-lc-document" };
}
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore
return assertUnreachable(`did not handle ${lc.content_type}`);
}
diff --git a/server/vbv_lernwelt/course/creators/uk_course.py b/server/vbv_lernwelt/course/creators/uk_course.py
index 283778e4..3cc0c495 100644
--- a/server/vbv_lernwelt/course/creators/uk_course.py
+++ b/server/vbv_lernwelt/course/creators/uk_course.py
@@ -14,14 +14,15 @@ from vbv_lernwelt.learnpath.tests.learning_path_factories import (
CircleFactory,
LearningContentAssignmentFactory,
LearningContentAttendanceCourseFactory,
+ LearningContentDocumentListFactory,
LearningContentFeedbackFactory,
LearningContentMediaLibraryFactory,
LearningContentPlaceholderFactory,
+ LearningContentTestFactory,
LearningPathFactory,
LearningSequenceFactory,
LearningUnitFactory,
TopicFactory,
- LearningContentDocumentListFactory,
)
@@ -226,7 +227,7 @@ In diesem Circle erfährst du wie die überbetrieblichen Kurse aufgebaut sind. Z
)
LearningUnitFactory(title="Vorbereitung", parent=circle)
LearningContentMediaLibraryFactory(
- title=f"Handlungsfeld «{title}»",
+ title=f"Allgemeines zu Versicherungen",
parent=circle,
description=RichText(
f"In der Mediathek unter dem Handlungsfeld «{title}» findest du alle relevanten Ressourcen für deine Fachkompetenzen.
"
@@ -298,9 +299,14 @@ In diesem Circle lernst du die wichtigsten Grundlagen bezüglich Versicherungswi
parent=circle,
)
LearningUnitFactory(title="Kompetenznachweis", parent=circle)
- LearningContentPlaceholderFactory(
+ LearningContentTestFactory(
title="Wissens- und Verständnisfragen",
parent=circle,
+ description=RichText(
+ "Folgender Test mit Wissens- und Verständnisfragen ist Teil des Kompetenznachweises. Der Test kann nur einmal durchgeführt werden und ist notenrelevant.
"
+ ),
+ checkbox_text="Hiermit bestätige ich, dass ich die Anweisungen verstanden habe und den Test durchführen möchte.",
+ content_url="http://example.com",
)
LearningContentFeedbackFactory(
parent=circle,
diff --git a/server/vbv_lernwelt/learnpath/migrations/0005_learningcontentdocumentlist.py b/server/vbv_lernwelt/learnpath/migrations/0005_learningcontentdocumentlist.py
index 0bf83528..406cfc8c 100644
--- a/server/vbv_lernwelt/learnpath/migrations/0005_learningcontentdocumentlist.py
+++ b/server/vbv_lernwelt/learnpath/migrations/0005_learningcontentdocumentlist.py
@@ -1,31 +1,85 @@
# Generated by Django 3.2.13 on 2023-05-26 10:34
-from django.db import migrations, models
import django.db.models.deletion
import wagtail.blocks
import wagtail.fields
+from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
- ('wagtailcore', '0083_workflowcontenttype'),
- ('learnpath', '0004_learningcontentassignment_assignment_type'),
+ ("wagtailcore", "0083_workflowcontenttype"),
+ ("learnpath", "0004_learningcontentassignment_assignment_type"),
]
operations = [
migrations.CreateModel(
- name='LearningContentDocumentList',
+ name="LearningContentDocumentList",
fields=[
- ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
- ('minutes', models.PositiveIntegerField(default=15)),
- ('description', wagtail.fields.RichTextField(blank=True)),
- ('content_url', models.TextField(blank=True)),
- ('documents', wagtail.fields.StreamField([('document', wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('description', wagtail.blocks.TextBlock(default='', required=False)), ('icon_url', wagtail.blocks.TextBlock(default='', required=False)), ('link_display_text', wagtail.blocks.CharBlock(default='Link öffnen', max_length=255)), ('url', wagtail.blocks.TextBlock(default='', required=False)), ('open_window', wagtail.blocks.BooleanBlock(default=False))]))], blank=True, use_json_field=True)),
+ (
+ "page_ptr",
+ models.OneToOneField(
+ auto_created=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ parent_link=True,
+ primary_key=True,
+ serialize=False,
+ to="wagtailcore.page",
+ ),
+ ),
+ ("minutes", models.PositiveIntegerField(default=15)),
+ ("description", wagtail.fields.RichTextField(blank=True)),
+ ("content_url", models.TextField(blank=True)),
+ (
+ "documents",
+ wagtail.fields.StreamField(
+ [
+ (
+ "document",
+ wagtail.blocks.StructBlock(
+ [
+ ("title", wagtail.blocks.TextBlock()),
+ (
+ "description",
+ wagtail.blocks.TextBlock(
+ default="", required=False
+ ),
+ ),
+ (
+ "icon_url",
+ wagtail.blocks.TextBlock(
+ default="", required=False
+ ),
+ ),
+ (
+ "link_display_text",
+ wagtail.blocks.CharBlock(
+ default="Link öffnen", max_length=255
+ ),
+ ),
+ (
+ "url",
+ wagtail.blocks.TextBlock(
+ default="", required=False
+ ),
+ ),
+ (
+ "open_window",
+ wagtail.blocks.BooleanBlock(default=False),
+ ),
+ ]
+ ),
+ )
+ ],
+ blank=True,
+ use_json_field=True,
+ ),
+ ),
],
options={
- 'abstract': False,
+ "abstract": False,
},
- bases=('wagtailcore.page',),
+ bases=("wagtailcore.page",),
),
]
diff --git a/server/vbv_lernwelt/learnpath/migrations/0006_learningcontenttest_checkbox_text.py b/server/vbv_lernwelt/learnpath/migrations/0006_learningcontenttest_checkbox_text.py
new file mode 100644
index 00000000..545416ae
--- /dev/null
+++ b/server/vbv_lernwelt/learnpath/migrations/0006_learningcontenttest_checkbox_text.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2.13 on 2023-05-26 14:31
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("learnpath", "0005_learningcontentdocumentlist"),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="learningcontenttest",
+ name="checkbox_text",
+ field=models.TextField(blank=True),
+ ),
+ ]
diff --git a/server/vbv_lernwelt/learnpath/models.py b/server/vbv_lernwelt/learnpath/models.py
index a430457f..24d6e6cb 100644
--- a/server/vbv_lernwelt/learnpath/models.py
+++ b/server/vbv_lernwelt/learnpath/models.py
@@ -307,9 +307,18 @@ class LearningContentMediaLibrary(LearningContent):
class LearningContentTest(LearningContent):
+ serialize_field_names = LearningContent.serialize_field_names + [
+ "checkbox_text",
+ ]
parent_page_types = ["learnpath.Circle"]
subpage_types = []
+ checkbox_text = models.TextField(blank=True)
+
+ content_panels = LearningContent.content_panels + [
+ FieldPanel("checkbox_text", classname="Text"),
+ ]
+
class LearningContentRichText(LearningContent):
text = RichTextField(blank=True, features=DEFAULT_RICH_TEXT_FEATURES_WITH_HEADER)
diff --git a/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py
index f5428bfd..c1d5be7c 100644
--- a/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py
+++ b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py
@@ -5,6 +5,7 @@ from vbv_lernwelt.learnpath.models import (
Circle,
LearningContentAssignment,
LearningContentAttendanceCourse,
+ LearningContentDocumentList,
LearningContentFeedback,
LearningContentLearningModule,
LearningContentMediaLibrary,
@@ -16,7 +17,6 @@ from vbv_lernwelt.learnpath.models import (
LearningSequence,
LearningUnit,
Topic,
- LearningContentDocumentList,
)
from vbv_lernwelt.media_library.tests.media_library_factories import (
LearnMediaBlockFactory,
From 45161788ccc8817506177bdfcd38f3dba3f0690c Mon Sep 17 00:00:00 2001
From: Daniel Egger
Date: Fri, 26 May 2023 17:06:24 +0200
Subject: [PATCH 5/7] Create Vorbereitungsauftrag Kickoff
---
.../assignment/creators/create_assignments.py | 179 ++++++++++++++++--
.../assignment/tests/test_assignment_api.py | 6 +-
.../course/creators/test_course.py | 8 +-
.../vbv_lernwelt/course/creators/uk_course.py | 51 ++++-
.../commands/create_default_courses.py | 14 +-
.../media/uk/de_üK1_KO_03b_A_Einteilungen.pdf | Bin 0 -> 125292 bytes
6 files changed, 228 insertions(+), 30 deletions(-)
create mode 100644 server/vbv_lernwelt/static/media/uk/de_üK1_KO_03b_A_Einteilungen.pdf
diff --git a/server/vbv_lernwelt/assignment/creators/create_assignments.py b/server/vbv_lernwelt/assignment/creators/create_assignments.py
index 2668002a..54851791 100644
--- a/server/vbv_lernwelt/assignment/creators/create_assignments.py
+++ b/server/vbv_lernwelt/assignment/creators/create_assignments.py
@@ -1,3 +1,7 @@
+from wagtail.blocks import StreamValue
+from wagtail.blocks.list_block import ListBlock, ListValue
+from wagtail.rich_text import RichText
+
from vbv_lernwelt.assignment.models import (
AssignmentListPage,
AssignmentType,
@@ -16,12 +20,9 @@ from vbv_lernwelt.assignment.tests.assignment_factories import (
from vbv_lernwelt.core.utils import replace_whitespace
from vbv_lernwelt.course.consts import COURSE_UK
from vbv_lernwelt.course.models import CoursePage
-from wagtail.blocks import StreamValue
-from wagtail.blocks.list_block import ListBlock, ListValue
-from wagtail.rich_text import RichText
-def create_uk_casework(course_id=COURSE_UK):
+def create_uk_fahrzeug_casework(course_id=COURSE_UK):
assignment_list_page = (
CoursePage.objects.get(course_id=course_id)
.get_children()
@@ -465,7 +466,7 @@ def create_uk_casework(course_id=COURSE_UK):
return assignment
-def create_uk_prep_assignment(course_id=COURSE_UK):
+def create_uk_fahrzeug_prep_assignment(course_id=COURSE_UK):
assignment_list_page = (
CoursePage.objects.get(course_id=course_id)
.get_children()
@@ -489,7 +490,7 @@ def create_uk_prep_assignment(course_id=COURSE_UK):
d2pv.ük4: Sie erläutern die Prozesse und Abläufe im privaten Versicherungsbereich. (K2)
-
+
Handlungskompetenz e4: Betriebsbezogene Inhalte multimedial aufbereiten
Arbeitssituation 1: Charakteristiken der Branche und Stärken des Betriebs einbringen
@@ -499,10 +500,10 @@ def create_uk_prep_assignment(course_id=COURSE_UK):
e4.pv.ük4: Sie erläutern die Grundlagen der Produkte von Privatversicherungen. (K2)
-
+
Ausgangslage
- Stell dir vor, du hast die Autoprüfung abgeschlossen und nun kann es endlich losgehen mit deiner Mobilität.
+ Stell dir vor, du hast die Autoprüfung abgeschlossen und nun kann es endlich losgehen mit deiner Mobilität.
Welches wird dein erstes eigenes Auto sein? Dieses Auto möchtest du natürlich auch schützen und richtig
versichern.
@@ -780,6 +781,160 @@ def create_uk_prep_assignment(course_id=COURSE_UK):
return assignment
+def create_uk_kickoff_prep_assignment(course_id=COURSE_UK):
+ assignment_list_page = (
+ CoursePage.objects.get(course_id=course_id)
+ .get_children()
+ .exact_type(AssignmentListPage)
+ .first()
+ )
+
+ assignment = AssignmentFactory(
+ parent=assignment_list_page,
+ assignment_type=AssignmentType.PREP_ASSIGNMENT.name,
+ title="Kickoff - Versicherungswirtschaft",
+ effort_required="ca. 2 Stunden",
+ intro_text=replace_whitespace(
+ """
+ Handlungskompetenzen, Arbeitssituationen & Leistungsziele
+
+ Handlungskompetenz d2: Informations- und Beratungsgespräch mit Kunden oder Lieferanten führen
+ Arbeitssituation 4: Kunden beraten und dazugehörige Prozesse abwickeln
+
+ d2.pv.ük1: Sie beschreiben die wichtigsten gesetzlichen Grundlagen im Versicherungsbereich umfassend
+
+
+
+
+ Handlungskompetenz c3: Betriebliche Prozesse dokumentieren, koordinieren und umsetzen
+ Arbeitssituation 5: Anträge verarbeiten, Verträge gestalten, Produkte entwickeln und pflegen
+
+ c3.pv.ük6: Sie nennen die gängigen Grundsätze bei der Gestaltung von Produkten und Dienstleistungen im Versicherungsbereich (K1)
+
+
+
+ Ausgangslage
+
+ Das Leben hat nicht nur Sonnenseiten, es birgt auch Risiken in sich. So können wir schon morgen einen
+ Unfall haben oder schwer erkranken. Oder ein Haus wird durch ein Hagelzug ziemlich beschädigt. Vor
+ solchen Risiken kann sich niemand vollständig schützen. Jedoch können wir uns gegen den finanziellen
+ Schaden absichern. Diese Art von Schutz bieten Versicherungen.
+ In dieser Sequenz beschäftigen wir uns damit, das eigentlich eine Versicherung ausmacht.
+
+ """
+ ),
+ performance_objectives=[],
+ )
+
+ assignment.tasks = []
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Teilaufgabe 1: Verschaffe dir einen ersten Überblick zum Thema.",
+ # it is hard to create a StreamValue programmatically, we have to
+ # create a `StreamValue` manually. Ask Daniel and/or Ramon
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "explanation",
+ ExplanationBlockFactory(
+ text=RichText(
+ 'Schaue dazu das folgende Video: Wie funktioniert eine Versicherung? – Einfach erklärt '
+ )
+ ),
+ ),
+ (
+ "user_confirmation",
+ ExplanationBlockFactory(
+ text=RichText(
+ "Ja, ich habe das Video angeschaut und verstanden."
+ )
+ ),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Teilaufgabe 2: «Idee Versicherung» lesen",
+ # it is hard to create a StreamValue programmatically, we have to
+ # create a `StreamValue` manually. Ask Daniel and/or Ramon
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "explanation",
+ ExplanationBlockFactory(
+ text=RichText(
+ "Lese und bearbeite im Buch «Idee Versicherung» die Seiten 12 bis 30."
+ )
+ ),
+ ),
+ (
+ "user_confirmation",
+ ExplanationBlockFactory(
+ text=RichText(
+ "Ja, ich habe die Seiten gelesen und verstanden."
+ )
+ ),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Teilaufgabe 3: Skizze erstellen",
+ # it is hard to create a StreamValue programmatically, we have to
+ # create a `StreamValue` manually. Ask Daniel and/or Ramon
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "explanation",
+ ExplanationBlockFactory(
+ text=RichText(
+ replace_whitespace(
+ """
+
+ Erstelle aufgrund des Gelesenen eine Skizze, welche für dich das Grundprinzip einer Versicherung darstellt.
+
+
+ Nimm diese Skizze mit in den Unterricht.
+
+ """
+ )
+ )
+ ),
+ ),
+ (
+ "user_confirmation",
+ ExplanationBlockFactory(
+ text=RichText("Ja, ich habe die Skizze erstellt.")
+ ),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.save()
+
+ return assignment
+
+
def create_uk_reflection(course_id=COURSE_UK, circle_title="Fahrzeug"):
assignment_list_page = (
CoursePage.objects.get(course_id=course_id)
@@ -796,10 +951,10 @@ def create_uk_reflection(course_id=COURSE_UK, circle_title="Fahrzeug"):
intro_text=replace_whitespace(
"""
- Du hast in diesem Circle viele neue Inhalte und Inputs erhalten.
- Nun ist es Zeit, nochmals auf dein Kompetenzprofil zu schauen.
- Das Beantworten von Reflexionsfragen hilft dir den eigenen Lern- und Denkprozess sichtbar und begreifbar zu machen.
- Es deckt deine persönlichen Stärken und Schwächen während der Erarbeitung auf und hilft dir, dich laufend zu verbessern.
+ Du hast in diesem Circle viele neue Inhalte und Inputs erhalten.
+ Nun ist es Zeit, nochmals auf dein Kompetenzprofil zu schauen.
+ Das Beantworten von Reflexionsfragen hilft dir den eigenen Lern- und Denkprozess sichtbar und begreifbar zu machen.
+ Es deckt deine persönlichen Stärken und Schwächen während der Erarbeitung auf und hilft dir, dich laufend zu verbessern.
"""
),
diff --git a/server/vbv_lernwelt/assignment/tests/test_assignment_api.py b/server/vbv_lernwelt/assignment/tests/test_assignment_api.py
index 383ac419..86fe4edf 100644
--- a/server/vbv_lernwelt/assignment/tests/test_assignment_api.py
+++ b/server/vbv_lernwelt/assignment/tests/test_assignment_api.py
@@ -3,7 +3,9 @@ import json
from django.utils import timezone
from rest_framework.test import APITestCase
-from vbv_lernwelt.assignment.creators.create_assignments import create_uk_casework
+from vbv_lernwelt.assignment.creators.create_assignments import (
+ create_uk_fahrzeug_casework,
+)
from vbv_lernwelt.assignment.models import (
AssignmentCompletion,
AssignmentCompletionAuditLog,
@@ -20,7 +22,7 @@ class AssignmentApiTestCase(APITestCase):
def setUp(self) -> None:
create_default_users()
create_test_course(include_vv=False)
- self.assignment = create_uk_casework(course_id=COURSE_TEST_ID)
+ self.assignment = create_uk_fahrzeug_casework(course_id=COURSE_TEST_ID)
self.assignment_subtasks = self.assignment.filter_user_subtasks()
self.cs = CourseSession.objects.create(
diff --git a/server/vbv_lernwelt/course/creators/test_course.py b/server/vbv_lernwelt/course/creators/test_course.py
index a78f63c7..709c18c2 100644
--- a/server/vbv_lernwelt/course/creators/test_course.py
+++ b/server/vbv_lernwelt/course/creators/test_course.py
@@ -7,8 +7,8 @@ from wagtail.models import Site
from wagtail.rich_text import RichText
from vbv_lernwelt.assignment.creators.create_assignments import (
- create_uk_casework,
- create_uk_prep_assignment,
+ create_uk_fahrzeug_casework,
+ create_uk_fahrzeug_prep_assignment,
)
from vbv_lernwelt.assignment.models import Assignment
from vbv_lernwelt.assignment.services import update_assignment_completion
@@ -72,8 +72,8 @@ def create_test_course(include_uk=True, include_vv=True, with_sessions=False):
_assignment_list_page = AssignmentListPageFactory(
parent=course_page,
)
- create_uk_casework(course_id=COURSE_TEST_ID)
- create_uk_prep_assignment(course_id=COURSE_TEST_ID)
+ create_uk_fahrzeug_casework(course_id=COURSE_TEST_ID)
+ create_uk_fahrzeug_prep_assignment(course_id=COURSE_TEST_ID)
create_test_learning_path(include_uk=include_uk, include_vv=include_vv)
create_test_media_library()
diff --git a/server/vbv_lernwelt/course/creators/uk_course.py b/server/vbv_lernwelt/course/creators/uk_course.py
index 3cc0c495..b5e478c0 100644
--- a/server/vbv_lernwelt/course/creators/uk_course.py
+++ b/server/vbv_lernwelt/course/creators/uk_course.py
@@ -24,6 +24,9 @@ from vbv_lernwelt.learnpath.tests.learning_path_factories import (
LearningUnitFactory,
TopicFactory,
)
+from vbv_lernwelt.media_library.tests.media_library_factories import (
+ LearnMediaBlockFactory,
+)
def create_uk_learning_path(course_id=COURSE_UK, user=None, skip_locales=True):
@@ -230,20 +233,56 @@ In diesem Circle erfährst du wie die überbetrieblichen Kurse aufgebaut sind. Z
title=f"Allgemeines zu Versicherungen",
parent=circle,
description=RichText(
- f"In der Mediathek unter dem Handlungsfeld «{title}» findest du alle relevanten Ressourcen für deine Fachkompetenzen.
"
+ f"In der Mediathek unter «Allgemeines zu Versicherungen» findest du alle relevanten Ressourcen für deine Fachkompetenzen.
"
f"Wir empfehlen dir vor der Absolvierung der weiteren Lerneinheiten dich in die Thematik einzulesen.
"
),
- content_url=f"/course/überbetriebliche-kurse/media/category/{slugify(title)}",
+ content_url=f"/course/überbetriebliche-kurse/media",
)
- LearningContentPlaceholderFactory(
- title="Vorbereitungsauftrag",
+ LearningContentAssignmentFactory(
+ title="Versicherungswirtschaft",
+ assignment_type="PREP_ASSIGNMENT",
parent=circle,
- )
+ content_assignment=Assignment.objects.get(
+ slug__startswith=f"überbetriebliche-kurse-assignment-kickoff-versicherungswirtschaft"
+ ),
+ ),
LearningSequenceFactory(title="Training", parent=circle)
LearningUnitFactory(title="Unterlagen", parent=circle)
- LearningContentPlaceholderFactory(
+ LearningContentDocumentListFactory(
title="Unterlagen für den Unterricht",
parent=circle,
+ documents=[
+ (
+ "document",
+ LearnMediaBlockFactory(
+ title="Präsentation 1a",
+ description="",
+ icon_url="/static/icons/demo/icon-hf-book.png",
+ link_display_text="Dokument anzeigen",
+ url="/static/media/uk/de_üK1_KO_03b_A_Einteilungen.pdf",
+ ),
+ ),
+ (
+ "document",
+ LearnMediaBlockFactory(
+ title="Präsentation 1b",
+ description="",
+ icon_url="/static/icons/demo/icon-hf-book.png",
+ link_display_text="Dokument anzeigen",
+ url="/static/media/uk/de_üK1_KO_03b_A_Einteilungen.pdf",
+ ),
+ ),
+ (
+ "document",
+ LearnMediaBlockFactory(
+ title="Arbeitsblatt Einteilung der Versicherungen",
+ description="",
+ icon_url="/static/icons/demo/icon-hf-book.png",
+ link_display_text="Dokument anzeigen",
+ url="/static/media/uk/de_üK1_KO_03b_A_Einteilungen.pdf",
+ ),
+ ),
+ ],
)
LearningUnitFactory(title="Präsenzkurs", parent=circle)
LearningContentAttendanceCourseFactory(
diff --git a/server/vbv_lernwelt/course/management/commands/create_default_courses.py b/server/vbv_lernwelt/course/management/commands/create_default_courses.py
index ef19099e..ad294faf 100644
--- a/server/vbv_lernwelt/course/management/commands/create_default_courses.py
+++ b/server/vbv_lernwelt/course/management/commands/create_default_courses.py
@@ -3,9 +3,10 @@ import random
import djclick as click
from vbv_lernwelt.assignment.creators.create_assignments import (
- create_uk_casework,
- create_uk_prep_assignment,
+ create_uk_fahrzeug_casework,
+ create_uk_fahrzeug_prep_assignment,
create_uk_reflection,
+ create_uk_kickoff_prep_assignment,
)
from vbv_lernwelt.assignment.models import Assignment
from vbv_lernwelt.assignment.services import update_assignment_completion
@@ -169,8 +170,9 @@ def create_course_uk_de():
_assignment_list_page = AssignmentListPageFactory(
parent=course.coursepage,
)
- create_uk_casework(course_id=COURSE_UK)
- create_uk_prep_assignment(course_id=COURSE_UK)
+ create_uk_kickoff_prep_assignment(course_id=COURSE_UK)
+ create_uk_fahrzeug_casework(course_id=COURSE_UK)
+ create_uk_fahrzeug_prep_assignment(course_id=COURSE_UK)
create_uk_reflection(course_id=COURSE_UK)
# learning path
@@ -427,8 +429,8 @@ def create_course_training_de():
_assignment_list_page = AssignmentListPageFactory(
parent=course.coursepage,
)
- create_uk_casework(course_id=COURSE_UK_TRAINING)
- create_uk_prep_assignment(course_id=COURSE_UK_TRAINING)
+ create_uk_fahrzeug_casework(course_id=COURSE_UK_TRAINING)
+ create_uk_fahrzeug_prep_assignment(course_id=COURSE_UK_TRAINING)
create_uk_reflection(course_id=COURSE_UK_TRAINING)
create_uk_training_learning_path(course_id=COURSE_UK_TRAINING)
diff --git a/server/vbv_lernwelt/static/media/uk/de_üK1_KO_03b_A_Einteilungen.pdf b/server/vbv_lernwelt/static/media/uk/de_üK1_KO_03b_A_Einteilungen.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..989ce098af8df0238631306b95c8854f78ec7015
GIT binary patch
literal 125292
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