From dafa0810a062eefe19482c1965b412cddb32ddfd Mon Sep 17 00:00:00 2001
From: Felix Blanke <info@fblanke.de>
Date: Tue, 21 Jan 2025 16:16:39 +0100
Subject: [PATCH 1/5] Change rounding strategy to ceil

---
 AKModel/models.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/AKModel/models.py b/AKModel/models.py
index d30912d3..636f7a9f 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -1,5 +1,6 @@
 import itertools
 import json
+import math
 from dataclasses import dataclass
 from datetime import datetime, timedelta
 from typing import Iterable, Generator
@@ -934,10 +935,12 @@ class AKSlot(models.Model):
                 return []
             return [f"availability-person-{owner.pk}"]
 
+        ceil_offet_eps = 1e-4
+
         # self.slots_in_an_hour is set in AKJSONExportView
         data = {
             "id": str(self.pk),
-            "duration": round(self.duration * self.slots_in_an_hour),
+            "duration": math.ceil(self.duration * self.slots_in_an_hour - ceil_offet_eps),
             "properties": {},
             "room_constraints": [constraint.name
                                  for constraint in self.ak.requirements.all()],
-- 
GitLab


From 3f8f7ad79bed1d3265a90a0c7b0efbfb61a1c30d Mon Sep 17 00:00:00 2001
From: Felix Blanke <info@fblanke.de>
Date: Tue, 21 Jan 2025 16:56:41 +0100
Subject: [PATCH 2/5] change offset from float to decimal

---
 AKModel/models.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/AKModel/models.py b/AKModel/models.py
index 636f7a9f..0e995932 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -3,6 +3,7 @@ import json
 import math
 from dataclasses import dataclass
 from datetime import datetime, timedelta
+from decimal import Decimal
 from typing import Iterable, Generator
 
 from django.db import models
@@ -935,7 +936,7 @@ class AKSlot(models.Model):
                 return []
             return [f"availability-person-{owner.pk}"]
 
-        ceil_offet_eps = 1e-4
+        ceil_offet_eps = decimal.Decimal(1e-4)
 
         # self.slots_in_an_hour is set in AKJSONExportView
         data = {
-- 
GitLab


From 693fec82a0f222f59773a298c13f3bf70c4bdb77 Mon Sep 17 00:00:00 2001
From: Felix Blanke <info@fblanke.de>
Date: Tue, 21 Jan 2025 17:00:53 +0100
Subject: [PATCH 3/5] Fix import

---
 AKModel/models.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/AKModel/models.py b/AKModel/models.py
index 0e995932..f25b04de 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -1,9 +1,9 @@
+import decimal
 import itertools
 import json
 import math
 from dataclasses import dataclass
 from datetime import datetime, timedelta
-from decimal import Decimal
 from typing import Iterable, Generator
 
 from django.db import models
-- 
GitLab


From 57ac0fe7a353a074d82d1d5be58055e914a4a53b Mon Sep 17 00:00:00 2001
From: Felix Blanke <info@fblanke.de>
Date: Tue, 21 Jan 2025 19:50:18 +0100
Subject: [PATCH 4/5] Add new field to AK info block with exact duration in
 hours

---
 AKModel/models.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/AKModel/models.py b/AKModel/models.py
index f25b04de..08607e19 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -952,6 +952,7 @@ class AKSlot(models.Model):
                                    for owner in self.ak.owners.all()]),
                 "description": self.ak.description,
                 "reso": self.ak.reso,
+                "duration_in_hours": self.duration,
                 },
             }
 
-- 
GitLab


From 9301ef7a672f9bd5cf4c59ac1264658658bb6e2c Mon Sep 17 00:00:00 2001
From: Felix Blanke <info@fblanke.de>
Date: Tue, 21 Jan 2025 19:57:51 +0100
Subject: [PATCH 5/5] Convert decimal to float first

---
 AKModel/models.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/AKModel/models.py b/AKModel/models.py
index 08607e19..57e488fe 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -952,7 +952,7 @@ class AKSlot(models.Model):
                                    for owner in self.ak.owners.all()]),
                 "description": self.ak.description,
                 "reso": self.ak.reso,
-                "duration_in_hours": self.duration,
+                "duration_in_hours": float(self.duration),
                 },
             }
 
-- 
GitLab