From d35051c0b656a695b160aadcb740310b416f5850 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?=
 <benjamin.haettasch@fachschaft.informatik.tu-darmstadt.de>
Date: Sun, 21 Apr 2024 17:50:30 +0200
Subject: [PATCH] Restrict AKSlot duration to length of the event

This implements #212.
---
 AKModel/models.py     | 8 ++++++++
 AKSubmission/forms.py | 2 +-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/AKModel/models.py b/AKModel/models.py
index 6d484989..aa4d6703 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -600,6 +600,14 @@ class AKSlot(models.Model):
         """
         return self.start < other.end <= self.end or self.start <= other.start < self.end
 
+    def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
+        # Make sure duration is not longer than the event
+        if update_fields is None or 'duration' in update_fields:
+            event_duration = self.event.end - self.event.start
+            event_duration_hours = event_duration.days * 24 + event_duration.seconds // 3600
+            self.duration = min(self.duration, event_duration_hours)
+        super().save(force_insert, force_update, using, update_fields)
+
 
 class AKOrgaMessage(models.Model):
     """
diff --git a/AKSubmission/forms.py b/AKSubmission/forms.py
index f7187ade..bcfea280 100644
--- a/AKSubmission/forms.py
+++ b/AKSubmission/forms.py
@@ -86,7 +86,7 @@ class AKForm(AvailabilitiesFormMixin, forms.ModelForm):
             duration = float(duration.replace(",", "."))
 
         try:
-            float(duration)
+            duration = float(duration)
         except ValueError as exc:
             raise ValidationError(
                 _('"%(duration)s" is not a valid duration'),
-- 
GitLab