From 6884a49bc4349fb2c3ff9866b2e701bca64a6788 Mon Sep 17 00:00:00 2001
From: Felix Blanke <info@fblanke.de>
Date: Mon, 27 May 2024 05:14:56 +0200
Subject: [PATCH] Fix migration erros

---
 AKModel/models.py   | 52 +++++++++++++++++++++++++++++++--------------
 AKModel/views/ak.py |  4 +---
 2 files changed, 37 insertions(+), 19 deletions(-)

diff --git a/AKModel/models.py b/AKModel/models.py
index c4c6f804..7049fca3 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -297,22 +297,6 @@ class AKOwner(models.Model):
         """
         return AKOwner.objects.get(event=event, slug=slug)
 
-    def as_json(self) -> str:
-        data = {
-            "id": self.pk,
-            "info": {
-                "name": self.name,
-            },
-            "capacity": self.capacity,
-            "fulfilled_room_constraints": [constraint.name
-                                           for constraint in self.properties.all()],
-            "time_constraints": [f"availability-room-{self.pk}"]
-        }
-
-        return json.dumps(data)
-
-
-
 
 class AKCategory(models.Model):
     """ An AKCategory describes the characteristics of an AK, e.g. content vs. recreational.
@@ -590,6 +574,20 @@ class Room(models.Model):
     def __str__(self):
         return self.title
 
+    def as_json(self) -> str:
+        data = {
+            "id": self.pk,
+            "info": {
+                "name": self.name,
+            },
+            "capacity": self.capacity,
+            "fulfilled_room_constraints": [constraint.name
+                                           for constraint in self.properties.all()],
+            "time_constraints": [f"availability-room-{self.pk}"]
+        }
+
+        return json.dumps(data)
+
 
 class AKSlot(models.Model):
     """ An AK Mapping matches an AK to a room during a certain time.
@@ -685,6 +683,28 @@ class AKSlot(models.Model):
             self.duration = min(self.duration, event_duration_hours)
         super().save(force_insert, force_update, using, update_fields)
 
+    def as_json(self) -> str:
+        data = {
+            "id": self.pk,
+            "duration": int(self.duration * self.slots_in_an_hour),
+            "properties": {},
+            "room_constraints": [constraint.name
+                                 for constraint in self.ak.requirements.all()],
+            "time_constraints": ["resolution"] if self.ak.reso else [],
+            "info": {
+                "name": self.ak.name,
+                "head": ", ".join([str(owner)
+                                   for owner in self.ak.owners.all()]),
+                "description": self.ak.description,
+                "reso": self.ak.reso,
+                },
+            }
+
+        data["time_constraints"].append(f"availability-ak-{self.pk}")
+        data["time_constraints"] += [f"availability-person-{owner.pk}"
+                                     for owner in self.ak.owners.all()]
+
+        return json.dumps(data)
 
 class AKOrgaMessage(models.Model):
     """
diff --git a/AKModel/views/ak.py b/AKModel/views/ak.py
index 547f3606..88fc6bf4 100644
--- a/AKModel/views/ak.py
+++ b/AKModel/views/ak.py
@@ -8,7 +8,7 @@ from django.views.generic import ListView, DetailView
 
 from AKModel.metaviews.admin import AdminViewMixin, FilterByEventSlugMixin, EventSlugMixin, IntermediateAdminView, \
     IntermediateAdminActionView
-from AKModel.models import AKRequirement, AKSlot, Event, AKOrgaMessage, AK
+from AKModel.models import AKRequirement, AKSlot, Event, AKOrgaMessage, AK, Room, AKOwner
 
 
 class AKRequirementOverview(AdminViewMixin, FilterByEventSlugMixin, ListView):
@@ -81,8 +81,6 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView):
                                       for person in AKOwner.objects.filter(event=self.event)
                                       for availability in person.availabilities.all()}
 
-
-
         for block in self.event.time_slots(slots_in_an_hour=SLOTS_IN_AN_HOUR):
             current_block = []
 
-- 
GitLab