From 9237c7cb2ad17eb15bace2bd3126a0850c48f535 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Sun, 28 Jun 2020 17:00:34 +0200
Subject: [PATCH] Add missing migration for validity range

---
 .../migrations/0002_school_term_validity.py   | 247 ++++++++++++++++++
 1 file changed, 247 insertions(+)
 create mode 100644 aleksis/apps/chronos/migrations/0002_school_term_validity.py

diff --git a/aleksis/apps/chronos/migrations/0002_school_term_validity.py b/aleksis/apps/chronos/migrations/0002_school_term_validity.py
new file mode 100644
index 00000000..d43a7146
--- /dev/null
+++ b/aleksis/apps/chronos/migrations/0002_school_term_validity.py
@@ -0,0 +1,247 @@
+# Generated by Django 3.0.7 on 2020-06-27 14:00
+
+import django.contrib.postgres.fields.jsonb
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+def migrate_lesson(apps, schema_editor):
+    Lesson = apps.get_model("chronos", "Lesson")
+    ValidityRange = apps.get_model("chronos", "ValidityRange")
+    SchoolTerm = apps.get_model("core", "SchoolTerm")
+
+    db_alias = schema_editor.connection.alias
+
+    for lesson in Lesson.objects.using(db_alias).all():
+        date_start = lesson.date_start
+        date_end = lesson.date_end
+
+        try:
+            school_term = SchoolTerm.objects.using(db_alias).get(
+                date_start__lte=date_end, date_end__gte=date_start
+            )
+        except SchoolTerm.DoesNotExist:
+            school_term = SchoolTerm.objects.using(db_alias).create(
+                date_start=date_start, date_end=date_end
+            )
+
+        try:
+            validity_range = ValidityRange.objects.using(db_alias).get(
+                school_term=school_term,
+                date_start__lte=date_end,
+                date_end__gte=date_start,
+            )
+        except ValidityRange.DoesNotExist:
+            validity_range = ValidityRange.objects.using(db_alias).create(
+                date_start=date_start, date_end=date_end, school_term=school_term
+            )
+
+        lesson.validity = validity_range
+        lesson.save()
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("core", "0003_auto_20200627_1600"),
+        ("sites", "0002_alter_domain_unique"),
+        ("chronos", "0001_initial"),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name="ValidityRange",
+            fields=[
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "extended_data",
+                    django.contrib.postgres.fields.jsonb.JSONField(
+                        default=dict, editable=False
+                    ),
+                ),
+                (
+                    "name",
+                    models.CharField(blank=True, max_length=255, verbose_name="Name"),
+                ),
+                ("date_start", models.DateField(verbose_name="Start date")),
+                ("date_end", models.DateField(verbose_name="End date")),
+            ],
+            options={
+                "verbose_name": "Validity range",
+                "verbose_name_plural": "Validity ranges",
+            },
+        ),
+        migrations.AlterModelOptions(
+            name="lesson",
+            options={
+                "ordering": ["validity__date_start", "subject"],
+                "verbose_name": "Lesson",
+                "verbose_name_plural": "Lessons",
+            },
+        ),
+        migrations.AlterModelOptions(
+            name="lessonperiod",
+            options={
+                "ordering": [
+                    "lesson__validity__date_start",
+                    "period__weekday",
+                    "period__period",
+                    "lesson__subject",
+                ],
+                "verbose_name": "Lesson period",
+                "verbose_name_plural": "Lesson periods",
+            },
+        ),
+        migrations.AlterModelOptions(
+            name="lessonsubstitution",
+            options={
+                "ordering": [
+                    "lesson_period__lesson__validity__date_start",
+                    "week",
+                    "lesson_period__period__weekday",
+                    "lesson_period__period__period",
+                ],
+                "verbose_name": "Lesson substitution",
+                "verbose_name_plural": "Lesson substitutions",
+            },
+        ),
+        migrations.AlterModelManagers(name="break", managers=[],),
+        migrations.AlterModelManagers(name="exam", managers=[],),
+        migrations.AlterModelManagers(name="lesson", managers=[],),
+        migrations.AlterModelManagers(name="timeperiod", managers=[],),
+        migrations.AddField(
+            model_name="absence",
+            name="school_term",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="core.SchoolTerm",
+                verbose_name="Linked school term",
+            ),
+        ),
+        migrations.AddField(
+            model_name="break",
+            name="school_term",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="core.SchoolTerm",
+                verbose_name="Linked school term",
+            ),
+        ),
+        migrations.AddField(
+            model_name="event",
+            name="school_term",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="core.SchoolTerm",
+                verbose_name="Linked school term",
+            ),
+        ),
+        migrations.AddField(
+            model_name="exam",
+            name="school_term",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="core.SchoolTerm",
+                verbose_name="Linked school term",
+            ),
+        ),
+        migrations.AddField(
+            model_name="extralesson",
+            name="school_term",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="core.SchoolTerm",
+                verbose_name="Linked school term",
+            ),
+        ),
+        migrations.AddField(
+            model_name="validityrange",
+            name="school_term",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="validity_ranges",
+                to="core.SchoolTerm",
+                verbose_name="School term",
+            ),
+        ),
+        migrations.AddField(
+            model_name="validityrange",
+            name="site",
+            field=models.ForeignKey(
+                default=1,
+                editable=False,
+                on_delete=django.db.models.deletion.CASCADE,
+                to="sites.Site",
+            ),
+        ),
+        migrations.AddField(
+            model_name="lesson",
+            name="validity",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="chronos.ValidityRange",
+                verbose_name="Linked validity range",
+                null=True,
+                blank=True,
+            ),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name="supervision",
+            name="validity",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="chronos.ValidityRange",
+                verbose_name="Linked validity range",
+                null=True,
+                blank=True,
+            ),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name="timeperiod",
+            name="validity",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="chronos.ValidityRange",
+                verbose_name="Linked validity range",
+                null=True,
+                blank=True,
+            ),
+            preserve_default=False,
+        ),
+        migrations.AlterUniqueTogether(
+            name="validityrange", unique_together={("date_start", "date_end")},
+        ),
+        migrations.RunPython(migrate_lesson),
+        migrations.RemoveIndex(
+            model_name="lesson", name="chronos_les_date_st_5ecc62_idx",
+        ),
+        migrations.RemoveField(model_name="lesson", name="date_end",),
+        migrations.RemoveField(model_name="lesson", name="date_start",),
+    ]
-- 
GitLab