diff --git a/client/src/pages/learningPath/learningPathPage/LearningPathAppointmentsMock.vue b/client/src/pages/learningPath/learningPathPage/LearningPathAppointmentsMock.vue
index f151385c..d4077fe0 100644
--- a/client/src/pages/learningPath/learningPathPage/LearningPathAppointmentsMock.vue
+++ b/client/src/pages/learningPath/learningPathPage/LearningPathAppointmentsMock.vue
@@ -1,6 +1,6 @@
diff --git a/client/src/pages/learningPath/selfEvaluationPage/SelfEvaluation.vue b/client/src/pages/learningPath/selfEvaluationPage/SelfEvaluation.vue
index 19d2898e..100689db 100644
--- a/client/src/pages/learningPath/selfEvaluationPage/SelfEvaluation.vue
+++ b/client/src/pages/learningPath/selfEvaluationPage/SelfEvaluation.vue
@@ -69,9 +69,9 @@ onUnmounted(() => {
>
import("@/pages/MessagesPage.vue"),
},
- {
- path: "/profile",
- component: () => import("@/pages/ProfilePage.vue"),
- },
{
path: "/settings",
component: () => import("@/pages/SettingsPage.vue"),
diff --git a/client/src/services/__tests__/learning_path_json.json b/client/src/services/__tests__/learning_path_json.json
index cc113776..22bf7daa 100644
--- a/client/src/services/__tests__/learning_path_json.json
+++ b/client/src/services/__tests__/learning_path_json.json
@@ -1,447 +1,447 @@
{
- "id": 10,
- "title": "Test Lernpfad",
- "slug": "test-lehrgang-lp",
- "content_type": "learnpath.LearningPath",
- "translation_key": "9cf4fea4-9d6f-4297-ab99-68a65bf07bb5",
- "frontend_url": "/course/test-lehrgang/learn",
- "children": [
+ "id": 10,
+ "title": "Test Lernpfad",
+ "slug": "test-lehrgang-lp",
+ "content_type": "learnpath.LearningPath",
+ "translation_key": "9cf4fea4-9d6f-4297-ab99-68a65bf07bb5",
+ "frontend_url": "/course/test-lehrgang/learn",
+ "children": [
+ {
+ "id": 11,
+ "title": "Circle \u00dcK",
+ "slug": "test-lehrgang-lp-topic-circle-\u00fck",
+ "content_type": "learnpath.Topic",
+ "translation_key": "983f97f7-fd68-4678-860f-7a19bab0b94d",
+ "frontend_url": "",
+ "is_visible": false
+ },
+ {
+ "id": 12,
+ "title": "Fahrzeug",
+ "slug": "test-lehrgang-lp-circle-fahrzeug",
+ "content_type": "learnpath.Circle",
+ "translation_key": "0286b096-2a55-4242-a277-ba15d478b79a",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug",
+ "children": [
{
- "id": 11,
- "title": "Circle \u00dcK",
- "slug": "test-lehrgang-lp-topic-circle-\u00fck",
- "content_type": "learnpath.Topic",
- "translation_key": "983f97f7-fd68-4678-860f-7a19bab0b94d",
- "frontend_url": "",
- "is_visible": false
+ "id": 13,
+ "title": "Vorbereitung",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-ls-vorbereitung",
+ "content_type": "learnpath.LearningSequence",
+ "translation_key": "dbc0e05f-a899-4524-b021-39a97ac1c542",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-vorbereitung",
+ "icon": "it-icon-ls-start"
},
{
- "id": 12,
- "title": "Fahrzeug",
- "slug": "test-lehrgang-lp-circle-fahrzeug",
- "content_type": "learnpath.Circle",
- "translation_key": "0286b096-2a55-4242-a277-ba15d478b79a",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug",
- "children": [
- {
- "id": 13,
- "title": "Vorbereitung",
- "slug": "test-lehrgang-lp-circle-fahrzeug-ls-vorbereitung",
- "content_type": "learnpath.LearningSequence",
- "translation_key": "dbc0e05f-a899-4524-b021-39a97ac1c542",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-vorbereitung",
- "icon": "it-icon-ls-start"
- },
- {
- "id": 14,
- "title": "Vorbereitung",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lu-vorbereitung",
- "content_type": "learnpath.LearningUnit",
- "translation_key": "626d656a-15d6-49ce-8b20-c035482802cd",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-vorbereitung",
- "evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/vorbereitung",
- "course_category": {
- "id": 1,
- "title": "Allgemein",
- "general": true
- },
- "children": [
- {
- "id": 18,
- "title": "Innerhalb des Handlungsfelds \u00abFahrzeug\u00bb bin ich f\u00e4hig, die Ziele und Pl\u00e4ne des Kunden zu ergr\u00fcnden (SOLL).",
- "slug": "test-lehrgang-competence-crit-x11-allgemein",
- "content_type": "competence.PerformanceCriteria",
- "translation_key": "d49be54d-51e5-4bf4-9238-365006c3b95d",
- "frontend_url": "",
- "competence_id": "X1.1"
- },
- {
- "id": 19,
- "title": "Innerhalb des Handlungsfelds \u00abFahrzeug\u00bb bin ich f\u00e4hig, die IST-Situation des Kunden mit der geeigneten Gespr\u00e4chs-/Fragetechnik zu erfassen.",
- "slug": "test-lehrgang-competence-crit-x11-allgemein-1",
- "content_type": "competence.PerformanceCriteria",
- "translation_key": "2fb68d58-3ab7-4192-865c-1e67ab9bcd15",
- "frontend_url": "",
- "competence_id": "X1.1"
- }
- ]
- },
- {
- "id": 15,
- "title": "Verschaffe dir einen \u00dcberblick",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lc-verschaffe-dir-einen-\u00fcberblick",
- "content_type": "learnpath.LearningContentPlaceholder",
- "translation_key": "47698ce1-0e4f-446d-a23d-8a9e9c906ff7",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug/verschaffe-dir-einen-\u00fcberblick",
- "minutes": 15,
- "description": "Platzhalter",
- "content_url": ""
- },
- {
- "id": 16,
- "title": "Mediathek Fahrzeug",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lc-mediathek-fahrzeug",
- "content_type": "learnpath.LearningContentMediaLibrary",
- "translation_key": "34e79a3b-c1f9-49ff-b779-0149d614f02c",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug/mediathek-fahrzeug",
- "minutes": 15,
- "description": "",
- "content_url": "/media/\u00fcberbetriebliche-kurse-media/category/fahrzeug"
- },
- {
- "id": 17,
- "title": "Vorbereitungsauftrag",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lc-vorbereitungsauftrag",
- "content_type": "learnpath.LearningContentPlaceholder",
- "translation_key": "8feca9cd-4937-4406-b44d-564f341e8bfe",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug/vorbereitungsauftrag",
- "minutes": 15,
- "description": "Platzhalter",
- "content_url": ""
- },
- {
- "id": 20,
- "title": "Training",
- "slug": "test-lehrgang-lp-circle-fahrzeug-ls-training",
- "content_type": "learnpath.LearningSequence",
- "translation_key": "b09f87c7-01fb-4967-98c1-894ac3144595",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-training",
- "icon": "it-icon-ls-apply"
- },
- {
- "id": 21,
- "title": "Unterlagen",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lu-unterlagen",
- "content_type": "learnpath.LearningUnit",
- "translation_key": "772d5352-87fa-46a7-8470-368d59565d3a",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-unterlagen",
- "evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/unterlagen",
- "course_category": {
- "id": 1,
- "title": "Allgemein",
- "general": true
- },
- "children": []
- },
- {
- "id": 22,
- "title": "Unterlagen f\u00fcr den Unterricht",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lc-unterlagen-f\u00fcr-den-unterricht",
- "content_type": "learnpath.LearningContentPlaceholder",
- "translation_key": "ace9f1e8-5cb7-4b7c-b1c8-d43f2e4f7269",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug/unterlagen-f\u00fcr-den-unterricht",
- "minutes": 15,
- "description": "Platzhalter",
- "content_url": ""
- },
- {
- "id": 23,
- "title": "Pr\u00e4senztag",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lu-pr\u00e4senztag",
- "content_type": "learnpath.LearningUnit",
- "translation_key": "18bc5d1d-ddcf-4e54-b58c-58f1e8833af2",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-pr\u00e4senztag",
- "evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/pr\u00e4senztag",
- "course_category": {
- "id": 1,
- "title": "Allgemein",
- "general": true
- },
- "children": []
- },
- {
- "id": 24,
- "title": "Pr\u00e4senztag Fahrzeug",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lc-pr\u00e4senztag-fahrzeug",
- "content_type": "learnpath.LearningContentAttendanceDay",
- "translation_key": "2441afae-83ea-4fb5-a938-8db4352ed6c5",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug/pr\u00e4senztag-fahrzeug",
- "minutes": 15,
- "description": "Platzhalter Beschreibung",
- "content_url": ""
- },
- {
- "id": 25,
- "title": "Kompetenznachweis",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lu-kompetenznachweis",
- "content_type": "learnpath.LearningUnit",
- "translation_key": "b115d4e0-f487-4d03-a7cf-08d90bb4813d",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-kompetenznachweis",
- "evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/kompetenznachweis",
- "course_category": {
- "id": 1,
- "title": "Allgemein",
- "general": true
- },
- "children": []
- },
- {
- "id": 26,
- "title": "Wissens- und Verst\u00e4ndnisfragen",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lc-wissens-und-verst\u00e4ndnisfragen",
- "content_type": "learnpath.LearningContentPlaceholder",
- "translation_key": "053c32bd-6174-444b-95fe-35ad2e15edf5",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug/wissens-und-verst\u00e4ndnisfragen",
- "minutes": 15,
- "description": "Platzhalter",
- "content_url": ""
- },
- {
- "id": 27,
- "title": "Transfer",
- "slug": "test-lehrgang-lp-circle-fahrzeug-ls-transfer",
- "content_type": "learnpath.LearningSequence",
- "translation_key": "58939dc7-dd19-4996-b4bf-aba348be092a",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-transfer",
- "icon": "it-icon-ls-end"
- },
- {
- "id": 28,
- "title": "Transfer",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lu-transfer",
- "content_type": "learnpath.LearningUnit",
- "translation_key": "185568d3-9ba3-433d-9480-4f492d9d3235",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-transfer",
- "evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/transfer",
- "course_category": {
- "id": 1,
- "title": "Allgemein",
- "general": true
- },
- "children": []
- },
- {
- "id": 29,
- "title": "Reflexion",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lc-reflexion",
- "content_type": "learnpath.LearningContentPlaceholder",
- "translation_key": "c62d4cf6-2505-40f7-8764-41fa1ea0057c",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug/reflexion",
- "minutes": 15,
- "description": "Platzhalter",
- "content_url": ""
- },
- {
- "id": 30,
- "title": "\u00dcberpr\u00fcfen einer Motorfahrzeug-Versicherungspolice",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lc-\u00fcberpr\u00fcfen-einer-motorfahrzeug-versicherungspolice",
- "content_type": "learnpath.LearningContentAssignment",
- "translation_key": "53cc2b76-ea59-47a2-a15a-ebf19897e9b1",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug/\u00fcberpr\u00fcfen-einer-motorfahrzeug-versicherungspolice",
- "minutes": 15,
- "description": "",
- "content_url": "",
- "content_assignment_id": 9
- },
- {
- "id": 31,
- "title": "Feedback",
- "slug": "test-lehrgang-lp-circle-fahrzeug-lc-feedback",
- "content_type": "learnpath.LearningContentFeedback",
- "translation_key": "d78bded2-a760-492c-9249-283230d98ce0",
- "frontend_url": "/course/test-lehrgang/learn/fahrzeug/feedback",
- "minutes": 15,
- "description": "",
- "content_url": ""
- }
- ],
- "description": "In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist.\nZudem lernst du die wichtigsten Grundlagen,\ndamit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.",
- "goals": "\n In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen,\n damit du erfolgreich mit deinem Lernpfad und in deinem Job (durch-)starten kannst.
\n Du baust das Grundlagenwissen f\u00fcr die folgenden Themenfelder auf:
\n \n - Aufbau von myVBV und wie du dich im Lernpfad zurechtfindest
\n - Worauf die Ausbildung und die Zulassungspr\u00fcfung zum/zur Versicherungsvermittler/-in VBV basieren
\n - Organisation deiner Lernreise und deiner Zusammenarbeit mit deiner Lernbegleitung und einem\n Lernpartner/einer Lernpartnerin
\n - Tipps und Tricks zur Organisation eines erfolgreichen Arbeitsalltags
\n - Umgang mit den sozialen Medien und Datenschutz
\n - Basiswissen Versicherungswirtschaft
\n - Basiswissen Versicherungsrecht
\n
\n Du arbeitest an folgenden Leistungskriterien aus dem Qualifikationsprofil:
\n Arbeitsalltag/Lerneinheit: \u00abLucas Auftritt in den sozialen Medien und der Umgang mit sensiblen Daten\u00bb
\n Ich bin f\u00e4hig, \u2026
\n \n - A3.1: \u2026 in Zusammenarbeit mit den IT-Spezialisten und der Marketingabteilung die Inhalte f\u00fcr den zu\n realisierenden Medienauftritt zielgruppengerecht festzulegen
\n - A3.2: \u2026 f\u00fcr die verschiedenen Kundensegmente die passenden sozialen Medien zu definieren
\n - A3.3. \u2026 die Inhalte compliant zu halten
\n
\n "
+ "id": 14,
+ "title": "Vorbereitung",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lu-vorbereitung",
+ "content_type": "learnpath.LearningUnit",
+ "translation_key": "626d656a-15d6-49ce-8b20-c035482802cd",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-vorbereitung",
+ "evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/vorbereitung",
+ "course_category": {
+ "id": 1,
+ "title": "Allgemein",
+ "general": true
+ },
+ "children": [
+ {
+ "id": 18,
+ "title": "Innerhalb des Handlungsfelds \u00abFahrzeug\u00bb bin ich f\u00e4hig, die Ziele und Pl\u00e4ne des Kunden zu ergr\u00fcnden (SOLL).",
+ "slug": "test-lehrgang-competence-crit-x11-allgemein",
+ "content_type": "competence.PerformanceCriteria",
+ "translation_key": "d49be54d-51e5-4bf4-9238-365006c3b95d",
+ "frontend_url": "",
+ "competence_id": "X1.1"
+ },
+ {
+ "id": 19,
+ "title": "Innerhalb des Handlungsfelds \u00abFahrzeug\u00bb bin ich f\u00e4hig, die IST-Situation des Kunden mit der geeigneten Gespr\u00e4chs-/Fragetechnik zu erfassen.",
+ "slug": "test-lehrgang-competence-crit-x11-allgemein-1",
+ "content_type": "competence.PerformanceCriteria",
+ "translation_key": "2fb68d58-3ab7-4192-865c-1e67ab9bcd15",
+ "frontend_url": "",
+ "competence_id": "X1.1"
+ }
+ ]
},
{
- "id": 32,
- "title": "Circle VV",
- "slug": "test-lehrgang-lp-topic-circle-vv",
- "content_type": "learnpath.Topic",
- "translation_key": "19611237-22e1-40e6-b5b1-a34ff470df14",
- "frontend_url": "",
- "is_visible": false
+ "id": 15,
+ "title": "Verschaffe dir einen \u00dcberblick",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lc-verschaffe-dir-einen-\u00fcberblick",
+ "content_type": "learnpath.LearningContentPlaceholder",
+ "translation_key": "47698ce1-0e4f-446d-a23d-8a9e9c906ff7",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug/verschaffe-dir-einen-\u00fcberblick",
+ "minutes": 15,
+ "description": "Platzhalter",
+ "content_url": ""
},
{
- "id": 33,
- "title": "Reisen",
- "slug": "test-lehrgang-lp-circle-reisen",
- "content_type": "learnpath.Circle",
- "translation_key": "2aaf0215-693a-407c-9f1c-bdb80f982c92",
- "frontend_url": "/course/test-lehrgang/learn/reisen",
- "children": [
- {
- "id": 34,
- "title": "Starten",
- "slug": "test-lehrgang-lp-circle-reisen-ls-starten",
- "content_type": "learnpath.LearningSequence",
- "translation_key": "e4b0eac3-3a7c-435f-8151-f69c40b35fd6",
- "frontend_url": "/course/test-lehrgang/learn/reisen#ls-starten",
- "icon": "it-icon-ls-start"
- },
- {
- "id": 35,
- "title": "Einf\u00fchrung",
- "slug": "test-lehrgang-lp-circle-reisen-lu-einf\u00fchrung",
- "content_type": "learnpath.LearningUnit",
- "translation_key": "9f0d6302-d058-4f93-b08e-9dbd4b8b8ed3",
- "frontend_url": "/course/test-lehrgang/learn/reisen#lu-einf\u00fchrung",
- "evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/einf\u00fchrung",
- "course_category": {
- "id": 1,
- "title": "Allgemein",
- "general": true
- },
- "children": []
- },
- {
- "id": 36,
- "title": "Verschaff dir einen \u00dcberblick",
- "slug": "test-lehrgang-lp-circle-reisen-lc-verschaff-dir-einen-\u00fcberblick",
- "content_type": "learnpath.LearningContentVideo",
- "translation_key": "e666b414-175f-439d-9dfd-e1c434a8cc0e",
- "frontend_url": "/course/test-lehrgang/learn/reisen/verschaff-dir-einen-\u00fcberblick",
- "minutes": 15,
- "description": "Willkommen im Lehrgang Versicherungsvermitler VBV",
- "content_url": "https://player.vimeo.com/video/772512710?h=30f912f15a"
- },
- {
- "id": 37,
- "title": "Mediathek Reisen",
- "slug": "test-lehrgang-lp-circle-reisen-lc-mediathek-reisen",
- "content_type": "learnpath.LearningContentMediaLibrary",
- "translation_key": "3b4cae41-185f-40f2-86c0-f96057214ada",
- "frontend_url": "/course/test-lehrgang/learn/reisen/mediathek-reisen",
- "minutes": 15,
- "description": "",
- "content_url": "/media/test-lehrgang-media/category/reisen"
- },
- {
- "id": 38,
- "title": "Analyse",
- "slug": "test-lehrgang-lp-circle-reisen-ls-analyse",
- "content_type": "learnpath.LearningSequence",
- "translation_key": "84be9e5b-6517-4a6d-85a3-1bdf90f78780",
- "frontend_url": "/course/test-lehrgang/learn/reisen#ls-analyse",
- "icon": "it-icon-ls-apply"
- },
- {
- "id": 39,
- "title": "Bedarfsanalyse, Ist- und Soll-Situation",
- "slug": "test-lehrgang-lp-circle-reisen-lu-reisen",
- "content_type": "learnpath.LearningUnit",
- "translation_key": "7cc1e966-75db-4703-8de4-1a3171372299",
- "frontend_url": "/course/test-lehrgang/learn/reisen#lu-reisen",
- "evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/reisen",
- "course_category": {
- "id": 3,
- "title": "Reisen",
- "general": false
- },
- "children": [
- {
- "id": 41,
- "title": "Ich bin f\u00e4hig zu Reisen eine Gespr\u00e4chsf\u00fchrung zu machen",
- "slug": "test-lehrgang-competence-crit-y11-reisen",
- "content_type": "competence.PerformanceCriteria",
- "translation_key": "b82dfd37-649f-488c-a78e-c6a3257c3f43",
- "frontend_url": "",
- "competence_id": "Y1.1"
- },
- {
- "id": 42,
- "title": "Ich bin f\u00e4hig zu Reisen eine Analyse zu machen",
- "slug": "test-lehrgang-competence-crit-y21-reisen",
- "content_type": "competence.PerformanceCriteria",
- "translation_key": "9cf4e552-9dc1-46f8-b3e2-800e7bfd4afe",
- "frontend_url": "",
- "competence_id": "Y2.1"
- }
- ]
- },
- {
- "id": 40,
- "title": "Emma und Ayla campen durch Amerika - Analyse",
- "slug": "test-lehrgang-lp-circle-reisen-lc-emma-und-ayla-campen-durch-amerika-analyse",
- "content_type": "learnpath.LearningContentLearningModule",
- "translation_key": "a2b7889c-1143-4cc1-b4f7-0e611de60ee1",
- "frontend_url": "/course/test-lehrgang/learn/reisen/emma-und-ayla-campen-durch-amerika-analyse",
- "minutes": 15,
- "description": "",
- "content_url": "https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-analyse-xapi-FZoZOP9y/index.html"
- },
- {
- "id": 43,
- "title": "Transfer",
- "slug": "test-lehrgang-lp-circle-reisen-ls-transfer",
- "content_type": "learnpath.LearningSequence",
- "translation_key": "655a349d-48e4-4831-b518-872d0714d9e3",
- "frontend_url": "/course/test-lehrgang/learn/reisen#ls-transfer",
- "icon": "it-icon-ls-end"
- },
- {
- "id": 44,
- "title": "Transfer, Reflexion, Feedback",
- "slug": "test-lehrgang-lp-circle-reisen-lu-transfer-reflexion-feedback",
- "content_type": "learnpath.LearningUnit",
- "translation_key": "8d7cc58a-3a91-49ea-906f-c1de57fec0b2",
- "frontend_url": "/course/test-lehrgang/learn/reisen#lu-transfer-reflexion-feedback",
- "evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/transfer-reflexion-feedback",
- "course_category": {
- "id": 1,
- "title": "Allgemein",
- "general": true
- },
- "children": []
- },
- {
- "id": 45,
- "title": "Auswandern: Woran muss ich denken?",
- "slug": "test-lehrgang-lp-circle-reisen-lc-auswandern-woran-muss-ich-denken",
- "content_type": "learnpath.LearningContentPlaceholder",
- "translation_key": "691d7659-8bd9-4baa-92fd-022e9d418c46",
- "frontend_url": "/course/test-lehrgang/learn/reisen/auswandern-woran-muss-ich-denken",
- "minutes": 15,
- "description": "Platzhalter",
- "content_url": ""
- },
- {
- "id": 46,
- "title": "Fachcheck Reisen",
- "slug": "test-lehrgang-lp-circle-reisen-lc-fachcheck-reisen",
- "content_type": "learnpath.LearningContentPlaceholder",
- "translation_key": "26294bc1-9dfe-4c17-a231-02a1387e8dcf",
- "frontend_url": "/course/test-lehrgang/learn/reisen/fachcheck-reisen",
- "minutes": 15,
- "description": "Platzhalter",
- "content_url": ""
- },
- {
- "id": 47,
- "title": "Reflexion",
- "slug": "test-lehrgang-lp-circle-reisen-lc-reflexion",
- "content_type": "learnpath.LearningContentPlaceholder",
- "translation_key": "cd091a5d-63e8-4a4d-8178-d0224e869146",
- "frontend_url": "/course/test-lehrgang/learn/reisen/reflexion",
- "minutes": 15,
- "description": "Platzhalter",
- "content_url": ""
- },
- {
- "id": 48,
- "title": "Feedback",
- "slug": "test-lehrgang-lp-circle-reisen-lc-feedback",
- "content_type": "learnpath.LearningContentFeedback",
- "translation_key": "ca35688c-f8ee-4aaf-b435-6e84163d9ea6",
- "frontend_url": "/course/test-lehrgang/learn/reisen/feedback",
- "minutes": 15,
- "description": "",
- "content_url": ""
- }
- ],
- "description": "In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen, damit du\nerfolgreich mit deinem Lernpfad und in deinem Job (durch-)starten kannst.",
- "goals": "\n In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen,\n damit du erfolgreich mit deinem Lernpfad und in deinem Job (durch-)starten kannst.
\n Du baust das Grundlagenwissen f\u00fcr die folgenden Themenfelder auf:
\n \n - Aufbau von myVBV und wie du dich im Lernpfad zurechtfindest
\n - Worauf die Ausbildung und die Zulassungspr\u00fcfung zum/zur Versicherungsvermittler/-in VBV basieren
\n - Organisation deiner Lernreise und deiner Zusammenarbeit mit deiner Lernbegleitung und einem\n Lernpartner/einer Lernpartnerin
\n - Tipps und Tricks zur Organisation eines erfolgreichen Arbeitsalltags
\n - Umgang mit den sozialen Medien und Datenschutz
\n - Basiswissen Versicherungswirtschaft
\n - Basiswissen Versicherungsrecht
\n
\n Du arbeitest an folgenden Leistungskriterien aus dem Qualifikationsprofil:
\n Arbeitsalltag/Lerneinheit: \u00abLucas Auftritt in den sozialen Medien und der Umgang mit sensiblen Daten\u00bb
\n Ich bin f\u00e4hig, \u2026
\n \n - A3.1: \u2026 in Zusammenarbeit mit den IT-Spezialisten und der Marketingabteilung die Inhalte f\u00fcr den zu\n realisierenden Medienauftritt zielgruppengerecht festzulegen
\n - A3.2: \u2026 f\u00fcr die verschiedenen Kundensegmente die passenden sozialen Medien zu definieren
\n - A3.3. \u2026 die Inhalte compliant zu halten
\n
\n "
+ "id": 16,
+ "title": "Mediathek Fahrzeug",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lc-mediathek-fahrzeug",
+ "content_type": "learnpath.LearningContentMediaLibrary",
+ "translation_key": "34e79a3b-c1f9-49ff-b779-0149d614f02c",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug/mediathek-fahrzeug",
+ "minutes": 15,
+ "description": "",
+ "content_url": "/media/\u00fcberbetriebliche-kurse-media/category/fahrzeug"
+ },
+ {
+ "id": 17,
+ "title": "Vorbereitungsauftrag",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lc-vorbereitungsauftrag",
+ "content_type": "learnpath.LearningContentPlaceholder",
+ "translation_key": "8feca9cd-4937-4406-b44d-564f341e8bfe",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug/vorbereitungsauftrag",
+ "minutes": 15,
+ "description": "Platzhalter",
+ "content_url": ""
+ },
+ {
+ "id": 20,
+ "title": "Training",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-ls-training",
+ "content_type": "learnpath.LearningSequence",
+ "translation_key": "b09f87c7-01fb-4967-98c1-894ac3144595",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-training",
+ "icon": "it-icon-ls-apply"
+ },
+ {
+ "id": 21,
+ "title": "Unterlagen",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lu-unterlagen",
+ "content_type": "learnpath.LearningUnit",
+ "translation_key": "772d5352-87fa-46a7-8470-368d59565d3a",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-unterlagen",
+ "evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/unterlagen",
+ "course_category": {
+ "id": 1,
+ "title": "Allgemein",
+ "general": true
+ },
+ "children": []
+ },
+ {
+ "id": 22,
+ "title": "Unterlagen f\u00fcr den Unterricht",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lc-unterlagen-f\u00fcr-den-unterricht",
+ "content_type": "learnpath.LearningContentPlaceholder",
+ "translation_key": "ace9f1e8-5cb7-4b7c-b1c8-d43f2e4f7269",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug/unterlagen-f\u00fcr-den-unterricht",
+ "minutes": 15,
+ "description": "Platzhalter",
+ "content_url": ""
+ },
+ {
+ "id": 23,
+ "title": "Pr\u00e4senztag",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lu-pr\u00e4senztag",
+ "content_type": "learnpath.LearningUnit",
+ "translation_key": "18bc5d1d-ddcf-4e54-b58c-58f1e8833af2",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-pr\u00e4senztag",
+ "evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/pr\u00e4senztag",
+ "course_category": {
+ "id": 1,
+ "title": "Allgemein",
+ "general": true
+ },
+ "children": []
+ },
+ {
+ "id": 24,
+ "title": "Pr\u00e4senztag Fahrzeug",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lc-pr\u00e4senztag-fahrzeug",
+ "content_type": "learnpath.LearningContentAttendanceCourse",
+ "translation_key": "2441afae-83ea-4fb5-a938-8db4352ed6c5",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug/pr\u00e4senztag-fahrzeug",
+ "minutes": 15,
+ "description": "Platzhalter Beschreibung",
+ "content_url": ""
+ },
+ {
+ "id": 25,
+ "title": "Kompetenznachweis",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lu-kompetenznachweis",
+ "content_type": "learnpath.LearningUnit",
+ "translation_key": "b115d4e0-f487-4d03-a7cf-08d90bb4813d",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-kompetenznachweis",
+ "evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/kompetenznachweis",
+ "course_category": {
+ "id": 1,
+ "title": "Allgemein",
+ "general": true
+ },
+ "children": []
+ },
+ {
+ "id": 26,
+ "title": "Wissens- und Verst\u00e4ndnisfragen",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lc-wissens-und-verst\u00e4ndnisfragen",
+ "content_type": "learnpath.LearningContentPlaceholder",
+ "translation_key": "053c32bd-6174-444b-95fe-35ad2e15edf5",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug/wissens-und-verst\u00e4ndnisfragen",
+ "minutes": 15,
+ "description": "Platzhalter",
+ "content_url": ""
+ },
+ {
+ "id": 27,
+ "title": "Transfer",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-ls-transfer",
+ "content_type": "learnpath.LearningSequence",
+ "translation_key": "58939dc7-dd19-4996-b4bf-aba348be092a",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-transfer",
+ "icon": "it-icon-ls-end"
+ },
+ {
+ "id": 28,
+ "title": "Transfer",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lu-transfer",
+ "content_type": "learnpath.LearningUnit",
+ "translation_key": "185568d3-9ba3-433d-9480-4f492d9d3235",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-transfer",
+ "evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/transfer",
+ "course_category": {
+ "id": 1,
+ "title": "Allgemein",
+ "general": true
+ },
+ "children": []
+ },
+ {
+ "id": 29,
+ "title": "Reflexion",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lc-reflexion",
+ "content_type": "learnpath.LearningContentPlaceholder",
+ "translation_key": "c62d4cf6-2505-40f7-8764-41fa1ea0057c",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug/reflexion",
+ "minutes": 15,
+ "description": "Platzhalter",
+ "content_url": ""
+ },
+ {
+ "id": 30,
+ "title": "\u00dcberpr\u00fcfen einer Motorfahrzeug-Versicherungspolice",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lc-\u00fcberpr\u00fcfen-einer-motorfahrzeug-versicherungspolice",
+ "content_type": "learnpath.LearningContentAssignment",
+ "translation_key": "53cc2b76-ea59-47a2-a15a-ebf19897e9b1",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug/\u00fcberpr\u00fcfen-einer-motorfahrzeug-versicherungspolice",
+ "minutes": 15,
+ "description": "",
+ "content_url": "",
+ "content_assignment_id": 9
+ },
+ {
+ "id": 31,
+ "title": "Feedback",
+ "slug": "test-lehrgang-lp-circle-fahrzeug-lc-feedback",
+ "content_type": "learnpath.LearningContentFeedback",
+ "translation_key": "d78bded2-a760-492c-9249-283230d98ce0",
+ "frontend_url": "/course/test-lehrgang/learn/fahrzeug/feedback",
+ "minutes": 15,
+ "description": "",
+ "content_url": ""
}
- ],
- "course": {
- "id": -1,
- "title": "Test Lehrgang",
- "category_name": "Handlungsfeld",
- "slug": "test-lehrgang"
+ ],
+ "description": "In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist.\nZudem lernst du die wichtigsten Grundlagen,\ndamit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.",
+ "goals": "\n In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen,\n damit du erfolgreich mit deinem Lernpfad und in deinem Job (durch-)starten kannst.
\n Du baust das Grundlagenwissen f\u00fcr die folgenden Themenfelder auf:
\n \n - Aufbau von myVBV und wie du dich im Lernpfad zurechtfindest
\n - Worauf die Ausbildung und die Zulassungspr\u00fcfung zum/zur Versicherungsvermittler/-in VBV basieren
\n - Organisation deiner Lernreise und deiner Zusammenarbeit mit deiner Lernbegleitung und einem\n Lernpartner/einer Lernpartnerin
\n - Tipps und Tricks zur Organisation eines erfolgreichen Arbeitsalltags
\n - Umgang mit den sozialen Medien und Datenschutz
\n - Basiswissen Versicherungswirtschaft
\n - Basiswissen Versicherungsrecht
\n
\n Du arbeitest an folgenden Leistungskriterien aus dem Qualifikationsprofil:
\n Arbeitsalltag/Lerneinheit: \u00abLucas Auftritt in den sozialen Medien und der Umgang mit sensiblen Daten\u00bb
\n Ich bin f\u00e4hig, \u2026
\n \n - A3.1: \u2026 in Zusammenarbeit mit den IT-Spezialisten und der Marketingabteilung die Inhalte f\u00fcr den zu\n realisierenden Medienauftritt zielgruppengerecht festzulegen
\n - A3.2: \u2026 f\u00fcr die verschiedenen Kundensegmente die passenden sozialen Medien zu definieren
\n - A3.3. \u2026 die Inhalte compliant zu halten
\n
\n "
+ },
+ {
+ "id": 32,
+ "title": "Circle VV",
+ "slug": "test-lehrgang-lp-topic-circle-vv",
+ "content_type": "learnpath.Topic",
+ "translation_key": "19611237-22e1-40e6-b5b1-a34ff470df14",
+ "frontend_url": "",
+ "is_visible": false
+ },
+ {
+ "id": 33,
+ "title": "Reisen",
+ "slug": "test-lehrgang-lp-circle-reisen",
+ "content_type": "learnpath.Circle",
+ "translation_key": "2aaf0215-693a-407c-9f1c-bdb80f982c92",
+ "frontend_url": "/course/test-lehrgang/learn/reisen",
+ "children": [
+ {
+ "id": 34,
+ "title": "Starten",
+ "slug": "test-lehrgang-lp-circle-reisen-ls-starten",
+ "content_type": "learnpath.LearningSequence",
+ "translation_key": "e4b0eac3-3a7c-435f-8151-f69c40b35fd6",
+ "frontend_url": "/course/test-lehrgang/learn/reisen#ls-starten",
+ "icon": "it-icon-ls-start"
+ },
+ {
+ "id": 35,
+ "title": "Einf\u00fchrung",
+ "slug": "test-lehrgang-lp-circle-reisen-lu-einf\u00fchrung",
+ "content_type": "learnpath.LearningUnit",
+ "translation_key": "9f0d6302-d058-4f93-b08e-9dbd4b8b8ed3",
+ "frontend_url": "/course/test-lehrgang/learn/reisen#lu-einf\u00fchrung",
+ "evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/einf\u00fchrung",
+ "course_category": {
+ "id": 1,
+ "title": "Allgemein",
+ "general": true
+ },
+ "children": []
+ },
+ {
+ "id": 36,
+ "title": "Verschaff dir einen \u00dcberblick",
+ "slug": "test-lehrgang-lp-circle-reisen-lc-verschaff-dir-einen-\u00fcberblick",
+ "content_type": "learnpath.LearningContentVideo",
+ "translation_key": "e666b414-175f-439d-9dfd-e1c434a8cc0e",
+ "frontend_url": "/course/test-lehrgang/learn/reisen/verschaff-dir-einen-\u00fcberblick",
+ "minutes": 15,
+ "description": "Willkommen im Lehrgang Versicherungsvermitler VBV",
+ "content_url": "https://player.vimeo.com/video/772512710?h=30f912f15a"
+ },
+ {
+ "id": 37,
+ "title": "Mediathek Reisen",
+ "slug": "test-lehrgang-lp-circle-reisen-lc-mediathek-reisen",
+ "content_type": "learnpath.LearningContentMediaLibrary",
+ "translation_key": "3b4cae41-185f-40f2-86c0-f96057214ada",
+ "frontend_url": "/course/test-lehrgang/learn/reisen/mediathek-reisen",
+ "minutes": 15,
+ "description": "",
+ "content_url": "/media/test-lehrgang-media/category/reisen"
+ },
+ {
+ "id": 38,
+ "title": "Analyse",
+ "slug": "test-lehrgang-lp-circle-reisen-ls-analyse",
+ "content_type": "learnpath.LearningSequence",
+ "translation_key": "84be9e5b-6517-4a6d-85a3-1bdf90f78780",
+ "frontend_url": "/course/test-lehrgang/learn/reisen#ls-analyse",
+ "icon": "it-icon-ls-apply"
+ },
+ {
+ "id": 39,
+ "title": "Bedarfsanalyse, Ist- und Soll-Situation",
+ "slug": "test-lehrgang-lp-circle-reisen-lu-reisen",
+ "content_type": "learnpath.LearningUnit",
+ "translation_key": "7cc1e966-75db-4703-8de4-1a3171372299",
+ "frontend_url": "/course/test-lehrgang/learn/reisen#lu-reisen",
+ "evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/reisen",
+ "course_category": {
+ "id": 3,
+ "title": "Reisen",
+ "general": false
+ },
+ "children": [
+ {
+ "id": 41,
+ "title": "Ich bin f\u00e4hig zu Reisen eine Gespr\u00e4chsf\u00fchrung zu machen",
+ "slug": "test-lehrgang-competence-crit-y11-reisen",
+ "content_type": "competence.PerformanceCriteria",
+ "translation_key": "b82dfd37-649f-488c-a78e-c6a3257c3f43",
+ "frontend_url": "",
+ "competence_id": "Y1.1"
+ },
+ {
+ "id": 42,
+ "title": "Ich bin f\u00e4hig zu Reisen eine Analyse zu machen",
+ "slug": "test-lehrgang-competence-crit-y21-reisen",
+ "content_type": "competence.PerformanceCriteria",
+ "translation_key": "9cf4e552-9dc1-46f8-b3e2-800e7bfd4afe",
+ "frontend_url": "",
+ "competence_id": "Y2.1"
+ }
+ ]
+ },
+ {
+ "id": 40,
+ "title": "Emma und Ayla campen durch Amerika - Analyse",
+ "slug": "test-lehrgang-lp-circle-reisen-lc-emma-und-ayla-campen-durch-amerika-analyse",
+ "content_type": "learnpath.LearningContentLearningModule",
+ "translation_key": "a2b7889c-1143-4cc1-b4f7-0e611de60ee1",
+ "frontend_url": "/course/test-lehrgang/learn/reisen/emma-und-ayla-campen-durch-amerika-analyse",
+ "minutes": 15,
+ "description": "",
+ "content_url": "https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-analyse-xapi-FZoZOP9y/index.html"
+ },
+ {
+ "id": 43,
+ "title": "Transfer",
+ "slug": "test-lehrgang-lp-circle-reisen-ls-transfer",
+ "content_type": "learnpath.LearningSequence",
+ "translation_key": "655a349d-48e4-4831-b518-872d0714d9e3",
+ "frontend_url": "/course/test-lehrgang/learn/reisen#ls-transfer",
+ "icon": "it-icon-ls-end"
+ },
+ {
+ "id": 44,
+ "title": "Transfer, Reflexion, Feedback",
+ "slug": "test-lehrgang-lp-circle-reisen-lu-transfer-reflexion-feedback",
+ "content_type": "learnpath.LearningUnit",
+ "translation_key": "8d7cc58a-3a91-49ea-906f-c1de57fec0b2",
+ "frontend_url": "/course/test-lehrgang/learn/reisen#lu-transfer-reflexion-feedback",
+ "evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/transfer-reflexion-feedback",
+ "course_category": {
+ "id": 1,
+ "title": "Allgemein",
+ "general": true
+ },
+ "children": []
+ },
+ {
+ "id": 45,
+ "title": "Auswandern: Woran muss ich denken?",
+ "slug": "test-lehrgang-lp-circle-reisen-lc-auswandern-woran-muss-ich-denken",
+ "content_type": "learnpath.LearningContentPlaceholder",
+ "translation_key": "691d7659-8bd9-4baa-92fd-022e9d418c46",
+ "frontend_url": "/course/test-lehrgang/learn/reisen/auswandern-woran-muss-ich-denken",
+ "minutes": 15,
+ "description": "Platzhalter",
+ "content_url": ""
+ },
+ {
+ "id": 46,
+ "title": "Fachcheck Reisen",
+ "slug": "test-lehrgang-lp-circle-reisen-lc-fachcheck-reisen",
+ "content_type": "learnpath.LearningContentPlaceholder",
+ "translation_key": "26294bc1-9dfe-4c17-a231-02a1387e8dcf",
+ "frontend_url": "/course/test-lehrgang/learn/reisen/fachcheck-reisen",
+ "minutes": 15,
+ "description": "Platzhalter",
+ "content_url": ""
+ },
+ {
+ "id": 47,
+ "title": "Reflexion",
+ "slug": "test-lehrgang-lp-circle-reisen-lc-reflexion",
+ "content_type": "learnpath.LearningContentPlaceholder",
+ "translation_key": "cd091a5d-63e8-4a4d-8178-d0224e869146",
+ "frontend_url": "/course/test-lehrgang/learn/reisen/reflexion",
+ "minutes": 15,
+ "description": "Platzhalter",
+ "content_url": ""
+ },
+ {
+ "id": 48,
+ "title": "Feedback",
+ "slug": "test-lehrgang-lp-circle-reisen-lc-feedback",
+ "content_type": "learnpath.LearningContentFeedback",
+ "translation_key": "ca35688c-f8ee-4aaf-b435-6e84163d9ea6",
+ "frontend_url": "/course/test-lehrgang/learn/reisen/feedback",
+ "minutes": 15,
+ "description": "",
+ "content_url": ""
+ }
+ ],
+ "description": "In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen, damit du\nerfolgreich mit deinem Lernpfad und in deinem Job (durch-)starten kannst.",
+ "goals": "\n In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen,\n damit du erfolgreich mit deinem Lernpfad und in deinem Job (durch-)starten kannst.
\n Du baust das Grundlagenwissen f\u00fcr die folgenden Themenfelder auf:
\n \n - Aufbau von myVBV und wie du dich im Lernpfad zurechtfindest
\n - Worauf die Ausbildung und die Zulassungspr\u00fcfung zum/zur Versicherungsvermittler/-in VBV basieren
\n - Organisation deiner Lernreise und deiner Zusammenarbeit mit deiner Lernbegleitung und einem\n Lernpartner/einer Lernpartnerin
\n - Tipps und Tricks zur Organisation eines erfolgreichen Arbeitsalltags
\n - Umgang mit den sozialen Medien und Datenschutz
\n - Basiswissen Versicherungswirtschaft
\n - Basiswissen Versicherungsrecht
\n
\n Du arbeitest an folgenden Leistungskriterien aus dem Qualifikationsprofil:
\n Arbeitsalltag/Lerneinheit: \u00abLucas Auftritt in den sozialen Medien und der Umgang mit sensiblen Daten\u00bb
\n Ich bin f\u00e4hig, \u2026
\n \n - A3.1: \u2026 in Zusammenarbeit mit den IT-Spezialisten und der Marketingabteilung die Inhalte f\u00fcr den zu\n realisierenden Medienauftritt zielgruppengerecht festzulegen
\n - A3.2: \u2026 f\u00fcr die verschiedenen Kundensegmente die passenden sozialen Medien zu definieren
\n - A3.3. \u2026 die Inhalte compliant zu halten
\n
\n "
}
-}
\ No newline at end of file
+ ],
+ "course": {
+ "id": -1,
+ "title": "Test Lehrgang",
+ "category_name": "Handlungsfeld",
+ "slug": "test-lehrgang"
+ }
+}
diff --git a/client/src/services/assignmentService.ts b/client/src/services/assignmentService.ts
index e0f1cf53..fa44b688 100644
--- a/client/src/services/assignmentService.ts
+++ b/client/src/services/assignmentService.ts
@@ -27,7 +27,9 @@ export function calcAssignmentLearningContents(learningPath?: LearningPath) {
return learningPath.circles.flatMap((circle) => {
const learningContents = circle.flatLearningContents.filter(
- (lc) => lc.content_type === "learnpath.LearningContentAssignment"
+ (lc) =>
+ lc.content_type === "learnpath.LearningContentAssignment" &&
+ lc.assignment_type === "CASEWORK"
) as LearningContentAssignment[];
return learningContents.map((lc) => {
return {
diff --git a/client/src/services/circle.ts b/client/src/services/circle.ts
index 6433b69d..7cacaff2 100644
--- a/client/src/services/circle.ts
+++ b/client/src/services/circle.ts
@@ -18,7 +18,7 @@ import values from "lodash/values";
function isLearningContentType(object: any): object is LearningContent {
return (
object?.content_type === "learnpath.LearningContentAssignment" ||
- object?.content_type === "learnpath.LearningContentAttendanceDay" ||
+ object?.content_type === "learnpath.LearningContentAttendanceCourse" ||
object?.content_type === "learnpath.LearningContentFeedback" ||
object?.content_type === "learnpath.LearningContentLearningModule" ||
object?.content_type === "learnpath.LearningContentMediaLibrary" ||
diff --git a/client/src/stores/__tests__/courseSession.spec.ts b/client/src/stores/__tests__/courseSession.spec.ts
index da64c2e0..dec82031 100644
--- a/client/src/stores/__tests__/courseSession.spec.ts
+++ b/client/src/stores/__tests__/courseSession.spec.ts
@@ -51,7 +51,7 @@ describe("CourseSession Store", () => {
competence_url: "/course/test-course/competence/",
course_url: "/course/test-course/",
media_library_url: "/course/test-course/media/",
- attendance_days: [],
+ attendance_courses: [],
additional_json_data: {},
documents: [],
},
diff --git a/client/src/stores/courseSessions.ts b/client/src/stores/courseSessions.ts
index b7640ac6..32bc982d 100644
--- a/client/src/stores/courseSessions.ts
+++ b/client/src/stores/courseSessions.ts
@@ -4,7 +4,7 @@ import type {
CircleDocument,
CourseSession,
CourseSessionAssignmentDetails,
- CourseSessionAttendanceDay,
+ CourseSessionAttendanceCourse,
CourseSessionUser,
ExpertSessionUser,
} from "@/types";
@@ -210,12 +210,12 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => {
);
}
- function findAttendanceDay(
+ function findAttendanceCourse(
contentId: number
- ): CourseSessionAttendanceDay | undefined {
+ ): CourseSessionAttendanceCourse | undefined {
if (currentCourseSession.value) {
- return currentCourseSession.value.attendance_days.find(
- (attendanceDay) => attendanceDay.learningContentId === contentId
+ return currentCourseSession.value.attendance_courses.find(
+ (attendanceCourse) => attendanceCourse.learningContentId === contentId
);
}
}
@@ -243,7 +243,7 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => {
addDocument,
startUpload,
removeDocument,
- findAttendanceDay,
+ findAttendanceCourse,
findAssignmentDetails,
// use `useCurrentCourseSession` whenever possible
diff --git a/client/src/types.ts b/client/src/types.ts
index ea4bc867..1a090d74 100644
--- a/client/src/types.ts
+++ b/client/src/types.ts
@@ -22,7 +22,7 @@ export interface CircleLight {
export type LearningContent =
| LearningContentAssignment
- | LearningContentAttendanceDay
+ | LearningContentAttendanceCourse
| LearningContentFeedback
| LearningContentLearningModule
| LearningContentMediaLibrary
@@ -48,10 +48,11 @@ export interface LearningContentInterface extends BaseCourseWagtailPage {
export interface LearningContentAssignment extends LearningContentInterface {
readonly content_type: "learnpath.LearningContentAssignment";
readonly content_assignment_id: number;
+ readonly assignment_type: AssignmentType;
}
-export interface LearningContentAttendanceDay extends LearningContentInterface {
- readonly content_type: "learnpath.LearningContentAttendanceDay";
+export interface LearningContentAttendanceCourse extends LearningContentInterface {
+ readonly content_type: "learnpath.LearningContentAttendanceCourse";
}
export interface LearningContentFeedback extends LearningContentInterface {
@@ -326,9 +327,12 @@ export interface AssignmentEvaluationTask {
};
}
+export type AssignmentType = "CASEWORK" | "PREP_ASSIGNMENT" | "REFLECTION";
+
export interface Assignment extends BaseCourseWagtailPage {
readonly content_type: "assignment.Assignment";
- readonly starting_position: string;
+ readonly assignment_type: AssignmentType;
+ readonly intro_text: string;
readonly effort_required: string;
readonly performance_objectives: AssignmentPerformanceObjective[];
readonly evaluation_description: string;
@@ -390,12 +394,10 @@ export interface CircleDocument {
learning_sequence: number;
}
-// TODO refactor, when a user can manually create these days
-export interface CourseSessionAttendanceDay {
+export interface CourseSessionAttendanceCourse {
learningContentId: number;
- date: string;
- startTime: string;
- endTime: string;
+ start: string;
+ end: string;
location: string;
trainer: string;
}
@@ -419,7 +421,7 @@ export interface CourseSession {
competence_url: string;
course_url: string;
media_library_url: string;
- attendance_days: CourseSessionAttendanceDay[];
+ attendance_courses: CourseSessionAttendanceCourse[];
assignment_details_list: CourseSessionAssignmentDetails[];
documents: CircleDocument[];
users: CourseSessionUser[];
diff --git a/client/src/utils/typeMaps.ts b/client/src/utils/typeMaps.ts
index 79653aa2..fa443537 100644
--- a/client/src/utils/typeMaps.ts
+++ b/client/src/utils/typeMaps.ts
@@ -1,4 +1,4 @@
-import type { LearningContentType } from "@/types";
+import type { LearningContent } from "@/types";
import { assertUnreachable } from "@/utils/utils";
export interface LearningContentIdentifier {
@@ -7,13 +7,25 @@ export interface LearningContentIdentifier {
}
export function learningContentTypeData(
- t: LearningContentType
+ lc: LearningContent
): LearningContentIdentifier {
- switch (t) {
- case "learnpath.LearningContentAssignment":
- return { title: "Transferauftrag", icon: "it-icon-lc-assignment" };
- case "learnpath.LearningContentAttendanceDay":
- return { title: "Präsenztag", icon: "it-icon-lc-training" };
+ switch (lc.content_type) {
+ case "learnpath.LearningContentAssignment": {
+ let title = "unknown";
+ if (lc.assignment_type === "CASEWORK") {
+ title = "Geleitete Fallarbeit";
+ } else if (lc.assignment_type === "PREP_ASSIGNMENT") {
+ title = "Vorbereitungsaufgabe";
+ } else if (lc.assignment_type === "REFLECTION") {
+ title = "Reflexion";
+ }
+ return {
+ title: title,
+ icon: "it-icon-lc-assignment",
+ };
+ }
+ case "learnpath.LearningContentAttendanceCourse":
+ return { title: "Präsenzkurs", icon: "it-icon-lc-training" };
case "learnpath.LearningContentLearningModule":
return { title: "Lernmodul", icon: "it-icon-lc-learning-module" };
case "learnpath.LearningContentMediaLibrary":
diff --git a/client/tailwind.css b/client/tailwind.css
index 6a2f8418..f7e61624 100644
--- a/client/tailwind.css
+++ b/client/tailwind.css
@@ -29,12 +29,18 @@ body {
.default-wagtail-rich-text h3 {
margin-bottom: 1em;
+ margin-top: 1em;
}
.default-wagtail-rich-text p {
margin-bottom: 0.5em;
}
+.default-wagtail-rich-text a {
+ text-decoration-line: underline;
+ text-underline-offset: 2px;
+}
+
.default-wagtail-rich-text ul {
list-style-type: disc;
margin-left: 24px;
@@ -129,7 +135,7 @@ textarea {
}
.btn-secondary {
- @apply inline-block border-2 border-blue-900 bg-white px-4
+ @apply inline-block border-2 border-blue-900 bg-transparent px-4
py-2 align-middle font-semibold text-blue-900
hover:bg-gray-200
disabled:cursor-not-allowed disabled:opacity-50;
diff --git a/cypress/e2e/circle.cy.js b/cypress/e2e/circle.cy.js
index 8024cc4f..bd48d954 100644
--- a/cypress/e2e/circle.cy.js
+++ b/cypress/e2e/circle.cy.js
@@ -1,6 +1,6 @@
import { login } from "./helpers";
-describe("circle page", () => {
+describe("circle.cy.js", () => {
beforeEach(() => {
cy.manageCommand("cypress_reset");
@@ -47,20 +47,12 @@ describe("circle page", () => {
);
cy.get('[data-cy="complete-and-continue"]').click({ force: true });
- cy.get('[data-cy="ls-continue-button"]').click();
- cy.get('[data-cy="lc-title"]').should("contain", "Vorbereitungsauftrag");
- cy.get('[data-cy="complete-and-continue"]').click({ force: true });
-
cy.get(
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-verschaffe-dir-einen-überblick-checkbox"] > .cy-checkbox-checked'
).should("have.class", "cy-checkbox-checked");
cy.get(
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-handlungsfeld-fahrzeug-checkbox"] > .cy-checkbox-checked'
).should("have.class", "cy-checkbox-checked");
-
- cy.get(
- '[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-vorbereitungsauftrag-checkbox"] > .cy-checkbox-checked'
- ).should("have.class", "cy-checkbox-checked");
});
it("continue button works", () => {
diff --git a/cypress/e2e/competence.cy.js b/cypress/e2e/competence.cy.js
index a753ad8a..42bf38f6 100644
--- a/cypress/e2e/competence.cy.js
+++ b/cypress/e2e/competence.cy.js
@@ -1,6 +1,6 @@
import { login } from "./helpers";
-describe("Competence", () => {
+describe("competence.cy.js", () => {
beforeEach(() => {
cy.manageCommand("cypress_reset");
diff --git a/cypress/e2e/learningPath.cy.js b/cypress/e2e/learningPath.cy.js
index 62dd42de..c50eb350 100644
--- a/cypress/e2e/learningPath.cy.js
+++ b/cypress/e2e/learningPath.cy.js
@@ -1,6 +1,6 @@
import { login } from "./helpers";
-describe("learningPath page", () => {
+describe("learningPath.cy.js", () => {
beforeEach(() => {
cy.manageCommand("cypress_reset");
login("test-student1@example.com", "test");
diff --git a/cypress/e2e/login.cy.js b/cypress/e2e/login.cy.js
index f7d7cace..9846b735 100644
--- a/cypress/e2e/login.cy.js
+++ b/cypress/e2e/login.cy.js
@@ -1,6 +1,6 @@
import { login } from "./helpers";
-describe("login", () => {
+describe("login.cy.js", () => {
Cypress.on("uncaught:exception", (err, runnable) => {
// do not fail on failed requests during tests
return false;
diff --git a/cypress/e2e/mediaLibrary.cy.js b/cypress/e2e/mediaLibrary.cy.js
index c86ae46e..a1fd68d1 100644
--- a/cypress/e2e/mediaLibrary.cy.js
+++ b/cypress/e2e/mediaLibrary.cy.js
@@ -1,6 +1,6 @@
import { login } from "./helpers";
-describe("MediaLibrary", () => {
+describe("mediaLibrary.cy.js", () => {
beforeEach(() => {
cy.manageCommand("cypress_reset");
diff --git a/cypress/e2e/notifications.cy.js b/cypress/e2e/notifications.cy.js
index 95eb4189..5b286520 100644
--- a/cypress/e2e/notifications.cy.js
+++ b/cypress/e2e/notifications.cy.js
@@ -1,6 +1,6 @@
import { login } from "./helpers";
-describe("notifications page", () => {
+describe("notifications.cy.js", () => {
beforeEach(() => {
cy.manageCommand("cypress_reset");
cy.manageCommand("create_default_notifications");
diff --git a/server/vbv_lernwelt/assignment/creators/create_assignments.py b/server/vbv_lernwelt/assignment/creators/create_assignments.py
index 9471bbe9..2668002a 100644
--- a/server/vbv_lernwelt/assignment/creators/create_assignments.py
+++ b/server/vbv_lernwelt/assignment/creators/create_assignments.py
@@ -1,10 +1,11 @@
from vbv_lernwelt.assignment.models import (
+ AssignmentListPage,
+ AssignmentType,
EvaluationSubTaskBlock,
TaskContentStreamBlock,
)
from vbv_lernwelt.assignment.tests.assignment_factories import (
AssignmentFactory,
- AssignmentListPageFactory,
EvaluationSubTaskBlockFactory,
EvaluationTaskBlockFactory,
ExplanationBlockFactory,
@@ -13,30 +14,35 @@ from vbv_lernwelt.assignment.tests.assignment_factories import (
UserTextInputBlockFactory,
)
from vbv_lernwelt.core.utils import replace_whitespace
-from vbv_lernwelt.course.consts import COURSE_TEST_ID, COURSE_UK
+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_assignments(course_id=COURSE_UK):
- course_page = CoursePage.objects.get(course_id=course_id)
- assignment_page = AssignmentListPageFactory(
- parent=course_page,
+def create_uk_casework(course_id=COURSE_UK):
+ assignment_list_page = (
+ CoursePage.objects.get(course_id=course_id)
+ .get_children()
+ .exact_type(AssignmentListPage)
+ .first()
)
assignment = AssignmentFactory(
- parent=assignment_page,
+ parent=assignment_list_page,
title="Überprüfen einer Motorfahrzeugs-Versicherungspolice",
effort_required="ca. 5 Stunden",
- starting_position=replace_whitespace(
+ intro_text=replace_whitespace(
"""
+ Ausgangslage
+
Jemand aus deiner Familie oder aus deinem Freundeskreis möchte sein
Versicherungspolice überprüfen lassen. Diese Person kommt nun mit ihrer Police auf dich zu
und bittet dich als Versicherungsprofi, diese kritisch zu überprüfen und ihr ggf. Anpassungsvorschläge
zu unterbreiten. In diesem Kompetenznachweis kannst du nun dein Wissen und Können im Bereich
der Motorfahrzeugversicherung unter Beweis stellen.
+
"""
),
performance_objectives=[
@@ -459,220 +465,50 @@ def create_uk_assignments(course_id=COURSE_UK):
return assignment
-def create_test_assignment(course_id=COURSE_TEST_ID):
- course_page = CoursePage.objects.get(course_id=course_id)
- assignment_page = AssignmentListPageFactory(
- parent=course_page,
+def create_uk_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_page,
- title="Überprüfen einer Motorfahrzeugs-Versicherungspolice",
- effort_required="ca. 5 Stunden",
- starting_position=replace_whitespace(
+ parent=assignment_list_page,
+ assignment_type=AssignmentType.PREP_ASSIGNMENT.name,
+ title="Fahrzeug - Mein erstes Auto",
+ effort_required="ca. 3 Stunden",
+ intro_text=replace_whitespace(
"""
- Jemand aus deiner Familie oder aus deinem Freundeskreis möchte sein
- Versicherungspolice überprüfen lassen. Diese Person kommt nun mit ihrer Police auf dich zu
- und bittet dich als Versicherungsprofi, diese kritisch zu überprüfen und ihr ggf. Anpassungsvorschläge
- zu unterbreiten. In diesem Kompetenznachweis kannst du nun dein Wissen und Können im Bereich
- der Motorfahrzeugversicherung unter Beweis stellen.
+ 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.ük3: Sie erläutern die Leistungen und Produkte im Versicherungsbereich. (K2)
+ - 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
+
+ - e4.pv.ük1: Sie erläutern die Dienstleistungen des Betriebs. (K2)
+ - e4.pv.ük2: Sie unterscheiden Mitbewerber in der privaten Versicherungsbranche anhand der relevanten Kriterien.(K2)
+ - 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.
+ Welches wird dein erstes eigenes Auto sein? Dieses Auto möchtest du natürlich auch schützen und richtig
+ versichern.
+
"""
),
- performance_objectives=[
- (
- "performance_objective",
- PerformanceObjectiveBlockFactory(
- text="Sie erläutern die Leistungen und Produkte im Versicherungsbereich."
- ),
- ),
- (
- "performance_objective",
- PerformanceObjectiveBlockFactory(
- text="Sie beurteilen gängige Versicherungslösungen fachkundig."
- ),
- ),
- ],
- evaluation_document_url="/static/media/assignments/UK_03_09_NACH_KN_Beurteilungsraster.pdf",
- evaluation_description="Diese geleitete Fallarbeit wird auf Grund des folgenden Beurteilungsintrument bewertet.",
- )
-
- assignment.evaluation_tasks = []
- assignment.evaluation_tasks.append(
- (
- "task",
- EvaluationTaskBlockFactory(
- title="Ausgangslage des Auftrags",
- description=RichText(
- "Beschreibt der/die Lernende die Ausgangslage des Auftrags vollständig?"
- ),
- max_points=6,
- sub_tasks=ListValue(
- ListBlock(EvaluationSubTaskBlock()),
- values=[
- EvaluationSubTaskBlockFactory(
- title="Die Ausgangslage des Auftrag ist vollständig beschrieben.",
- description=RichText(
- replace_whitespace(
- """
-
- - Worum geht es? Was ist die Aufgabe?
- - Sind das Kundenprofil und die Kundenbeziehung vollständig und nachvollziehbar dargestellt?
- - Ist das Alter des Fahrzeugs dokumentiert?
- - Welche Ressourcen stehen zur Verfügung?
-
- """
- )
- ),
- points=6,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Ausgangslage ist grösstenteils vollständig beschrieben.",
- points=4,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Ausgangslage ist unvollständig - nur 2 Punkte wurden beschrieben.",
- points=2,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Ausgangslage des Auftrag ist unvollständig - es fehlen mehr als 2 Punkte in der Beschreibung.",
- points=0,
- ),
- ],
- ),
- ),
- ),
- )
- assignment.evaluation_tasks.append(
- (
- "task",
- EvaluationTaskBlockFactory(
- title="Inhaltsanalyse und Struktur",
- max_points=6,
- description=RichText(
- "Sind die Deckungen der Police vollständig und nachvollziehbar dokumentiert?"
- ),
- sub_tasks=ListValue(
- ListBlock(EvaluationSubTaskBlock()),
- values=[
- EvaluationSubTaskBlockFactory(
- title="Die Analyse beinhaltet alle in der Police vorhandenen Deckungen und ist logisch aufgebaut.",
- points=6,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Analyse beinhaltet die meisten vorhandenen Deckungen in der Police und ist grösstenteils logisch aufgebaut.",
- points=4,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Analyse ist unvollständig (es fehlen mehr als 3 Deckungen) und der rote Faden ist nicht erkennbar.",
- points=2,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Analyse ist insgesamt nicht nachvollziehbar und es fehlen einige Deckungen.",
- points=0,
- ),
- ],
- ),
- ),
- ),
- )
- assignment.evaluation_tasks.append(
- (
- "task",
- EvaluationTaskBlockFactory(
- title="Sinnvolle Empfehlungen",
- max_points=6,
- description=RichText(
- "Leitet die lernende Person sinnvolle und geeignete Empfehlungen ab?"
- ),
- sub_tasks=ListValue(
- ListBlock(EvaluationSubTaskBlock()),
- values=[
- EvaluationSubTaskBlockFactory(
- title="Die Empfehlungen sind durchgängig sinnvoll und nachvollziehbar begründet.",
- points=6,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Empfehlungen sind grösstenteils sinnvoll und nachvollziehbar begründet.",
- points=4,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Empfehlungen sind wenig sinnvoll und unvollständig begründet.",
- points=2,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Empfehlungen sind weder sinnvoll nch nachvollziehbar begründet.",
- points=0,
- ),
- ],
- ),
- ),
- ),
- )
- assignment.evaluation_tasks.append(
- (
- "task",
- EvaluationTaskBlockFactory(
- title="Qualität der Reflexion",
- max_points=3,
- description=RichText(
- "Reflektiert die lernende Person die Durchführung der geleiteten Fallarbeit?"
- ),
- sub_tasks=ListValue(
- ListBlock(EvaluationSubTaskBlock()),
- values=[
- EvaluationSubTaskBlockFactory(
- title="Die Reflexion bezieht sich auf die geleitete Fallarbeit und umfasst nachvollziehbare positive wie negative Aspekte.",
- points=3,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Reflexion bezieht sich auf die geleitete Fallarbeit und umfasst grösstenteils nachvollziehbare positive wie negative Aspekte.",
- points=2,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Reflexion ist unvollständig.",
- points=1,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Reflexion bezieht sich nicht auf die geleitete Fallarbeit.",
- points=0,
- ),
- ],
- ),
- ),
- ),
- )
- assignment.evaluation_tasks.append(
- (
- "task",
- EvaluationTaskBlockFactory(
- title="Eignung der Learnings",
- max_points=3,
- description=RichText(
- "Leitet die lernende Person geeignete Learnings aus der Reflexion ab?"
- ),
- sub_tasks=ListValue(
- ListBlock(EvaluationSubTaskBlock()),
- values=[
- EvaluationSubTaskBlockFactory(
- title="Die Learnings beziehen sich auf die geleitete Fallarbeit und sind inhaltlich sinnvoll.",
- points=3,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Learnings beziehen sich grösstenteils auf die geleitete Fallarbeit und sind inhaltlich sinnvoll.",
- points=2,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Learnings beziehen sich teilweise auf die geleitete Fallarbeit und sind inhaltlich wenig sinnvoll.",
- points=1,
- ),
- EvaluationSubTaskBlockFactory(
- title="Die Learnings beziehen sich nicht auf die geleitete Fallarbeit.",
- points=0,
- ),
- ],
- ),
- ),
- ),
+ performance_objectives=[],
)
assignment.tasks = []
@@ -680,7 +516,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
(
"task",
TaskBlockFactory(
- title="Teilaufgabe 1: Beispiel einer Versicherungspolice finden",
+ 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(
@@ -690,7 +526,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
"explanation",
ExplanationBlockFactory(
text=RichText(
- "Bitte jemand aus deiner Familie oder deinem Freundeskreis darum, dir seine/ihre Motorfahrzeugversicherungspolice zur Verfügung zu stellen."
+ 'Schaue dazu das folgende Video: Wie funktioniert eine Autoversicherung? – Einfach erklärt'
)
),
),
@@ -698,7 +534,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
"user_confirmation",
ExplanationBlockFactory(
text=RichText(
- "Ja, ich habe Motorfahrzeugversicherungspolice von jemandem aus meiner Familie oder meinem Freundeskreis erhalten."
+ "Ja, ich habe das Video angeschaut und verstanden."
)
),
),
@@ -712,7 +548,41 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
(
"task",
TaskBlockFactory(
- title="Teilaufgabe 2: Kundensituation und Ausgangslage",
+ title="Teilaufgabe 2: Kapitel «Haftpflichtrecht und Motorfahrzeugversicherung» 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 «Haftpflichtrecht und Motorfahrzeugversicherung» die entsprechenden Kapitel"
+ )
+ ),
+ ),
+ (
+ "user_confirmation",
+ ExplanationBlockFactory(
+ text=RichText(
+ "Ja, ich habe das Kapitel gelesen und verstanden."
+ )
+ ),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Teilaufgabe 3: Offerte 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=[
@@ -722,17 +592,28 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
text=RichText(
replace_whitespace(
"""
- Erläutere die Kundensituation und die Ausgangslage.
-
- - Hast du alle Informationen, die du für den Policen-Check benötigst?
- - Halte die wichtigsten Eckwerte des aktuellen Versicherungsverhältnisse in deiner Dokumentation fest (z.B wie lang wo versichert, Alter des Fahrzeugs, Kundenprofil, etc.
-
+
+ Nun geht es los! Erstelle dir für dein erstes eigenes Auto eine entsprechende
+ Offerte. Überlege dir, welche Deckungen du unbedingt abschliessen musst und
+ welche Deckungen für dich zusätzlich wünschenswert sind. Nutze dazu das
+ Offertentool deiner Unternehmung. Alternativ dazu kannst du auch irgendein
+ Onlinetool nutzen.
+
+
+ Möglicherweise musst du mit deinem Geburtsjahrgang etwas schummeln,
+ damit du alt genug bist, um für dich eine Offerte zu machen.
+
"""
)
)
),
),
- ("user_text_input", UserTextInputBlockFactory()),
+ (
+ "user_confirmation",
+ ExplanationBlockFactory(
+ text=RichText("Ja, ich habe eine Offerte erstellt.")
+ ),
+ ),
],
),
),
@@ -743,8 +624,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
(
"task",
TaskBlockFactory(
- title="Teilaufgabe 3: Aktuelle Versicherung",
- # TODO: add document upload
+ title="Teilaufgabe 4: Notizen und Fragestellungen",
content=StreamValue(
TaskContentStreamBlock(),
stream_data=[
@@ -752,30 +632,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
"explanation",
ExplanationBlockFactory(
text=RichText(
- "Zeige nun detailliert auf, wie dein Kundenbeispiel momentan versichert ist."
- )
- ),
- ),
- ("user_text_input", UserTextInputBlockFactory()),
- ],
- ),
- ),
- )
- )
-
- assignment.tasks.append(
- (
- "task",
- TaskBlockFactory(
- title="Teilaufgabe 4: Deine Empfehlungen",
- content=StreamValue(
- TaskContentStreamBlock(),
- stream_data=[
- (
- "explanation",
- ExplanationBlockFactory(
- text=RichText(
- "Erarbeite nun basierend auf deinen Erkenntnissen eine Empfehlung für die Person."
+ "Mache dir im Verlauf des Prozesses Notizen zu den folgenden Fragestellungen:"
)
),
),
@@ -783,7 +640,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
"user_text_input",
UserTextInputBlockFactory(
text=RichText(
- "Gibt es zusätzliche Deckungen, die du der Person empfehlen würdest? Begründe deine Empfehlung"
+ "Wie bist du bei der Erstellung deiner Offerte vorgegangen?"
)
),
),
@@ -791,7 +648,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
"user_text_input",
UserTextInputBlockFactory(
text=RichText(
- "Gibt es Deckungen, die du streichen würdest? Begründe deine Empfehlung."
+ "Welches waren die Schwierigkeiten bei der Erstellung der Offerte? Wie hast du die Schwierigkeiten gelöst?"
)
),
),
@@ -799,7 +656,23 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
"user_text_input",
UserTextInputBlockFactory(
text=RichText(
- "Wenn die Person gemäss deiner Einschätzung genau richtig versichert ist, argumentiere, warum dies der Fall ist."
+ "Welche Angaben sind zwingend notwendig, um eine saubere Motorfahrzeugofferte erstellen zu können?"
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Welche zusätzlichen Deckungen hast du gewählt? Was waren die Überlegungen dazu?"
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Welche Faktoren/Elemente bestimmen hauptsächlich die Höhe der Prämie?"
)
),
),
@@ -813,7 +686,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
(
"task",
TaskBlockFactory(
- title="Teilaufgabe 5: Reflexion",
+ title="Teilaufgabe 5: Präzenz-Training",
content=StreamValue(
TaskContentStreamBlock(),
stream_data=[
@@ -821,31 +694,8 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
"explanation",
ExplanationBlockFactory(
text=RichText(
- "Reflektiere dein Handeln und halte deine Erkenntnisse fest. Frage dich dabei:"
- )
- ),
- ),
- (
- "user_text_input",
- UserTextInputBlockFactory(
- text=RichText(
- "War die Bearbeitung dieser geleiteten Fallarbeit erfolgreich? Begründe deine Einschätzung."
- )
- ),
- ),
- (
- "user_text_input",
- UserTextInputBlockFactory(
- text=RichText(
- "Was ist dir bei der Bearbeitung des Auftrags gut gelungen?"
- )
- ),
- ),
- (
- "user_text_input",
- UserTextInputBlockFactory(
- text=RichText(
- "Was ist dir bei der Bearbeitung des Auftrags weniger gut gelungen?"
+ "Bringe die Offerte und diese Notizen mit ins Präsenz-Training.
"
+ "Vergiss die dazugehörenden AVB nicht. Es ist auch okay, wenn du die Unterlagen nur elektronisch dabei hast.
"
)
),
),
@@ -859,7 +709,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
(
"task",
TaskBlockFactory(
- title="Teilaufgabe 6: Learnings",
+ title="Aufgaben zum Vorbereitungsauftrag",
content=StreamValue(
TaskContentStreamBlock(),
stream_data=[
@@ -867,7 +717,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
"explanation",
ExplanationBlockFactory(
text=RichText(
- "Leite aus der Teilaufgabe 5 deine persönlichen Learnings ab."
+ "Schnappt euch euren Vorbereitungsauftrag und setzt euch zu dritt zusammen. Diskutiert miteinander die folgenden Fragen."
)
),
),
@@ -875,7 +725,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
"user_text_input",
UserTextInputBlockFactory(
text=RichText(
- "Was würdest du beim nächsten Mal anders machen?"
+ "Wie seid ihr bei der Erstellung der Offerte vorgegangen?"
)
),
),
@@ -883,7 +733,195 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
"user_text_input",
UserTextInputBlockFactory(
text=RichText(
- "Was hast du beim Bearbeiten des Auftrags Neues gelernt?"
+ "Welches waren die Schwierigkeiten bei der Erstellung der Offerte? Wie hast du die Schwierigkeiten gelöst?"
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Welche Angaben sind zwingend notwendig, um eine saubere Motorfahrzeugofferte erstellen zu können?"
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Welche zusätzlichen Deckungen hast du gewählt? Was waren die Überlegungen dazu?"
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Welche Faktoren/Elemente bestimmen hauptsächlich die Höhe der Prämie?"
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Wenn ihr mit der Diskussion und dem Vergleich fertig seid, schreibt doch die Prämie eurer eigenen Offerte jeweils auf den Flipchart/Whiteboard/Wandtafel."
+ )
+ ),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ 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)
+ .get_children()
+ .exact_type(AssignmentListPage)
+ .first()
+ )
+
+ assignment = AssignmentFactory(
+ parent=assignment_list_page,
+ assignment_type=AssignmentType.REFLECTION.name,
+ title=f"{circle_title} - Reflexionsfragen",
+ effort_required="ca. 1 Stunde",
+ 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.
+
+ """
+ ),
+ performance_objectives=[],
+ )
+
+ assignment.tasks = []
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Frage 1: Was gelingt mir bereits gut?",
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Frage 2: Vertiefung",
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Wo muss ich mich noch vertiefen oder nochmals repetieren? "
+ )
+ ),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Frage 3: Was nehme ich mit?",
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Frage 4: Vorbereitung",
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Wie habe ich mich auf den Circle vorbereitet (z. B. Lernzeit eingeplant)?"
+ )
+ ),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Frage 5: Präsenzunterricht",
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Wie engagiert war ich im Präsenzunterricht?"
+ )
+ ),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Frage 6: Verbesserung",
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Was will ich für den nächsten Circle im Lernprozess ändern/verbessern?"
)
),
),
diff --git a/server/vbv_lernwelt/assignment/graphql/types.py b/server/vbv_lernwelt/assignment/graphql/types.py
index f33cd6e8..9d33971b 100644
--- a/server/vbv_lernwelt/assignment/graphql/types.py
+++ b/server/vbv_lernwelt/assignment/graphql/types.py
@@ -15,7 +15,8 @@ class AssignmentType(DjangoObjectType):
model = Assignment
interfaces = (CoursePageInterface,)
fields = (
- "starting_position",
+ "assignment_type",
+ "intro_text",
"effort_required",
"evaluation_description",
"evaluation_document_url",
diff --git a/server/vbv_lernwelt/assignment/migrations/0001_initial.py b/server/vbv_lernwelt/assignment/migrations/0001_initial.py
index ac598681..c40d150d 100644
--- a/server/vbv_lernwelt/assignment/migrations/0001_initial.py
+++ b/server/vbv_lernwelt/assignment/migrations/0001_initial.py
@@ -7,7 +7,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
-
initial = True
dependencies = [
@@ -30,7 +29,7 @@ class Migration(migrations.Migration):
),
),
(
- "starting_position",
+ "intro_text",
wagtail.fields.RichTextField(
help_text="Erläuterung der Ausgangslage"
),
diff --git a/server/vbv_lernwelt/assignment/migrations/0004_assignment_assignment_type.py b/server/vbv_lernwelt/assignment/migrations/0004_assignment_assignment_type.py
new file mode 100644
index 00000000..aef726ae
--- /dev/null
+++ b/server/vbv_lernwelt/assignment/migrations/0004_assignment_assignment_type.py
@@ -0,0 +1,26 @@
+# Generated by Django 3.2.13 on 2023-05-19 13:43
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("assignment", "0003_initial"),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="assignment",
+ name="assignment_type",
+ field=models.CharField(
+ choices=[
+ ("CASEWORK", "CASEWORK"),
+ ("PREP_ASSIGNMENT", "PREP_ASSIGNMENT"),
+ ("REFLECTION", "REFLECTION"),
+ ],
+ default="CASEWORK",
+ max_length=50,
+ ),
+ ),
+ ]
diff --git a/server/vbv_lernwelt/assignment/models.py b/server/vbv_lernwelt/assignment/models.py
index 9faab97e..d482a175 100644
--- a/server/vbv_lernwelt/assignment/models.py
+++ b/server/vbv_lernwelt/assignment/models.py
@@ -8,7 +8,10 @@ from wagtail.admin.panels import FieldPanel
from wagtail.fields import RichTextField, StreamField
from wagtail.models import Page
-from vbv_lernwelt.core.constants import DEFAULT_RICH_TEXT_FEATURES
+from vbv_lernwelt.core.constants import (
+ DEFAULT_RICH_TEXT_FEATURES,
+ DEFAULT_RICH_TEXT_FEATURES_WITH_HEADER,
+)
from vbv_lernwelt.core.model_utils import find_available_slug
from vbv_lernwelt.core.models import User
from vbv_lernwelt.course.models import CourseBasePage
@@ -104,9 +107,19 @@ class EvaluationTaskBlock(blocks.StructBlock):
label = "Beurteilungskriterium"
+AssignmentType = Enum(
+ "AssignmentType",
+ [
+ "CASEWORK", # Geleitete Fallarbeit
+ "PREP_ASSIGNMENT", # Vorbereitungsauftrag
+ "REFLECTION", # Reflexion
+ ],
+)
+
+
class Assignment(CourseBasePage):
serialize_field_names = [
- "starting_position",
+ "intro_text",
"effort_required",
"performance_objectives",
"evaluation_description",
@@ -115,8 +128,15 @@ class Assignment(CourseBasePage):
"evaluation_tasks",
]
- starting_position = RichTextField(
- help_text="Erläuterung der Ausgangslage", features=DEFAULT_RICH_TEXT_FEATURES
+ assignment_type = models.CharField(
+ max_length=50,
+ choices=[(tag.name, tag.name) for tag in AssignmentType],
+ default=AssignmentType.CASEWORK.name,
+ )
+
+ intro_text = RichTextField(
+ help_text="Erläuterung der Ausgangslage",
+ features=DEFAULT_RICH_TEXT_FEATURES_WITH_HEADER,
)
effort_required = models.CharField(
max_length=100, help_text="Zeitaufwand als Text", blank=True
@@ -161,7 +181,8 @@ class Assignment(CourseBasePage):
)
content_panels = Page.content_panels + [
- FieldPanel("starting_position"),
+ FieldPanel("assignment_type"),
+ FieldPanel("intro_text"),
FieldPanel("effort_required"),
FieldPanel("performance_objectives"),
FieldPanel("tasks"),
diff --git a/server/vbv_lernwelt/assignment/tests/assignment_factories.py b/server/vbv_lernwelt/assignment/tests/assignment_factories.py
index 2dcfaaa0..97723d20 100644
--- a/server/vbv_lernwelt/assignment/tests/assignment_factories.py
+++ b/server/vbv_lernwelt/assignment/tests/assignment_factories.py
@@ -82,7 +82,7 @@ class PerformanceObjectiveBlockFactory(wagtail_factories.StructBlockFactory):
class AssignmentFactory(wagtail_factories.PageFactory):
title = "Auftrag"
- starting_position = replace_whitespace(
+ intro_text = replace_whitespace(
"""
Jemand aus deiner Familie oder aus deinem Freundeskreis möchte sein
Versicherungspolice überprüfen lassen. Diese Person kommt nun mit ihrer Police auf dich zu
diff --git a/server/vbv_lernwelt/assignment/tests/test_assignment_api.py b/server/vbv_lernwelt/assignment/tests/test_assignment_api.py
index e58cbc79..383ac419 100644
--- a/server/vbv_lernwelt/assignment/tests/test_assignment_api.py
+++ b/server/vbv_lernwelt/assignment/tests/test_assignment_api.py
@@ -3,8 +3,8 @@ 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.models import (
- Assignment,
AssignmentCompletion,
AssignmentCompletionAuditLog,
)
@@ -20,8 +20,7 @@ class AssignmentApiTestCase(APITestCase):
def setUp(self) -> None:
create_default_users()
create_test_course(include_vv=False)
-
- self.assignment = Assignment.objects.first()
+ self.assignment = create_uk_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/assignment/tests/test_services.py b/server/vbv_lernwelt/assignment/tests/test_services.py
index 1370fdaf..64e24d77 100644
--- a/server/vbv_lernwelt/assignment/tests/test_services.py
+++ b/server/vbv_lernwelt/assignment/tests/test_services.py
@@ -4,30 +4,32 @@ from django.test import TestCase
from django.utils import timezone
from rest_framework import serializers
-from vbv_lernwelt.assignment.creators.create_assignments import create_test_assignment
from vbv_lernwelt.assignment.models import (
+ Assignment,
AssignmentCompletion,
AssignmentCompletionAuditLog,
)
from vbv_lernwelt.assignment.services import update_assignment_completion
from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.core.models import User
-from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail
from vbv_lernwelt.core.utils import find_first
from vbv_lernwelt.course.consts import COURSE_TEST_ID
-from vbv_lernwelt.course.factories import CourseFactory, CoursePageFactory
+from vbv_lernwelt.course.creators.test_course import create_test_course
from vbv_lernwelt.course.models import CourseSession
+from vbv_lernwelt.learnpath.models import LearningContentAssignment
class UpdateAssignmentCompletionTestCase(TestCase):
def setUp(self):
create_default_users()
- create_locales_for_wagtail()
- course = CourseFactory(
- id=COURSE_TEST_ID,
+ self.course = create_test_course(include_vv=False)
+ self.assignment = (
+ self.course.coursepage.get_descendants()
+ .exact_type(Assignment)
+ .filter(assignment__assignment_type="CASEWORK")
+ .first()
+ .specific
)
- course_page = CoursePageFactory(course=course)
- self.assignment = create_test_assignment()
self.course_session = CourseSession.objects.create(
course_id=COURSE_TEST_ID,
title="Bern 2022 a",
@@ -182,19 +184,22 @@ class UpdateAssignmentCompletionTestCase(TestCase):
self.assertEqual(acl.assignment_user_email, "student")
self.assertEqual(
acl.assignment_slug,
- "versicherungsvermittler-in-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
+ "test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
)
# AssignmentCompletionAuditLog entry will remain event after deletion of foreign keys
ac.delete()
self.user.delete()
+ self.course.coursepage.get_descendants().exact_type(
+ LearningContentAssignment
+ ).delete()
self.assignment.delete()
acl = AssignmentCompletionAuditLog.objects.get(id=acl.id)
self.assertEqual(acl.created_at.date(), date.today())
self.assertEqual(acl.assignment_user_email, "student")
self.assertEqual(
acl.assignment_slug,
- "versicherungsvermittler-in-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
+ "test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
)
self.assertIsNone(acl.assignment_user)
self.assertIsNone(acl.assignment)
@@ -516,7 +521,7 @@ class UpdateAssignmentCompletionTestCase(TestCase):
self.assertEqual(acl.assignment_user_email, "student")
self.assertEqual(
acl.assignment_slug,
- "versicherungsvermittler-in-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
+ "test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
)
trainer_input = acl.completion_data[evaluation_task["id"]]
self.assertDictEqual(
@@ -530,13 +535,16 @@ class UpdateAssignmentCompletionTestCase(TestCase):
# AssignmentCompletionAuditLog entry will remain event after deletion of foreign keys
ac.delete()
self.user.delete()
+ self.course.coursepage.get_descendants().exact_type(
+ LearningContentAssignment
+ ).delete()
self.assignment.delete()
acl = AssignmentCompletionAuditLog.objects.get(id=acl.id)
self.assertEqual(acl.created_at.date(), date.today())
self.assertEqual(acl.assignment_user_email, "student")
self.assertEqual(
acl.assignment_slug,
- "versicherungsvermittler-in-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
+ "test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
)
self.assertIsNone(acl.assignment_user)
self.assertIsNone(acl.assignment)
diff --git a/server/vbv_lernwelt/course/creators/test_course.py b/server/vbv_lernwelt/course/creators/test_course.py
index fef89574..a78f63c7 100644
--- a/server/vbv_lernwelt/course/creators/test_course.py
+++ b/server/vbv_lernwelt/course/creators/test_course.py
@@ -6,9 +6,13 @@ from slugify import slugify
from wagtail.models import Site
from wagtail.rich_text import RichText
-from vbv_lernwelt.assignment.creators.create_assignments import create_test_assignment
+from vbv_lernwelt.assignment.creators.create_assignments import (
+ create_uk_casework,
+ create_uk_prep_assignment,
+)
from vbv_lernwelt.assignment.models import Assignment
from vbv_lernwelt.assignment.services import update_assignment_completion
+from vbv_lernwelt.assignment.tests.assignment_factories import AssignmentListPageFactory
from vbv_lernwelt.competence.factories import (
CompetencePageFactory,
CompetenceProfilePageFactory,
@@ -34,7 +38,7 @@ from vbv_lernwelt.learnpath.models import Circle
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
CircleFactory,
LearningContentAssignmentFactory,
- LearningContentAttendanceDayFactory,
+ LearningContentAttendanceCourseFactory,
LearningContentFeedbackFactory,
LearningContentLearningModuleFactory,
LearningContentMediaLibraryFactory,
@@ -63,7 +67,13 @@ def create_test_course(include_uk=True, include_vv=True, with_sessions=False):
create_test_competence_profile()
if include_uk:
- create_test_assignment()
+ # assignments create assignments parent page
+ course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID)
+ _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_test_learning_path(include_uk=include_uk, include_vv=include_vv)
create_test_media_library()
@@ -205,14 +215,14 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
parent=circle,
text=RichText(
"""
-Arbeitsblätter «Vorbereitungsauftrag»
-Handlungskompetenz d2: Informations-und Beratungsgespräch mit Kunden oder Lieferanten führen
-Arbeitssituation 4: Kunden beraten und dazugehörige Prozesse abwickeln
-Die Kaufleute führen Bedarfserhebungen für Kunden durch und schlagen ihnen angemessene Versicherungslösungen vor. Sie führen Beratungs-und Verkaufsgespräche und erteilen Auskünfte. Sieführen Kundenaufträge aus und behandeln Beschwerden. Sie formulieren Aufträge an relevante Anspruchsgruppen und unterstützen den Aussendient in verkaufsrelevanten Belangen.
-
-- d2.pv.ük3: Sie erläutern die Leistungen und Produkte im Versicherungsbereich. (K2)
-- d2pv.ük4: Sie erläutern die Prozesse und Abläufe im privaten Versicherungsbereich. (K2)
-
+ Arbeitsblätter «Vorbereitungsauftrag»
+ Handlungskompetenz d2: Informations-und Beratungsgespräch mit Kunden oder Lieferanten führen
+ Arbeitssituation 4: Kunden beraten und dazugehörige Prozesse abwickeln
+ Die Kaufleute führen Bedarfserhebungen für Kunden durch und schlagen ihnen angemessene Versicherungslösungen vor. Sie führen Beratungs-und Verkaufsgespräche und erteilen Auskünfte. Sieführen Kundenaufträge aus und behandeln Beschwerden. Sie formulieren Aufträge an relevante Anspruchsgruppen und unterstützen den Aussendient in verkaufsrelevanten Belangen.
+
+ - d2.pv.ük3: Sie erläutern die Leistungen und Produkte im Versicherungsbereich. (K2)
+ - d2pv.ük4: Sie erläutern die Prozesse und Abläufe im privaten Versicherungsbereich. (K2)
+
"""
),
)
@@ -225,10 +235,14 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
),
content_url=f"/course/{lp.get_course().slug}/media/category/{slugify(title)}",
)
- LearningContentPlaceholderFactory(
- title="Vorbereitungsauftrag",
+ LearningContentAssignmentFactory(
+ title="Fahrzeug - Mein erstes Auto",
+ assignment_type="PREP_ASSIGNMENT",
parent=circle,
- )
+ content_assignment=Assignment.objects.get(
+ slug__startswith="test-lehrgang-assignment-fahrzeug-mein-erstes-auto"
+ ),
+ ),
PerformanceCriteriaFactory(
parent=CompetencePage.objects.get(competence_id="X1"),
@@ -249,9 +263,9 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
title="Unterlagen für den Unterricht",
parent=circle,
)
- LearningUnitFactory(title="Präsenztag", parent=circle)
- LearningContentAttendanceDayFactory(
- title="Präsenztag Fahrzeug",
+ LearningUnitFactory(title="Präsenzkurs", parent=circle)
+ LearningContentAttendanceCourseFactory(
+ title="Präsenzkurs Fahrzeug",
parent=circle,
)
LearningUnitFactory(title="Kompetenznachweis", parent=circle)
diff --git a/server/vbv_lernwelt/course/creators/versicherungsvermittlerin.py b/server/vbv_lernwelt/course/creators/versicherungsvermittlerin.py
index a87b645f..a0e72b47 100644
--- a/server/vbv_lernwelt/course/creators/versicherungsvermittlerin.py
+++ b/server/vbv_lernwelt/course/creators/versicherungsvermittlerin.py
@@ -59,3 +59,5 @@ def create_versicherungsvermittlerin_with_categories(
)
course.slug = course_page.slug
course.save()
+
+ return course
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 081eda91..d7e15cf7 100644
--- a/server/vbv_lernwelt/course/management/commands/create_default_courses.py
+++ b/server/vbv_lernwelt/course/management/commands/create_default_courses.py
@@ -2,9 +2,14 @@ import random
import djclick as click
-from vbv_lernwelt.assignment.creators.create_assignments import create_uk_assignments
+from vbv_lernwelt.assignment.creators.create_assignments import (
+ create_uk_casework,
+ create_uk_prep_assignment,
+ create_uk_reflection,
+)
from vbv_lernwelt.assignment.models import Assignment
from vbv_lernwelt.assignment.services import update_assignment_completion
+from vbv_lernwelt.assignment.tests.assignment_factories import AssignmentListPageFactory
from vbv_lernwelt.competence.create_uk_competence_profile import (
create_uk_competence_profile,
create_uk_fr_competence_profile,
@@ -39,7 +44,7 @@ from vbv_lernwelt.learnpath.models import (
Circle,
LearningContent,
LearningContentAssignment,
- LearningContentAttendanceDay,
+ LearningContentAttendanceCourse,
)
from vbv_lernwelt.media_library.create_default_media_library import (
create_default_media_library,
@@ -145,10 +150,19 @@ def create_versicherungsvermittlerin_course():
def create_course_uk_de():
# Überbetriebliche Kurse DE
- create_versicherungsvermittlerin_with_categories(
+ course = create_versicherungsvermittlerin_with_categories(
course_id=COURSE_UK, title="Überbetriebliche Kurse"
)
- create_uk_assignments(course_id=COURSE_UK)
+
+ # assignments create assignments parent page
+ _assignment_list_page = AssignmentListPageFactory(
+ parent=course.coursepage,
+ )
+ create_uk_casework(course_id=COURSE_UK)
+ create_uk_prep_assignment(course_id=COURSE_UK)
+ create_uk_reflection(course_id=COURSE_UK)
+
+ # learning path
create_uk_learning_path(course_id=COURSE_UK)
create_uk_competence_profile(course_id=COURSE_UK)
create_default_media_library(course_id=COURSE_UK)
@@ -156,14 +170,13 @@ def create_course_uk_de():
cs = CourseSession.objects.create(
course_id=COURSE_UK,
title="Bern 2023 a",
- attendance_days=[
+ attendance_courses=[
{
- "learningContentId": LearningContentAttendanceDay.objects.get(
- slug="überbetriebliche-kurse-lp-circle-fahrzeug-lc-präsenztag-fahrzeug"
+ "learningContentId": LearningContentAttendanceCourse.objects.get(
+ slug="überbetriebliche-kurse-lp-circle-fahrzeug-lc-präsenzkurs-fahrzeug"
).id,
- "date": "2023-09-18",
- "startTime": "08:15",
- "endTime": "17:00",
+ "start": "2023-05-23T08:30:00+0200",
+ "end": "2023-05-23T17:00:00+0200",
"location": "Handelsschule KV Bern, Zimmer 123, Eigerstrasse 16, 3012 Bern",
"trainer": "Roland Grossenbacher, roland.grossenbacher@helvetia.ch",
}
@@ -175,7 +188,14 @@ def create_course_uk_de():
).id,
"submissionDeadlineDateTimeUtc": "2023-06-13T19:00:00Z",
"evaluationDeadlineDateTimeUtc": "2023-06-27T19:00:00Z",
- }
+ },
+ {
+ "learningContentId": LearningContentAssignment.objects.get(
+ slug="überbetriebliche-kurse-lp-circle-fahrzeug-lc-fahrzeug-mein-erstes-auto"
+ ).id,
+ "submissionDeadlineDateTimeUtc": "2023-06-13T19:00:00Z",
+ "evaluationDeadlineDateTimeUtc": "2023-06-27T19:00:00Z",
+ },
],
)
diff --git a/server/vbv_lernwelt/course/management/commands/create_uk_course.py b/server/vbv_lernwelt/course/management/commands/create_uk_course.py
index 7db84621..a972e92a 100644
--- a/server/vbv_lernwelt/course/management/commands/create_uk_course.py
+++ b/server/vbv_lernwelt/course/management/commands/create_uk_course.py
@@ -13,10 +13,11 @@ from vbv_lernwelt.course.models import CoursePage
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
CircleFactory,
LearningContentAssignmentFactory,
- LearningContentAttendanceDayFactory,
+ LearningContentAttendanceCourseFactory,
LearningContentFeedbackFactory,
LearningContentMediaLibraryFactory,
LearningContentPlaceholderFactory,
+ LearningContentRichTextFactory,
LearningPathFactory,
LearningSequenceFactory,
LearningUnitFactory,
@@ -230,9 +231,21 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
title="Vorbereitung", parent=circle, icon="it-icon-ls-start"
)
LearningUnitFactory(title="Vorbereitung", parent=circle)
- LearningContentPlaceholderFactory(
+ LearningContentRichTextFactory(
title="Verschaffe dir einen Überblick",
parent=circle,
+ text=RichText(
+ """
+ Arbeitsblätter «Vorbereitungsauftrag»
+ Handlungskompetenz d2: Informations-und Beratungsgespräch mit Kunden oder Lieferanten führen
+ Arbeitssituation 4: Kunden beraten und dazugehörige Prozesse abwickeln
+ Die Kaufleute führen Bedarfserhebungen für Kunden durch und schlagen ihnen angemessene Versicherungslösungen vor. Sie führen Beratungs-und Verkaufsgespräche und erteilen Auskünfte. Sieführen Kundenaufträge aus und behandeln Beschwerden. Sie formulieren Aufträge an relevante Anspruchsgruppen und unterstützen den Aussendient in verkaufsrelevanten Belangen.
+
+ - d2.pv.ük3: Sie erläutern die Leistungen und Produkte im Versicherungsbereich. (K2)
+ - d2pv.ük4: Sie erläutern die Prozesse und Abläufe im privaten Versicherungsbereich. (K2)
+
+ """
+ ),
)
LearningContentMediaLibraryFactory(
title=f"Handlungsfeld «{title}»",
@@ -243,19 +256,23 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
),
content_url=f"/course/überbetriebliche-kurse/media/category/{slugify(title)}",
)
- LearningContentPlaceholderFactory(
- title="Vorbereitungsauftrag",
+ LearningContentAssignmentFactory(
+ title="Fahrzeug - Mein erstes Auto",
+ assignment_type="PREP_ASSIGNMENT",
parent=circle,
- )
+ content_assignment=Assignment.objects.get(
+ slug__startswith="überbetriebliche-kurse-assignment-fahrzeug-mein-erstes-auto"
+ ),
+ ),
LearningSequenceFactory(title="Training", parent=circle)
LearningUnitFactory(title="Unterlagen", parent=circle)
LearningContentPlaceholderFactory(
title="Unterlagen für den Unterricht",
parent=circle,
)
- LearningUnitFactory(title="Präsenztag", parent=circle)
- LearningContentAttendanceDayFactory(
- title="Präsenztag Fahrzeug",
+ LearningUnitFactory(title="Präsenzkurs", parent=circle)
+ LearningContentAttendanceCourseFactory(
+ title="Präsenzkurs Fahrzeug",
parent=circle,
)
LearningUnitFactory(title="Kompetenznachweis", parent=circle)
@@ -265,10 +282,14 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
)
LearningSequenceFactory(title="Transfer", parent=circle, icon="it-icon-ls-end")
LearningUnitFactory(title="Transfer", parent=circle)
- LearningContentPlaceholderFactory(
- title="Reflexion",
+ LearningContentAssignmentFactory(
+ title="Reflexionsfragen Fahrzeug",
+ assignment_type="REFLECTION",
parent=circle,
- )
+ content_assignment=Assignment.objects.get(
+ slug__startswith="überbetriebliche-kurse-assignment-fahrzeug-reflexionsfragen"
+ ),
+ ),
LearningContentAssignmentFactory(
title="Überprüfen einer Motorfahrzeug-Versicherungspolice",
parent=circle,
diff --git a/server/vbv_lernwelt/course/migrations/0003_rename_attendance_days_coursesession_attendance_courses.py b/server/vbv_lernwelt/course/migrations/0003_rename_attendance_days_coursesession_attendance_courses.py
new file mode 100644
index 00000000..3b013fb3
--- /dev/null
+++ b/server/vbv_lernwelt/course/migrations/0003_rename_attendance_days_coursesession_attendance_courses.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2.13 on 2023-05-23 12:49
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("course", "0002_initial"),
+ ]
+
+ operations = [
+ migrations.RenameField(
+ model_name="coursesession",
+ old_name="attendance_days",
+ new_name="attendance_courses",
+ ),
+ ]
diff --git a/server/vbv_lernwelt/course/models.py b/server/vbv_lernwelt/course/models.py
index b38542a0..01e5bd46 100644
--- a/server/vbv_lernwelt/course/models.py
+++ b/server/vbv_lernwelt/course/models.py
@@ -193,7 +193,7 @@ class CourseSession(models.Model):
Das anhängen kann via CourseSessionUser oder "Schulklasse (TODO)" geschehen
"""
- ATTENDANCE_DAYS_SCHEMA = {
+ ATTENDANCE_COURSES_SCHEMA = {
"type": "array",
"items": {
"type": "object",
@@ -203,7 +203,8 @@ class CourseSession(models.Model):
"title": "ID des Lerninhalts",
"required": True,
},
- "date": {"type": "string"},
+ "start": {"type": "string", "format": "datetime"},
+ "end": {"type": "string", "format": "datetime"},
"location": {"type": "string"},
"trainer": {"type": "string"},
},
@@ -219,7 +220,9 @@ class CourseSession(models.Model):
start_date = models.DateField(null=True, blank=True)
end_date = models.DateField(null=True, blank=True)
- attendance_days = JSONField(schema=ATTENDANCE_DAYS_SCHEMA, blank=True, default=list)
+ attendance_courses = JSONField(
+ schema=ATTENDANCE_COURSES_SCHEMA, blank=True, default=list
+ )
assignment_details_list = models.JSONField(default=list, blank=True)
additional_json_data = models.JSONField(default=dict, blank=True)
diff --git a/server/vbv_lernwelt/course/serializers.py b/server/vbv_lernwelt/course/serializers.py
index 787ec523..d92365fd 100644
--- a/server/vbv_lernwelt/course/serializers.py
+++ b/server/vbv_lernwelt/course/serializers.py
@@ -86,7 +86,7 @@ class CourseSessionSerializer(serializers.ModelSerializer):
"start_date",
"end_date",
"additional_json_data",
- "attendance_days",
+ "attendance_courses",
"assignment_details_list",
"learning_path_url",
"cockpit_url",
diff --git a/server/vbv_lernwelt/learnpath/migrations/0003_rename_learningcontentattendanceday_learningcontentattendancecourse.py b/server/vbv_lernwelt/learnpath/migrations/0003_rename_learningcontentattendanceday_learningcontentattendancecourse.py
new file mode 100644
index 00000000..7c0b9f61
--- /dev/null
+++ b/server/vbv_lernwelt/learnpath/migrations/0003_rename_learningcontentattendanceday_learningcontentattendancecourse.py
@@ -0,0 +1,23 @@
+# Generated by Django 3.2.13 on 2023-05-23 12:49
+
+from django.conf import settings
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("wagtailcore", "0083_workflowcontenttype"),
+ ("wagtailforms", "0005_alter_formsubmission_form_data"),
+ ("wagtailredirects", "0008_add_verbose_name_plural"),
+ ("contenttypes", "0002_remove_content_type_name"),
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ("learnpath", "0002_learningcontentrichtext_text"),
+ ]
+
+ operations = [
+ migrations.RenameModel(
+ old_name="LearningContentAttendanceDay",
+ new_name="LearningContentAttendanceCourse",
+ ),
+ ]
diff --git a/server/vbv_lernwelt/learnpath/migrations/0004_learningcontentassignment_assignment_type.py b/server/vbv_lernwelt/learnpath/migrations/0004_learningcontentassignment_assignment_type.py
new file mode 100644
index 00000000..5525b9a3
--- /dev/null
+++ b/server/vbv_lernwelt/learnpath/migrations/0004_learningcontentassignment_assignment_type.py
@@ -0,0 +1,28 @@
+# Generated by Django 3.2.13 on 2023-05-19 15:21
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ (
+ "learnpath",
+ "0003_rename_learningcontentattendanceday_learningcontentattendancecourse",
+ ),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="learningcontentassignment",
+ name="assignment_type",
+ field=models.CharField(
+ choices=[
+ ("CASEWORK", "CASEWORK"),
+ ("PREP_ASSIGNMENT", "PREP_ASSIGNMENT"),
+ ("REFLECTION", "REFLECTION"),
+ ],
+ default="CASEWORK",
+ max_length=50,
+ ),
+ ),
+ ]
diff --git a/server/vbv_lernwelt/learnpath/models.py b/server/vbv_lernwelt/learnpath/models.py
index f35a65a2..b675dc34 100644
--- a/server/vbv_lernwelt/learnpath/models.py
+++ b/server/vbv_lernwelt/learnpath/models.py
@@ -6,6 +6,7 @@ from wagtail.admin.panels import FieldPanel, PageChooserPanel
from wagtail.fields import RichTextField
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
@@ -69,7 +70,7 @@ class Circle(CourseBasePage):
"learnpath.LearningSequence",
"learnpath.LearningUnit",
"learnpath.LearningContentAssignment",
- "learnpath.LearningContentAttendanceDay",
+ "learnpath.LearningContentAttendanceCourse",
"learnpath.LearningContentFeedback",
"learnpath.LearningContentLearningModule",
"learnpath.LearningContentMediaLibrary",
@@ -87,7 +88,7 @@ class Circle(CourseBasePage):
description = models.TextField(default="", blank=True)
- goals = RichTextField()
+ goals = RichTextField(features=DEFAULT_RICH_TEXT_FEATURES_WITH_HEADER)
content_panels = Page.content_panels + [
FieldPanel("description"),
@@ -274,7 +275,7 @@ class LearningContent(CourseBasePage):
super().save(**kwargs)
-class LearningContentAttendanceDay(LearningContent):
+class LearningContentAttendanceCourse(LearningContent):
parent_page_types = ["learnpath.Circle"]
subpage_types = []
@@ -325,6 +326,7 @@ class LearningContentRichText(LearningContent):
class LearningContentAssignment(LearningContent):
serialize_field_names = LearningContent.serialize_field_names + [
"content_assignment_id",
+ "assignment_type",
]
parent_page_types = ["learnpath.Circle"]
subpage_types = []
@@ -335,6 +337,12 @@ class LearningContentAssignment(LearningContent):
related_name="+",
)
+ assignment_type = models.CharField(
+ max_length=50,
+ choices=[(tag.name, tag.name) for tag in AssignmentType],
+ default=AssignmentType.CASEWORK.name,
+ )
+
content_panels = [
FieldPanel("title", classname="full title"),
FieldPanel("minutes"),
diff --git a/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py
index f25807ad..77dc136e 100644
--- a/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py
+++ b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py
@@ -4,7 +4,7 @@ from wagtail.rich_text import RichText
from vbv_lernwelt.learnpath.models import (
Circle,
LearningContentAssignment,
- LearningContentAttendanceDay,
+ LearningContentAttendanceCourse,
LearningContentFeedback,
LearningContentLearningModule,
LearningContentMediaLibrary,
@@ -84,19 +84,19 @@ class LearningUnitFactory(wagtail_factories.PageFactory):
model = LearningUnit
-class LearningContentAttendanceDayFactory(wagtail_factories.PageFactory):
+class LearningContentAttendanceCourseFactory(wagtail_factories.PageFactory):
title = "Platzhalter Inhalt"
- minutes = 15
+ minutes = 0
description = RichText("Platzhalter Beschreibung")
content_url = ""
class Meta:
- model = LearningContentAttendanceDay
+ model = LearningContentAttendanceCourse
class LearningContentVideoFactory(wagtail_factories.PageFactory):
title = "Platzhalter Video"
- minutes = 15
+ minutes = 0
content_url = "https://www.youtube.com/embed/qhPIfxS2hvI"
description = RichText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
@@ -106,7 +106,7 @@ class LearningContentVideoFactory(wagtail_factories.PageFactory):
class LearningContentPlaceholderFactory(wagtail_factories.PageFactory):
title = "Platzhalter Video"
- minutes = 15
+ minutes = 0
content_url = ""
description = RichText("Platzhalter")
@@ -116,7 +116,7 @@ class LearningContentPlaceholderFactory(wagtail_factories.PageFactory):
class LearningContentFeedbackFactory(wagtail_factories.PageFactory):
title = "Feedback"
- minutes = 15
+ minutes = 0
content_url = ""
description = RichText("")
@@ -126,7 +126,7 @@ class LearningContentFeedbackFactory(wagtail_factories.PageFactory):
class LearningContentLearningModuleFactory(wagtail_factories.PageFactory):
title = "Beispiel Lernmodul"
- minutes = 15
+ minutes = 0
content_url = ""
description = RichText("")
@@ -136,7 +136,7 @@ class LearningContentLearningModuleFactory(wagtail_factories.PageFactory):
class LearningContentMediaLibraryFactory(wagtail_factories.PageFactory):
title = "Mediathek"
- minutes = 15
+ minutes = 0
content_url = ""
description = RichText("")
@@ -146,7 +146,7 @@ class LearningContentMediaLibraryFactory(wagtail_factories.PageFactory):
class LearningContentTestFactory(wagtail_factories.PageFactory):
title = "Fachcheck"
- minutes = 15
+ minutes = 0
content_url = ""
description = RichText("")
@@ -156,7 +156,7 @@ class LearningContentTestFactory(wagtail_factories.PageFactory):
class LearningContentRichTextFactory(wagtail_factories.PageFactory):
title = "Rich Text"
- minutes = 15
+ minutes = 0
content_url = ""
description = RichText("")
@@ -166,7 +166,7 @@ class LearningContentRichTextFactory(wagtail_factories.PageFactory):
class LearningContentAssignmentFactory(wagtail_factories.PageFactory):
title = "Geleitete Fallarbeit"
- minutes = 15
+ minutes = 0
content_url = ""
description = RichText("")
diff --git a/server/vbv_lernwelt/sso/views.py b/server/vbv_lernwelt/sso/views.py
index 7bbed403..cc4ba587 100644
--- a/server/vbv_lernwelt/sso/views.py
+++ b/server/vbv_lernwelt/sso/views.py
@@ -17,7 +17,8 @@ OAUTH_FAIL_REDIRECT = "login-error"
def login(request):
oauth_client = oauth.create_client(settings.OAUTH["client_name"])
redirect_uri = settings.OAUTH["local_redirect_uri"]
- return oauth_client.authorize_redirect(request, redirect_uri)
+ language = request.GET.get("lang", "de")
+ return oauth_client.authorize_redirect(request, redirect_uri, lang=language)
def authorize(request):