From 74dbfa6da40366aaf498ee1ca896aae0f42f9d6f Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Thu, 26 Oct 2023 15:35:34 +0200
Subject: [PATCH] Drop period_after

---
 .../components/breaks_and_slots/Break.vue     |  7 +---
 .../components/breaks_and_slots/break.graphql |  9 ++---
 .../components/breaks_and_slots/slot.graphql  |  4 --
 .../components/lesson_raster/LessonRaster.vue |  3 +-
 .../components/lesson_raster/SlotCard.vue     |  1 -
 .../components/lesson_raster/SlotCreator.vue  |  3 +-
 .../supervision/supervision.graphql           |  1 -
 .../apps/lesrooster/frontend/messages/de.json |  2 +-
 .../apps/lesrooster/frontend/messages/en.json |  2 +-
 .../0014_remove_breakslot_period_after.py     | 17 +++++++++
 aleksis/apps/lesrooster/models.py             |  7 +---
 aleksis/apps/lesrooster/schema/break_slot.py  |  9 ++---
 aleksis/apps/lesrooster/schema/slot.py        | 37 +++++++------------
 13 files changed, 45 insertions(+), 57 deletions(-)
 create mode 100644 aleksis/apps/lesrooster/migrations/0014_remove_breakslot_period_after.py

diff --git a/aleksis/apps/lesrooster/frontend/components/breaks_and_slots/Break.vue b/aleksis/apps/lesrooster/frontend/components/breaks_and_slots/Break.vue
index fbd048ac..b1b6156e 100644
--- a/aleksis/apps/lesrooster/frontend/components/breaks_and_slots/Break.vue
+++ b/aleksis/apps/lesrooster/frontend/components/breaks_and_slots/Break.vue
@@ -27,10 +27,6 @@ export default {
           text: this.$t("lesrooster.slot.weekday"),
           value: "weekday",
         },
-        {
-          text: this.$t("lesrooster.break.period_after"),
-          value: "period",
-        },
         {
           text: this.$t("lesrooster.slot.time_start"),
           value: "timeStart",
@@ -55,7 +51,6 @@ export default {
       return {
         ...item,
         period: null,
-        periodAfter: item.period,
         weekday: this.weekdayAsInt(item.weekday),
         timeGrid: item.timeGrid.id,
       };
@@ -66,7 +61,7 @@ export default {
         id: item.id,
         name: item.name,
         weekday: this.weekdayAsInt(item.weekday),
-        periodAfter: item.period,
+        period: null,
         timeStart: item.timeStart,
         timeEnd: item.timeEnd,
         timeGrid: item.timeGrid.id,
diff --git a/aleksis/apps/lesrooster/frontend/components/breaks_and_slots/break.graphql b/aleksis/apps/lesrooster/frontend/components/breaks_and_slots/break.graphql
index 16b07ae3..63c2087d 100644
--- a/aleksis/apps/lesrooster/frontend/components/breaks_and_slots/break.graphql
+++ b/aleksis/apps/lesrooster/frontend/components/breaks_and_slots/break.graphql
@@ -16,7 +16,7 @@ query breakSlots($orderBy: [String], $filters: JSONString) {
       }
     }
     weekday
-    period: periodAfter
+    period
     timeStart
     timeEnd
     canEdit
@@ -41,7 +41,7 @@ mutation createBreakSlot($input: CreateBreakSlotInput!) {
         }
       }
       weekday
-      period: periodAfter
+      period
       timeStart
       timeEnd
       canEdit
@@ -68,8 +68,7 @@ mutation createBreakSlots($input: [BatchCreateBreakSlotInput]!) {
         }
       }
       weekday
-      period: periodAfter
-      periodAfter
+      period
       timeStart
       timeEnd
       canEdit
@@ -107,7 +106,7 @@ mutation updateBreakSlots($input: [BatchPatchBreakSlotInput]!) {
         }
       }
       weekday
-      period: periodAfter
+      period
       timeStart
       timeEnd
       canEdit
diff --git a/aleksis/apps/lesrooster/frontend/components/breaks_and_slots/slot.graphql b/aleksis/apps/lesrooster/frontend/components/breaks_and_slots/slot.graphql
index 928a17c8..269faa53 100644
--- a/aleksis/apps/lesrooster/frontend/components/breaks_and_slots/slot.graphql
+++ b/aleksis/apps/lesrooster/frontend/components/breaks_and_slots/slot.graphql
@@ -16,7 +16,6 @@ query slots($orderBy: [String], $filters: JSONString) {
     }
     weekday
     period
-    periodAfter
     timeStart
     timeEnd
     canEdit
@@ -69,7 +68,6 @@ mutation createSlots($input: [BatchCreateSlotInput]!) {
       }
       weekday
       period
-      periodAfter
       timeStart
       timeEnd
       canEdit
@@ -146,7 +144,6 @@ mutation carryOverSlots(
       }
       weekday
       period
-      periodAfter
       timeStart
       timeEnd
       canEdit
@@ -174,7 +171,6 @@ mutation copySlotsFromGrid($toTimeGrid: ID!, $fromTimeGrid: ID!) {
       }
       weekday
       period
-      periodAfter
       timeStart
       timeEnd
       canEdit
diff --git a/aleksis/apps/lesrooster/frontend/components/lesson_raster/LessonRaster.vue b/aleksis/apps/lesrooster/frontend/components/lesson_raster/LessonRaster.vue
index 967407cc..90437ee9 100644
--- a/aleksis/apps/lesrooster/frontend/components/lesson_raster/LessonRaster.vue
+++ b/aleksis/apps/lesrooster/frontend/components/lesson_raster/LessonRaster.vue
@@ -254,9 +254,10 @@ export default {
         };
       },
       result(data) {
+        console.log(data);
         this.weekdays = Array.from(
           new Set(data.data.items.map((slot) => slot.weekday))
-        );
+        ).sort();
       },
       skip() {
         return this.internalTimeGrid === null;
diff --git a/aleksis/apps/lesrooster/frontend/components/lesson_raster/SlotCard.vue b/aleksis/apps/lesrooster/frontend/components/lesson_raster/SlotCard.vue
index b204f9f4..aedbfe2a 100644
--- a/aleksis/apps/lesrooster/frontend/components/lesson_raster/SlotCard.vue
+++ b/aleksis/apps/lesrooster/frontend/components/lesson_raster/SlotCard.vue
@@ -8,7 +8,6 @@ export default defineComponent({
       id: String,
       model: String,
       period: Number,
-      periodAfter: Number,
       weekday: String,
       timeStart: String,
       timeEnd: String,
diff --git a/aleksis/apps/lesrooster/frontend/components/lesson_raster/SlotCreator.vue b/aleksis/apps/lesrooster/frontend/components/lesson_raster/SlotCreator.vue
index f63dd3bd..bbf5d06b 100644
--- a/aleksis/apps/lesrooster/frontend/components/lesson_raster/SlotCreator.vue
+++ b/aleksis/apps/lesrooster/frontend/components/lesson_raster/SlotCreator.vue
@@ -56,8 +56,7 @@ export default defineComponent({
             input: this.slots.weekdays.map((weekday) => ({
               name: "",
               timeGrid: this.timeGrid,
-              period: this.breaks ? undefined : this.slots.period,
-              periodAfter: this.breaks ? this.slots.period : undefined,
+              period: this.slots.period,
               weekday: parseInt(weekday[2]),
               timeStart: this.slots.timeStart,
               timeEnd: this.slots.timeEnd,
diff --git a/aleksis/apps/lesrooster/frontend/components/supervision/supervision.graphql b/aleksis/apps/lesrooster/frontend/components/supervision/supervision.graphql
index dd1bc470..26556dfe 100644
--- a/aleksis/apps/lesrooster/frontend/components/supervision/supervision.graphql
+++ b/aleksis/apps/lesrooster/frontend/components/supervision/supervision.graphql
@@ -32,7 +32,6 @@ fragment supervisionFields on SupervisionType {
       }
     }
     weekday
-    periodAfter
     timeStart
     timeEnd
     canEdit
diff --git a/aleksis/apps/lesrooster/frontend/messages/de.json b/aleksis/apps/lesrooster/frontend/messages/de.json
index fc40a412..7f151145 100644
--- a/aleksis/apps/lesrooster/frontend/messages/de.json
+++ b/aleksis/apps/lesrooster/frontend/messages/de.json
@@ -63,7 +63,7 @@
       "create_items_success": "Pausen erfolgreich erstellt.",
       "create_items_error": "Fehler beim Erstellen der Pausen.",
       "repr": {
-        "default": "Pause vor Stunde {periodAfter}, von {timeStart} bis {timeEnd}",
+        "default": "Pause von {timeStart} bis {timeEnd}",
         "weekday_short": "{weekday}, {timeStart} bis {timeEnd}"
       }
     },
diff --git a/aleksis/apps/lesrooster/frontend/messages/en.json b/aleksis/apps/lesrooster/frontend/messages/en.json
index a5c0c267..2a5da55f 100644
--- a/aleksis/apps/lesrooster/frontend/messages/en.json
+++ b/aleksis/apps/lesrooster/frontend/messages/en.json
@@ -63,7 +63,7 @@
       "create_items_success": "The breaks where created successfully.",
       "create_items_error": "Error creating breaks.",
       "repr": {
-        "default": "Break before period {periodAfter}, from {timeStart} to {timeEnd}",
+        "default": "Break from {timeStart} to {timeEnd}",
         "weekday_short": "{weekday}, {timeStart} to {timeEnd}"
       }
     },
diff --git a/aleksis/apps/lesrooster/migrations/0014_remove_breakslot_period_after.py b/aleksis/apps/lesrooster/migrations/0014_remove_breakslot_period_after.py
new file mode 100644
index 00000000..24fac30b
--- /dev/null
+++ b/aleksis/apps/lesrooster/migrations/0014_remove_breakslot_period_after.py
@@ -0,0 +1,17 @@
+# Generated by Django 4.2.5 on 2023-10-26 13:12
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("lesrooster", "0013_supervision_subject_supervisionsubstitution_subject"),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name="breakslot",
+            name="period_after",
+        ),
+    ]
diff --git a/aleksis/apps/lesrooster/models.py b/aleksis/apps/lesrooster/models.py
index bf6b8a15..461d5138 100644
--- a/aleksis/apps/lesrooster/models.py
+++ b/aleksis/apps/lesrooster/models.py
@@ -374,14 +374,9 @@ class Lesson(TeacherPropertiesMixin, RoomPropertiesMixin, ExtensibleModel):
 class BreakSlot(Slot):
     """A break is a time period that can supervised and in which no lessons take place."""
 
-    period_after = models.IntegerField(
-        verbose_name=_("Period after"),
-    )
-
     def __str__(self) -> str:
         return (
-            f"{self.period_after - 1}./{self.period_after}. "
-            f"({time_format(self.time_start)} - {time_format(self.time_end)})"
+            f"{time_format(self.time_start)} - {time_format(self.time_end)}"
         )
 
     class Meta:
diff --git a/aleksis/apps/lesrooster/schema/break_slot.py b/aleksis/apps/lesrooster/schema/break_slot.py
index b3401d44..fbc54e41 100644
--- a/aleksis/apps/lesrooster/schema/break_slot.py
+++ b/aleksis/apps/lesrooster/schema/break_slot.py
@@ -20,7 +20,6 @@ from ..models import BreakSlot
 from .slot import slot_filters
 
 break_filters = slot_filters.copy()
-break_filters["period_after"] = break_filters.pop("period")
 
 
 class BreakSlotType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType):
@@ -33,7 +32,7 @@ class BreakSlotType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType):
             "time_grid",
             "name",
             "weekday",
-            "period_after",
+            "period",
             "time_start",
             "time_end",
         )
@@ -56,7 +55,7 @@ class BreakSlotCreateMutation(DjangoCreateMutation):
             "time_grid",
             "name",
             "weekday",
-            "period_after",
+            "period",
             "time_start",
             "time_end",
         )
@@ -78,7 +77,7 @@ class BreakSlotBatchCreateMutation(PermissionBatchPatchMixin, DjangoBatchCreateM
             "time_grid",
             "name",
             "weekday",
-            "period_after",
+            "period",
             "time_start",
             "time_end",
         )
@@ -102,7 +101,7 @@ class BreakSlotBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMut
             "time_grid",
             "name",
             "weekday",
-            "period_after",
+            "period",
             "time_start",
             "time_end",
         )
diff --git a/aleksis/apps/lesrooster/schema/slot.py b/aleksis/apps/lesrooster/schema/slot.py
index e4792a61..7a1f9778 100644
--- a/aleksis/apps/lesrooster/schema/slot.py
+++ b/aleksis/apps/lesrooster/schema/slot.py
@@ -34,7 +34,6 @@ slot_filters = {
 
 class SlotType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType):
     model = graphene.String(default_value="Default")
-    period_after = graphene.Int()
 
     class Meta:
         model = Slot
@@ -51,9 +50,6 @@ class SlotType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType):
     def resolve_model(root, info):
         return root.get_real_instance_class().__name__
 
-    @staticmethod
-    def resolve_period_after(root, info):
-        return getattr(root.get_real_instance(), "period_after", None)
 
 
 class SlotCreateMutation(DjangoCreateMutation):
@@ -117,33 +113,29 @@ class CarryOverSlotsMutation(graphene.Mutation):
         if only and len(only) > 0:
             slots_on_day = slots_on_day.filter(id__in=only)
 
-        periods = []
-        periods_after = []
-
         result = []
+        new_ids = []
 
         for slot in slots_on_day:
-            slot: BreakSlot | Slot
-            klass = slot.get_real_instance_class()
-
             defaults = {"name": slot.name, "time_start": slot.time_start, "time_end": slot.time_end}
 
-            if hasattr(slot, "period_after"):
-                defaults["period_after"] = slot.period_after
-                periods_after.append(slot.period_after)
-
             if slot.period is not None:
-                periods.append(slot.period)
+                new_slot = Slot.objects.non_polymorphic().update_or_create(
+                        weekday=to_day, time_grid=time_grid, period=slot.period, defaults=defaults
+                    )[0]
+                
+            else:
+                new_slot = Slot.objects.non_polymorphic().update_or_create(
+                        weekday=to_day, time_grid=time_grid, time_start=slot.time_start, time_end=slot.time_end, defaults=defaults
+                    )[0]
+
+            result.append(new_slot)
+            new_ids.append(new_slot.pk)
 
-            result.append(
-                klass.objects.update_or_create(
-                    weekday=to_day, time_grid=time_grid, period=slot.period, defaults=defaults
-                )[0]
-            )
 
         if not only or not len(only):
             objects_to_delete = Slot.objects.filter(weekday=to_day, time_grid=time_grid).exclude(
-                Q(Slot___period__in=periods) | Q(BreakSlot___period_after__in=periods_after)
+                pk__in=new_ids
             )
             objects_to_delete.delete()
 
@@ -185,9 +177,6 @@ class CopySlotsFromDifferentTimeGridMutation(graphene.Mutation):
 
             defaults = {"name": slot.name, "time_start": slot.time_start, "time_end": slot.time_end}
 
-            if hasattr(slot, "period_after"):
-                defaults["period_after"] = slot.period_after
-
             result.append(
                 klass.objects.update_or_create(
                     weekday=slot.weekday, time_grid=time_grid, period=slot.period, defaults=defaults
-- 
GitLab