from vbv_lernwelt.assignment.models import ( EvaluationSubTaskBlock, TaskContentStreamBlock, ) from vbv_lernwelt.assignment.tests.assignment_factories import ( AssignmentFactory, AssignmentListPageFactory, EvaluationSubTaskBlockFactory, EvaluationTaskBlockFactory, ExplanationBlockFactory, PerformanceObjectiveBlockFactory, TaskBlockFactory, UserTextInputBlockFactory, ) from vbv_lernwelt.core.utils import replace_whitespace from vbv_lernwelt.course.consts import COURSE_TEST_ID, 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, ) assignment = AssignmentFactory( parent=assignment_page, title="Überprüfen einer Motorfahrzeugs-Versicherungspolice", effort_required="ca. 5 Stunden", starting_position=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. """ ), 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( """ """ ) ), 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, ), ], ), ), ), ) assignment.tasks = [] assignment.tasks.append( ( "task", TaskBlockFactory( title="Teilaufgabe 1: Beispiel einer Versicherungspolice finden", # 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( "Bitte jemand aus deiner Familie oder deinem Freundeskreis darum, dir seine/ihre Motorfahrzeugversicherungspolice zur Verfügung zu stellen." ) ), ), ( "user_confirmation", ExplanationBlockFactory( text=RichText( "Ja, ich habe Motorfahrzeugversicherungspolice von jemandem aus meiner Familie oder meinem Freundeskreis erhalten." ) ), ), ], ), ), ) ) assignment.tasks.append( ( "task", TaskBlockFactory( title="Teilaufgabe 2: Kundensituation und Ausgangslage", content=StreamValue( TaskContentStreamBlock(), stream_data=[ ( "explanation", ExplanationBlockFactory( text=RichText( replace_whitespace( """ Erläutere die Kundensituation und die Ausgangslage. """ ) ) ), ), ("user_text_input", UserTextInputBlockFactory()), ], ), ), ) ) assignment.tasks.append( ( "task", TaskBlockFactory( title="Teilaufgabe 3: Aktuelle Versicherung", # TODO: add document upload content=StreamValue( TaskContentStreamBlock(), stream_data=[ ( "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." ) ), ), ( "user_text_input", UserTextInputBlockFactory( text=RichText( "Gibt es zusätzliche Deckungen, die du der Person empfehlen würdest? Begründe deine Empfehlung" ) ), ), ( "user_text_input", UserTextInputBlockFactory( text=RichText( "Gibt es Deckungen, die du streichen würdest? Begründe deine Empfehlung." ) ), ), ( "user_text_input", UserTextInputBlockFactory( text=RichText( "Wenn die Person gemäss deiner Einschätzung genau richtig versichert ist, argumentiere, warum dies der Fall ist." ) ), ), ], ), ), ) ) assignment.tasks.append( ( "task", TaskBlockFactory( title="Teilaufgabe 5: Reflexion", content=StreamValue( TaskContentStreamBlock(), stream_data=[ ( "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?" ) ), ), ], ), ), ) ) assignment.tasks.append( ( "task", TaskBlockFactory( title="Teilaufgabe 6: Learnings", content=StreamValue( TaskContentStreamBlock(), stream_data=[ ( "explanation", ExplanationBlockFactory( text=RichText( "Leite aus der Teilaufgabe 5 deine persönlichen Learnings ab." ) ), ), ( "user_text_input", UserTextInputBlockFactory( text=RichText( "Was würdest du beim nächsten Mal anders machen?" ) ), ), ( "user_text_input", UserTextInputBlockFactory( text=RichText( "Was hast du beim Bearbeiten des Auftrags Neues gelernt?" ) ), ), ], ), ), ) ) assignment.save() 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, ) assignment = AssignmentFactory( parent=assignment_page, title="Überprüfen einer Motorfahrzeugs-Versicherungspolice", effort_required="ca. 5 Stunden", starting_position=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. """ ), 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( """ """ ) ), 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, ), ], ), ), ), ) assignment.tasks = [] assignment.tasks.append( ( "task", TaskBlockFactory( title="Teilaufgabe 1: Beispiel einer Versicherungspolice finden", # 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( "Bitte jemand aus deiner Familie oder deinem Freundeskreis darum, dir seine/ihre Motorfahrzeugversicherungspolice zur Verfügung zu stellen." ) ), ), ( "user_confirmation", ExplanationBlockFactory( text=RichText( "Ja, ich habe Motorfahrzeugversicherungspolice von jemandem aus meiner Familie oder meinem Freundeskreis erhalten." ) ), ), ], ), ), ) ) assignment.tasks.append( ( "task", TaskBlockFactory( title="Teilaufgabe 2: Kundensituation und Ausgangslage", content=StreamValue( TaskContentStreamBlock(), stream_data=[ ( "explanation", ExplanationBlockFactory( text=RichText( replace_whitespace( """ Erläutere die Kundensituation und die Ausgangslage. """ ) ) ), ), ("user_text_input", UserTextInputBlockFactory()), ], ), ), ) ) assignment.tasks.append( ( "task", TaskBlockFactory( title="Teilaufgabe 3: Aktuelle Versicherung", # TODO: add document upload content=StreamValue( TaskContentStreamBlock(), stream_data=[ ( "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." ) ), ), ( "user_text_input", UserTextInputBlockFactory( text=RichText( "Gibt es zusätzliche Deckungen, die du der Person empfehlen würdest? Begründe deine Empfehlung" ) ), ), ( "user_text_input", UserTextInputBlockFactory( text=RichText( "Gibt es Deckungen, die du streichen würdest? Begründe deine Empfehlung." ) ), ), ( "user_text_input", UserTextInputBlockFactory( text=RichText( "Wenn die Person gemäss deiner Einschätzung genau richtig versichert ist, argumentiere, warum dies der Fall ist." ) ), ), ], ), ), ) ) assignment.tasks.append( ( "task", TaskBlockFactory( title="Teilaufgabe 5: Reflexion", content=StreamValue( TaskContentStreamBlock(), stream_data=[ ( "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?" ) ), ), ], ), ), ) ) assignment.tasks.append( ( "task", TaskBlockFactory( title="Teilaufgabe 6: Learnings", content=StreamValue( TaskContentStreamBlock(), stream_data=[ ( "explanation", ExplanationBlockFactory( text=RichText( "Leite aus der Teilaufgabe 5 deine persönlichen Learnings ab." ) ), ), ( "user_text_input", UserTextInputBlockFactory( text=RichText( "Was würdest du beim nächsten Mal anders machen?" ) ), ), ( "user_text_input", UserTextInputBlockFactory( text=RichText( "Was hast du beim Bearbeiten des Auftrags Neues gelernt?" ) ), ), ], ), ), ) ) assignment.save() return assignment