Skip to content
Snippets Groups Projects
Commit f01981b9 authored by Felix Blanke's avatar Felix Blanke Committed by Nadja Geisler
Browse files

Set initial availability for full event

parent e4c6564a
Branches
No related tags found
1 merge request!271Feature: AK Preference poll
......@@ -12,7 +12,7 @@ from django.utils.dateparse import parse_datetime
from django.utils.translation import gettext_lazy as _
from AKModel.availability.models import Availability
from AKModel.availability.serializers import AvailabilitySerializer
from AKModel.availability.serializers import AvailabilitySerializer, AvailabilityFormSerializer
from AKModel.models import Event
......@@ -41,22 +41,11 @@ class AvailabilitiesFormMixin(forms.Form):
:rtype: str
"""
if instance:
availabilities = AvailabilitySerializer(
instance.availabilities.all(), many=True
).data
availabilities = instance.availabilities.all()
else:
availabilities = []
return json.dumps(
{
'availabilities': availabilities,
'event': {
# 'timezone': event.timezone,
'date_from': str(event.start),
'date_to': str(event.end),
},
}
)
return json.dumps(AvailabilityFormSerializer((availabilities, event)).data)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
......@@ -65,6 +54,7 @@ class AvailabilitiesFormMixin(forms.Form):
if isinstance(self.event, int):
self.event = Event.objects.get(pk=self.event)
initial = kwargs.pop('initial', {})
if 'availabilities' not in initial:
initial['availabilities'] = self._serialize(self.event, kwargs.get('instance'))
if not isinstance(self, forms.BaseModelForm):
kwargs.pop('instance')
......
......@@ -4,9 +4,10 @@
# Documentation was mainly added by us, other changes are marked in the code
from django.utils import timezone
from rest_framework.fields import SerializerMethodField
from rest_framework.serializers import ModelSerializer
from rest_framework.serializers import BaseSerializer, ModelSerializer
from AKModel.availability.models import Availability
from AKModel.models import Event
class AvailabilitySerializer(ModelSerializer):
......@@ -44,3 +45,28 @@ class AvailabilitySerializer(ModelSerializer):
class Meta:
model = Availability
fields = ('id', 'start', 'end', 'allDay')
class AvailabilityFormSerializer(BaseSerializer):
"""Serializer to configure an availability form."""
def create(self, validated_data):
raise ValueError("`AvailabilityFormSerializer` is read-only.")
def to_internal_value(self, data):
raise ValueError("`AvailabilityFormSerializer` is read-only.")
def update(self, instance, validated_data):
raise ValueError("`AvailabilityFormSerializer` is read-only.")
def to_representation(self, instance: tuple[Availability, Event], **kwargs):
availabilities, event = instance
return {
'availabilities': AvailabilitySerializer(availabilities, many=True).data,
'event': {
# 'timezone': event.timezone,
'date_from': str(event.start),
'date_to': str(event.end),
},
}
import json
from django import forms
from django.contrib import messages
from django.contrib.messages.views import SuccessMessageMixin
......@@ -6,6 +8,8 @@ from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _
from django.views.generic import FormView
from AKModel.availability.models import Availability
from AKModel.availability.serializers import AvailabilityFormSerializer
from AKModel.metaviews.admin import EventSlugMixin
from AKModel.models import AK, AKPreference
......@@ -79,8 +83,18 @@ class PreferencePollCreateView(EventSlugMixin, SuccessMessageMixin, FormView):
)
form.ak_obj = init["ak"]
availabilities_serialization = AvailabilityFormSerializer(
(
[Availability.with_event_length(event=self.event)],
self.event,
)
)
context["participant_form"] = EventParticipantForm(
initial={"event": self.event}
initial={
"event": self.event,
"availabilities": json.dumps(availabilities_serialization.data),
}
)
return context
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment