import wagtail_factories from django.conf import settings from django.core.management import call_command from slugify import slugify from wagtail.models import Locale, Page, Site from wagtail_localize.models import LocaleSynchronization from vbv_lernwelt.assignment.models import Assignment from vbv_lernwelt.core.admin import User from vbv_lernwelt.course.consts import COURSE_UK, COURSE_UK_FR from vbv_lernwelt.course.models import CoursePage from vbv_lernwelt.learnpath.tests.learning_path_factories import ( AssignmentBlockFactory, AttendanceDayBlockFactory, CircleFactory, FeedbackBlockFactory, LearningContentFactory, LearningPathFactory, LearningSequenceFactory, LearningUnitFactory, MediaLibraryBlockFactory, TopicFactory, ) def create_uk_learning_path(course_id=COURSE_UK, user=None, skip_locales=True): if user is None: user = User.objects.get(username="info@iterativ.ch") site = Site.objects.filter(is_default_site=True).first() if not site: site = wagtail_factories.SiteFactory(is_default_site=True) if settings.APP_ENVIRONMENT == "development": site.port = 8000 site.save() course_page = CoursePage.objects.get(course_id=course_id) lp = LearningPathFactory( title="Lernpfad", parent=course_page, ) TopicFactory(title="1. Lehrjahr", is_visible=True, parent=lp) create_uk_circle(lp, title="Kickoff") create_uk_circle(lp, title="Basis") create_uk_circle_fahrzeug(lp) create_uk_circle(lp, title="Haushalt Teil 1") create_uk_circle(lp, title="Haushalt Teil 2") TopicFactory(title="2. Lehrjahr", is_visible=True, parent=lp) create_uk_circle(lp, title="Reisen & Rechtsstreitigkeiten") create_uk_circle(lp, title="Wohneigentum") create_uk_circle(lp, title="KMU Teil 1") create_uk_circle(lp, title="KMU Teil 2") create_uk_circle(lp, title="3-Säulenkonzept") create_uk_circle(lp, title="Einkommenssicherung (Invalidität)") create_uk_circle(lp, title="Einkommenssicherung (Todesfall)") create_uk_circle(lp, title="Pensionierung (Todesfall)") TopicFactory(title="3. Lehrjahr", is_visible=True, parent=lp) create_uk_circle(lp, title="Gesundheit") create_uk_circle(lp, title="Prüfungsvorbereitung Teil 1") create_uk_circle(lp, title="Prüfungsvorbereitung Teil 2") # locales if not skip_locales: locale_de = Locale.objects.get(language_code="de-CH") locale_fr, _ = Locale.objects.get_or_create(language_code="fr-CH") LocaleSynchronization.objects.get_or_create( locale_id=locale_fr.id, sync_from_id=locale_de.id ) locale_it, _ = Locale.objects.get_or_create(language_code="it-CH") LocaleSynchronization.objects.get_or_create( locale_id=locale_it.id, sync_from_id=locale_de.id ) call_command("sync_locale_trees") # all pages belong to 'admin' by default Page.objects.update(owner=user) def create_uk_fr_learning_path(course_id=COURSE_UK_FR, user=None, skip_locales=True): if user is None: user = User.objects.get(username="info@iterativ.ch") site = Site.objects.filter(is_default_site=True).first() if not site: site = wagtail_factories.SiteFactory(is_default_site=True) if settings.APP_ENVIRONMENT == "development": site.port = 8000 site.save() course_page = CoursePage.objects.get(course_id=course_id) lp = LearningPathFactory( title="Lernpfad", parent=course_page, ) TopicFactory(title="1ère année", is_visible=True, parent=lp) create_uk_circle(lp, title="Coup d'envoi") create_uk_circle(lp, title="Base") create_uk_circle(lp, title="Véhicule") create_uk_circle(lp, title="Budget Partie 1") create_uk_circle(lp, title="Budget Partie 2") TopicFactory(title="2ème année", is_visible=True, parent=lp) create_uk_circle(lp, title="Voyages / Protection juridique") create_uk_circle(lp, title="Proprieté du logement") create_uk_circle(lp, title="PME Partie 1") create_uk_circle(lp, title="PME Partie 2") create_uk_circle(lp, title="Concept des 3") create_uk_circle(lp, title="Garantie des revenus, Partie 1") create_uk_circle(lp, title="Garantie des revenus, Partie 2") create_uk_circle(lp, title="Retraite") TopicFactory(title="3ème année", is_visible=True, parent=lp) create_uk_circle(lp, title="Santé") create_uk_circle(lp, title="Préparation à l'examen, Partie 1") create_uk_circle(lp, title="Préparation à l'examen, Partie 2") # locales if not skip_locales: locale_de = Locale.objects.get(language_code="de-CH") locale_fr, _ = Locale.objects.get_or_create(language_code="fr-CH") LocaleSynchronization.objects.get_or_create( locale_id=locale_fr.id, sync_from_id=locale_de.id ) locale_it, _ = Locale.objects.get_or_create(language_code="it-CH") LocaleSynchronization.objects.get_or_create( locale_id=locale_it.id, sync_from_id=locale_de.id ) call_command("sync_locale_trees") # all pages belong to 'admin' by default Page.objects.update(owner=user) def create_uk_circle(lp, title="Kickoff"): circle = CircleFactory( title=title, parent=lp, description=""" In diesem Circle erfährst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen, damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst. """.strip(), ) LearningSequenceFactory( title="Vorbereitung", parent=circle, icon="it-icon-ls-start" ) LearningUnitFactory(title="Vorbereitung", parent=circle) LearningContentFactory( title="Verschaffe dir einen Überblick", parent=circle, ) first_title = title.split()[0] if first_title in [ "Haushalt", "Reisen", "Wohneigentum", "KMU", "Einkommenssicherung", "Pensionierung", "Gesundheit", ]: LearningContentFactory( title=f"Mediathek {title}", parent=circle, contents=[ ( "media_library", MediaLibraryBlockFactory( # TODO: sollen die ÜKs auf die gleichen Mediatheken verlinken # wie im Verischerungsvermittler? url=f"/media/überbetriebliche-kurse-media/category/{slugify(first_title)}" ), ) ], ) else: LearningContentFactory( title="Mediathek", parent=circle, ) LearningContentFactory( title="Vorbereitungsauftrag", parent=circle, ) LearningContentFactory( title="Selbsteinschätzung", parent=circle, ) LearningSequenceFactory(title="Training", parent=circle) LearningUnitFactory(title="Unterlagen", parent=circle) LearningContentFactory( title="Unterlagen für den Unterricht", parent=circle, ) LearningUnitFactory(title="Kompetenznachweis", parent=circle) LearningContentFactory( title="Wissens- und Verständnisfragen", parent=circle, ) LearningSequenceFactory(title="Transfer", parent=circle, icon="it-icon-ls-end") LearningUnitFactory(title="Transfer", parent=circle) LearningContentFactory( title="Reflexion", parent=circle, ) LearningContentFactory( title="Feedback", parent=circle, contents=[ ( "feedback", FeedbackBlockFactory(), ) ], ) def create_uk_circle_fahrzeug(lp, title="Fahrzeug"): circle = CircleFactory( title=title, parent=lp, description=""" In diesem Circle erfährst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen, damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst. """.strip(), ) LearningSequenceFactory( title="Vorbereitung", parent=circle, icon="it-icon-ls-start" ) LearningUnitFactory(title="Vorbereitung", parent=circle) LearningContentFactory( title="Verschaffe dir einen Überblick", parent=circle, ) LearningContentFactory( title=f"Mediathek {title}", parent=circle, contents=[ ( "media_library", MediaLibraryBlockFactory( url=f"/media/überbetriebliche-kurse-media/category/{slugify(title)}" ), ) ], ) LearningContentFactory( title="Vorbereitungsauftrag", parent=circle, ) LearningSequenceFactory(title="Training", parent=circle) LearningUnitFactory(title="Unterlagen", parent=circle) LearningContentFactory( title="Unterlagen für den Unterricht", parent=circle, ) LearningUnitFactory(title="Präsenztag", parent=circle) LearningContentFactory( title="Präsenztag Fahrzeug", parent=circle, contents=[ ( "attendance_day", AttendanceDayBlockFactory(), ) ], ) LearningUnitFactory(title="Kompetenznachweis", parent=circle) LearningContentFactory( title="Wissens- und Verständnisfragen", parent=circle, ) LearningSequenceFactory(title="Transfer", parent=circle, icon="it-icon-ls-end") LearningUnitFactory(title="Transfer", parent=circle) LearningContentFactory( title="Reflexion", parent=circle, ) LearningContentFactory( title="Überprüfen einer Motorfahrzeug-Versicherungspolice", parent=circle, contents=[ ( "assignment", AssignmentBlockFactory( assignment=Assignment.objects.get( slug__startswith="überbetriebliche-kurse-assignment-überprüfen-einer-motorfahrzeugs" ) ), ) ], ) LearningContentFactory( title="Feedback", parent=circle, contents=[ ( "feedback", FeedbackBlockFactory(), ) ], )