vbv/server/vbv_lernwelt/competence/migrations/0005_move_action_competence.py

131 lines
4.9 KiB
Python

# Generated by Django 3.2.20 on 2023-09-11 14:39
from django.db import migrations
from django.db.models import Q
from vbv_lernwelt.assignment.models import Assignment
from vbv_lernwelt.competence.models import (
ActionCompetence,
ActionCompetenceListPage,
CompetenceCertificate,
CompetenceCertificateList,
CompetenceNaviPage,
)
from vbv_lernwelt.course.consts import (
COURSE_TEST_ID,
COURSE_UK,
COURSE_UK_FR,
COURSE_UK_IT,
)
from vbv_lernwelt.course.creators.test_course import create_edoniq_test_assignment
from vbv_lernwelt.course.models import CoursePage
from vbv_lernwelt.learnpath.models import Circle, LearningContentEdoniqTest
def refactor_competence_wagtail_tree(apps=None, schema_editor=None):
# create `CompetenceNaviPage` for every course where there is none
for course_page in CoursePage.objects.all():
competence_navi_page = (
course_page.get_descendants().exact_type(CompetenceNaviPage).first()
)
if not competence_navi_page:
competence_navi_page = CompetenceNaviPage(
title="KompetenzNavi",
)
course_page.add_child(instance=competence_navi_page)
acl = course_page.get_descendants().exact_type(ActionCompetenceListPage).first()
acl.title = "Handlungskompetenzen"
acl.save()
acl.specific.save_revision().publish()
acl = course_page.get_descendants().exact_type(ActionCompetenceListPage).first()
acl.move(competence_navi_page, pos="last-child")
# create `CompetenceCertificateList`
competence_certificate_list = (
competence_navi_page.get_descendants()
.exact_type(CompetenceCertificateList)
.first()
)
if course_page.course.id in [
COURSE_TEST_ID,
COURSE_UK,
COURSE_UK_FR,
COURSE_UK_IT,
]:
if not competence_certificate_list:
title = "Kompetenznachweise"
if course_page.course.id == COURSE_UK_FR:
title = "Contrôles de compétences"
if course_page.course.id == COURSE_UK_IT:
title = "Controlli delle competenze"
competence_certificate_list = CompetenceCertificateList(title=title)
competence_navi_page.add_child(instance=competence_certificate_list)
title = "Kompetenznachweis 1"
if course_page.course.id == COURSE_UK_FR:
title = "Contrôle de compétences 1"
if course_page.course.id == COURSE_UK_IT:
title = "Controllo delle competenze 1"
competence_certificate = CompetenceCertificate(
title=title,
)
competence_certificate_list.add_child(instance=competence_certificate)
for casework_assignment in Assignment.objects.filter(
assignment_type="CASEWORK"
).descendant_of(course_page):
casework_assignment.competence_certificate = competence_certificate
casework_assignment.save()
title = "Wissens- und Verständnisfragen"
if course_page.course.id == COURSE_UK_FR:
title = "Questions de connaissance et de compréhension "
if course_page.course.id == COURSE_UK_IT:
title = "Domande di conoscenza e di comprensione"
edoniq_test = create_edoniq_test_assignment(
course_id=course_page.course.id,
title=title,
competence_certificate=competence_certificate,
)
circle_basis = (
Circle.objects.descendant_of(course_page)
.filter(Q(title="Basis") | Q(title="Base"))
.first()
)
if circle_basis:
for (
learning_content_edoniq
) in LearningContentEdoniqTest.objects.all().descendant_of(
circle_basis
):
learning_content_edoniq.content_assignment = edoniq_test
learning_content_edoniq.save()
for ac in ActionCompetenceListPage.objects.all():
# trigger slug update by saving
ac.save()
for competence in ActionCompetence.objects.all():
if competence.competence_id.endswith(":"):
# remove trailing colon
competence.competence_id = competence.competence_id[:-1]
competence.save()
class Migration(migrations.Migration):
dependencies = [
("competence", "0004_rename_models"),
("learnpath", "0005_alter_learningcontentedoniqtest_content_assignment"),
]
operations = [
migrations.RunPython(refactor_competence_wagtail_tree),
]