From a2cb5722f5530a971627aaa26b3aed09c4ee1fdc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?=
 <benjamin.haettasch@fachschaft.informatik.tu-darmstadt.de>
Date: Sun, 14 Aug 2022 01:27:45 +0200
Subject: [PATCH] Automatically create availability when user doesn't specify
 them during submission

This implements #129
---
 AKModel/availability/models.py | 9 +++++++++
 AKSubmission/forms.py          | 8 ++++++++
 2 files changed, 17 insertions(+)

diff --git a/AKModel/availability/models.py b/AKModel/availability/models.py
index b44cf9bd..20a7a36a 100644
--- a/AKModel/availability/models.py
+++ b/AKModel/availability/models.py
@@ -235,6 +235,15 @@ class Availability(models.Model):
     def simplified(self):
         return f'{self.start.astimezone(self.event.timezone).strftime("%a %H:%M")}-{self.end.astimezone(self.event.timezone).strftime("%a %H:%M")}'
 
+    @classmethod
+    def with_event_length(cls, event, person=None, room=None, ak=None, ak_category=None):
+        timeframe_start = event.start  # adapt to our event model
+        # add 1 day, not 24 hours, https://stackoverflow.com/a/25427822/2486196
+        timeframe_end = event.end  # adapt to our event model
+        timeframe_end = timeframe_end + datetime.timedelta(days=1)
+        return Availability(start=timeframe_start, end=timeframe_end, event=event, person=person,
+                                    room=room, ak=ak, ak_category=ak_category)
+
     class Meta:
         verbose_name = _('Availability')
         verbose_name_plural = _('Availabilities')
diff --git a/AKSubmission/forms.py b/AKSubmission/forms.py
index d1f7e547..bbd3dcbc 100644
--- a/AKSubmission/forms.py
+++ b/AKSubmission/forms.py
@@ -6,6 +6,7 @@ from django.core.exceptions import ValidationError
 from django.utils.translation import ugettext_lazy as _
 
 from AKModel.availability.forms import AvailabilitiesFormMixin
+from AKModel.availability.models import Availability
 from AKModel.models import AK, AKOwner, AKCategory, AKRequirement, AKSlot, AKOrgaMessage, Event
 
 
@@ -133,6 +134,13 @@ class AKSubmissionForm(AKForm):
             self.initial.get('event').default_slot
         )
 
+    def clean_availabilities(self):
+        availabilities = super().clean_availabilities()
+        # If the user did not specify availabilities assume the full event duration is possible
+        if len(availabilities) == 0:
+            availabilities.append(Availability.with_event_length(event=self.cleaned_data["event"]))
+        return availabilities
+
 
 class AKEditForm(AKForm):
 
-- 
GitLab