diff --git a/server/vbv_lernwelt/assignment/creators/create_assignments.py b/server/vbv_lernwelt/assignment/creators/create_assignments.py index 2668002a..54851791 100644 --- a/server/vbv_lernwelt/assignment/creators/create_assignments.py +++ b/server/vbv_lernwelt/assignment/creators/create_assignments.py @@ -1,3 +1,7 @@ +from wagtail.blocks import StreamValue +from wagtail.blocks.list_block import ListBlock, ListValue +from wagtail.rich_text import RichText + from vbv_lernwelt.assignment.models import ( AssignmentListPage, AssignmentType, @@ -16,12 +20,9 @@ from vbv_lernwelt.assignment.tests.assignment_factories import ( from vbv_lernwelt.core.utils import replace_whitespace from vbv_lernwelt.course.consts import COURSE_UK from vbv_lernwelt.course.models import CoursePage -from wagtail.blocks import StreamValue -from wagtail.blocks.list_block import ListBlock, ListValue -from wagtail.rich_text import RichText -def create_uk_casework(course_id=COURSE_UK): +def create_uk_fahrzeug_casework(course_id=COURSE_UK): assignment_list_page = ( CoursePage.objects.get(course_id=course_id) .get_children() @@ -465,7 +466,7 @@ def create_uk_casework(course_id=COURSE_UK): return assignment -def create_uk_prep_assignment(course_id=COURSE_UK): +def create_uk_fahrzeug_prep_assignment(course_id=COURSE_UK): assignment_list_page = ( CoursePage.objects.get(course_id=course_id) .get_children() @@ -489,7 +490,7 @@ def create_uk_prep_assignment(course_id=COURSE_UK):
  • d2pv.ük4: Sie erläutern die Prozesse und Abläufe im privaten Versicherungsbereich. (K2)
  • - +

    Handlungskompetenz e4: Betriebsbezogene Inhalte multimedial aufbereiten
    Arbeitssituation 1: Charakteristiken der Branche und Stärken des Betriebs einbringen
    @@ -499,10 +500,10 @@ def create_uk_prep_assignment(course_id=COURSE_UK):

  • e4.pv.ük4: Sie erläutern die Grundlagen der Produkte von Privatversicherungen. (K2)
  • - +

    Ausgangslage

    - Stell dir vor, du hast die Autoprüfung abgeschlossen und nun kann es endlich losgehen mit deiner Mobilität. + Stell dir vor, du hast die Autoprüfung abgeschlossen und nun kann es endlich losgehen mit deiner Mobilität. Welches wird dein erstes eigenes Auto sein? Dieses Auto möchtest du natürlich auch schützen und richtig versichern.

    @@ -780,6 +781,160 @@ def create_uk_prep_assignment(course_id=COURSE_UK): return assignment +def create_uk_kickoff_prep_assignment(course_id=COURSE_UK): + assignment_list_page = ( + CoursePage.objects.get(course_id=course_id) + .get_children() + .exact_type(AssignmentListPage) + .first() + ) + + assignment = AssignmentFactory( + parent=assignment_list_page, + assignment_type=AssignmentType.PREP_ASSIGNMENT.name, + title="Kickoff - Versicherungswirtschaft", + effort_required="ca. 2 Stunden", + intro_text=replace_whitespace( + """ +

    Handlungskompetenzen, Arbeitssituationen & Leistungsziele

    +

    + Handlungskompetenz d2: Informations- und Beratungsgespräch mit Kunden oder Lieferanten führen
    + Arbeitssituation 4: Kunden beraten und dazugehörige Prozesse abwickeln
    +

    +

    + +

    + Handlungskompetenz c3: Betriebliche Prozesse dokumentieren, koordinieren und umsetzen
    + Arbeitssituation 5: Anträge verarbeiten, Verträge gestalten, Produkte entwickeln und pflegen
    +

    +

    + +

    Ausgangslage

    +

    + Das Leben hat nicht nur Sonnenseiten, es birgt auch Risiken in sich. So können wir schon morgen einen + Unfall haben oder schwer erkranken. Oder ein Haus wird durch ein Hagelzug ziemlich beschädigt. Vor + solchen Risiken kann sich niemand vollständig schützen. Jedoch können wir uns gegen den finanziellen + Schaden absichern. Diese Art von Schutz bieten Versicherungen.
    + In dieser Sequenz beschäftigen wir uns damit, das eigentlich eine Versicherung ausmacht. +

    + """ + ), + performance_objectives=[], + ) + + assignment.tasks = [] + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Teilaufgabe 1: Verschaffe dir einen ersten Überblick zum Thema.", + # it is hard to create a StreamValue programmatically, we have to + # create a `StreamValue` manually. Ask Daniel and/or Ramon + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "explanation", + ExplanationBlockFactory( + text=RichText( + 'Schaue dazu das folgende Video: Wie funktioniert eine Versicherung? – Einfach erklärt ' + ) + ), + ), + ( + "user_confirmation", + ExplanationBlockFactory( + text=RichText( + "Ja, ich habe das Video angeschaut und verstanden." + ) + ), + ), + ], + ), + ), + ) + ) + + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Teilaufgabe 2: «Idee Versicherung» lesen", + # it is hard to create a StreamValue programmatically, we have to + # create a `StreamValue` manually. Ask Daniel and/or Ramon + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "explanation", + ExplanationBlockFactory( + text=RichText( + "Lese und bearbeite im Buch «Idee Versicherung» die Seiten 12 bis 30." + ) + ), + ), + ( + "user_confirmation", + ExplanationBlockFactory( + text=RichText( + "Ja, ich habe die Seiten gelesen und verstanden." + ) + ), + ), + ], + ), + ), + ) + ) + + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Teilaufgabe 3: Skizze erstellen", + # it is hard to create a StreamValue programmatically, we have to + # create a `StreamValue` manually. Ask Daniel and/or Ramon + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "explanation", + ExplanationBlockFactory( + text=RichText( + replace_whitespace( + """ +

    + Erstelle aufgrund des Gelesenen eine Skizze, welche für dich das Grundprinzip einer Versicherung darstellt. +

    +

    + Nimm diese Skizze mit in den Unterricht. +

    + """ + ) + ) + ), + ), + ( + "user_confirmation", + ExplanationBlockFactory( + text=RichText("Ja, ich habe die Skizze erstellt.") + ), + ), + ], + ), + ), + ) + ) + + assignment.save() + + return assignment + + def create_uk_reflection(course_id=COURSE_UK, circle_title="Fahrzeug"): assignment_list_page = ( CoursePage.objects.get(course_id=course_id) @@ -796,10 +951,10 @@ def create_uk_reflection(course_id=COURSE_UK, circle_title="Fahrzeug"): intro_text=replace_whitespace( """

    - Du hast in diesem Circle viele neue Inhalte und Inputs erhalten. - Nun ist es Zeit, nochmals auf dein Kompetenzprofil zu schauen. - Das Beantworten von Reflexionsfragen hilft dir den eigenen Lern- und Denkprozess sichtbar und begreifbar zu machen. - Es deckt deine persönlichen Stärken und Schwächen während der Erarbeitung auf und hilft dir, dich laufend zu verbessern. + Du hast in diesem Circle viele neue Inhalte und Inputs erhalten. + Nun ist es Zeit, nochmals auf dein Kompetenzprofil zu schauen. + Das Beantworten von Reflexionsfragen hilft dir den eigenen Lern- und Denkprozess sichtbar und begreifbar zu machen. + Es deckt deine persönlichen Stärken und Schwächen während der Erarbeitung auf und hilft dir, dich laufend zu verbessern.

    """ ), diff --git a/server/vbv_lernwelt/assignment/tests/test_assignment_api.py b/server/vbv_lernwelt/assignment/tests/test_assignment_api.py index 383ac419..86fe4edf 100644 --- a/server/vbv_lernwelt/assignment/tests/test_assignment_api.py +++ b/server/vbv_lernwelt/assignment/tests/test_assignment_api.py @@ -3,7 +3,9 @@ import json from django.utils import timezone from rest_framework.test import APITestCase -from vbv_lernwelt.assignment.creators.create_assignments import create_uk_casework +from vbv_lernwelt.assignment.creators.create_assignments import ( + create_uk_fahrzeug_casework, +) from vbv_lernwelt.assignment.models import ( AssignmentCompletion, AssignmentCompletionAuditLog, @@ -20,7 +22,7 @@ class AssignmentApiTestCase(APITestCase): def setUp(self) -> None: create_default_users() create_test_course(include_vv=False) - self.assignment = create_uk_casework(course_id=COURSE_TEST_ID) + self.assignment = create_uk_fahrzeug_casework(course_id=COURSE_TEST_ID) self.assignment_subtasks = self.assignment.filter_user_subtasks() self.cs = CourseSession.objects.create( diff --git a/server/vbv_lernwelt/course/creators/test_course.py b/server/vbv_lernwelt/course/creators/test_course.py index a78f63c7..709c18c2 100644 --- a/server/vbv_lernwelt/course/creators/test_course.py +++ b/server/vbv_lernwelt/course/creators/test_course.py @@ -7,8 +7,8 @@ from wagtail.models import Site from wagtail.rich_text import RichText from vbv_lernwelt.assignment.creators.create_assignments import ( - create_uk_casework, - create_uk_prep_assignment, + create_uk_fahrzeug_casework, + create_uk_fahrzeug_prep_assignment, ) from vbv_lernwelt.assignment.models import Assignment from vbv_lernwelt.assignment.services import update_assignment_completion @@ -72,8 +72,8 @@ def create_test_course(include_uk=True, include_vv=True, with_sessions=False): _assignment_list_page = AssignmentListPageFactory( parent=course_page, ) - create_uk_casework(course_id=COURSE_TEST_ID) - create_uk_prep_assignment(course_id=COURSE_TEST_ID) + create_uk_fahrzeug_casework(course_id=COURSE_TEST_ID) + create_uk_fahrzeug_prep_assignment(course_id=COURSE_TEST_ID) create_test_learning_path(include_uk=include_uk, include_vv=include_vv) create_test_media_library() diff --git a/server/vbv_lernwelt/course/creators/uk_course.py b/server/vbv_lernwelt/course/creators/uk_course.py index 3cc0c495..b5e478c0 100644 --- a/server/vbv_lernwelt/course/creators/uk_course.py +++ b/server/vbv_lernwelt/course/creators/uk_course.py @@ -24,6 +24,9 @@ from vbv_lernwelt.learnpath.tests.learning_path_factories import ( LearningUnitFactory, TopicFactory, ) +from vbv_lernwelt.media_library.tests.media_library_factories import ( + LearnMediaBlockFactory, +) def create_uk_learning_path(course_id=COURSE_UK, user=None, skip_locales=True): @@ -230,20 +233,56 @@ In diesem Circle erfährst du wie die überbetrieblichen Kurse aufgebaut sind. Z title=f"Allgemeines zu Versicherungen", parent=circle, description=RichText( - f"

    In der Mediathek unter dem Handlungsfeld «{title}» findest du alle relevanten Ressourcen für deine Fachkompetenzen.

    " + f"

    In der Mediathek unter «Allgemeines zu Versicherungen» findest du alle relevanten Ressourcen für deine Fachkompetenzen.

    " f"

    Wir empfehlen dir vor der Absolvierung der weiteren Lerneinheiten dich in die Thematik einzulesen.

    " ), - content_url=f"/course/überbetriebliche-kurse/media/category/{slugify(title)}", + content_url=f"/course/überbetriebliche-kurse/media", ) - LearningContentPlaceholderFactory( - title="Vorbereitungsauftrag", + LearningContentAssignmentFactory( + title="Versicherungswirtschaft", + assignment_type="PREP_ASSIGNMENT", parent=circle, - ) + content_assignment=Assignment.objects.get( + slug__startswith=f"überbetriebliche-kurse-assignment-kickoff-versicherungswirtschaft" + ), + ), LearningSequenceFactory(title="Training", parent=circle) LearningUnitFactory(title="Unterlagen", parent=circle) - LearningContentPlaceholderFactory( + LearningContentDocumentListFactory( title="Unterlagen für den Unterricht", parent=circle, + documents=[ + ( + "document", + LearnMediaBlockFactory( + title="Präsentation 1a", + description="", + icon_url="/static/icons/demo/icon-hf-book.png", + link_display_text="Dokument anzeigen", + url="/static/media/uk/de_üK1_KO_03b_A_Einteilungen.pdf", + ), + ), + ( + "document", + LearnMediaBlockFactory( + title="Präsentation 1b", + description="", + icon_url="/static/icons/demo/icon-hf-book.png", + link_display_text="Dokument anzeigen", + url="/static/media/uk/de_üK1_KO_03b_A_Einteilungen.pdf", + ), + ), + ( + "document", + LearnMediaBlockFactory( + title="Arbeitsblatt Einteilung der Versicherungen", + description="", + icon_url="/static/icons/demo/icon-hf-book.png", + link_display_text="Dokument anzeigen", + url="/static/media/uk/de_üK1_KO_03b_A_Einteilungen.pdf", + ), + ), + ], ) LearningUnitFactory(title="Präsenzkurs", parent=circle) LearningContentAttendanceCourseFactory( diff --git a/server/vbv_lernwelt/course/management/commands/create_default_courses.py b/server/vbv_lernwelt/course/management/commands/create_default_courses.py index ef19099e..ad294faf 100644 --- a/server/vbv_lernwelt/course/management/commands/create_default_courses.py +++ b/server/vbv_lernwelt/course/management/commands/create_default_courses.py @@ -3,9 +3,10 @@ import random import djclick as click from vbv_lernwelt.assignment.creators.create_assignments import ( - create_uk_casework, - create_uk_prep_assignment, + create_uk_fahrzeug_casework, + create_uk_fahrzeug_prep_assignment, create_uk_reflection, + create_uk_kickoff_prep_assignment, ) from vbv_lernwelt.assignment.models import Assignment from vbv_lernwelt.assignment.services import update_assignment_completion @@ -169,8 +170,9 @@ def create_course_uk_de(): _assignment_list_page = AssignmentListPageFactory( parent=course.coursepage, ) - create_uk_casework(course_id=COURSE_UK) - create_uk_prep_assignment(course_id=COURSE_UK) + create_uk_kickoff_prep_assignment(course_id=COURSE_UK) + create_uk_fahrzeug_casework(course_id=COURSE_UK) + create_uk_fahrzeug_prep_assignment(course_id=COURSE_UK) create_uk_reflection(course_id=COURSE_UK) # learning path @@ -427,8 +429,8 @@ def create_course_training_de(): _assignment_list_page = AssignmentListPageFactory( parent=course.coursepage, ) - create_uk_casework(course_id=COURSE_UK_TRAINING) - create_uk_prep_assignment(course_id=COURSE_UK_TRAINING) + create_uk_fahrzeug_casework(course_id=COURSE_UK_TRAINING) + create_uk_fahrzeug_prep_assignment(course_id=COURSE_UK_TRAINING) create_uk_reflection(course_id=COURSE_UK_TRAINING) create_uk_training_learning_path(course_id=COURSE_UK_TRAINING) diff --git a/server/vbv_lernwelt/static/media/uk/de_üK1_KO_03b_A_Einteilungen.pdf b/server/vbv_lernwelt/static/media/uk/de_üK1_KO_03b_A_Einteilungen.pdf new file mode 100644 index 00000000..989ce098 Binary files /dev/null and b/server/vbv_lernwelt/static/media/uk/de_üK1_KO_03b_A_Einteilungen.pdf differ