200 lines
5.4 KiB
Python
200 lines
5.4 KiB
Python
from rest_framework import serializers
|
|
from webapp.models import *
|
|
|
|
|
|
class SavedQuestionsSerializer(serializers.ModelSerializer):
|
|
questions = serializers.JSONField()
|
|
|
|
class Meta:
|
|
model = TemplateQuestion
|
|
fields = ("id", "name", "questions")
|
|
|
|
|
|
class SignupSerializer(serializers.ModelSerializer):
|
|
signupForm_id = serializers.PrimaryKeyRelatedField(
|
|
source="signupForm", queryset=SignupForm.objects.all()
|
|
)
|
|
list_name = serializers.CharField(read_only=True)
|
|
|
|
def add_extra_fields(self, validated_data):
|
|
questions = validated_data["signupForm"].questions
|
|
name_ids = list(filter(lambda x: x["type"] == "name", questions))
|
|
email_ids = list(filter(lambda x: x["type"] == "email", questions))
|
|
|
|
# Send email to first email field in the form
|
|
if len(email_ids) > 0:
|
|
id = email_ids[0]["id"]
|
|
email_value = validated_data["answer"].get(id)
|
|
validated_data["email"] = email_value
|
|
# Combine all name fields to list_name
|
|
if len(name_ids) > 0:
|
|
# name_value = validated_data["answer"].get(name_fields[0]["id"], None)
|
|
all_names = map(lambda x: validated_data["answer"].get(x["id"]), name_ids)
|
|
validated_data["list_name"] = " ".join(all_names)
|
|
|
|
def create(self, validated_data):
|
|
self.add_extra_fields(validated_data)
|
|
return super().create(validated_data)
|
|
|
|
def update(self, instance, validated_data):
|
|
self.add_extra_fields(validated_data)
|
|
return super().update(instance, validated_data)
|
|
|
|
class Meta:
|
|
model = Signup
|
|
fields = ("id", "signupForm_id", "answer", "list_name")
|
|
extra_kwargs = {
|
|
"url": {
|
|
"view_name": "signup-detail",
|
|
}
|
|
}
|
|
|
|
|
|
class SignupFormSerializer(serializers.ModelSerializer):
|
|
signups = serializers.SlugRelatedField(
|
|
slug_field="list_name",
|
|
many=True,
|
|
read_only=True,
|
|
required=False,
|
|
)
|
|
|
|
class Meta:
|
|
model = SignupForm
|
|
fields = (
|
|
"id",
|
|
"title_fi",
|
|
"title_en",
|
|
"visible",
|
|
"isOpen",
|
|
"start_time",
|
|
"end_time",
|
|
"email_content",
|
|
"questions",
|
|
"schema",
|
|
"signups",
|
|
"quota",
|
|
)
|
|
|
|
|
|
class TagSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Tag
|
|
fields = ("id", "slug", "name_fi", "name_en", "icon")
|
|
|
|
|
|
class FeedSerializer(serializers.ModelSerializer):
|
|
tag_id = serializers.PrimaryKeyRelatedField(
|
|
many=True, source="tags", queryset=Tag.objects.all()
|
|
)
|
|
|
|
class Meta:
|
|
model = Feed
|
|
fields = (
|
|
"id",
|
|
"tags",
|
|
"tag_id",
|
|
"visible",
|
|
"image",
|
|
"title_fi",
|
|
"title_en",
|
|
"description_fi",
|
|
"description_en",
|
|
"content_fi",
|
|
"content_en",
|
|
"publish_time",
|
|
"autohide",
|
|
"autohide_enabled",
|
|
)
|
|
depth = 1
|
|
|
|
def create(self, validated_data):
|
|
tags_data = validated_data.pop("tags")
|
|
feed = Feed.objects.create(**validated_data)
|
|
for tag in tags_data:
|
|
feed.tags.add(tag)
|
|
feed.save()
|
|
return feed
|
|
|
|
|
|
class EventSerializer(serializers.ModelSerializer):
|
|
signupForm = SignupFormSerializer(
|
|
source="filtered_signup_forms",
|
|
many=True,
|
|
read_only=True,
|
|
)
|
|
|
|
signup_id = serializers.PrimaryKeyRelatedField(
|
|
queryset=SignupForm.objects.all(),
|
|
many=True,
|
|
write_only=True,
|
|
)
|
|
tag_id = serializers.PrimaryKeyRelatedField(
|
|
queryset=Tag.objects.all(),
|
|
many=True,
|
|
write_only=True,
|
|
)
|
|
|
|
class Meta:
|
|
model = Event
|
|
fields = (
|
|
"id",
|
|
"tag_id",
|
|
"tags",
|
|
"visible",
|
|
"image",
|
|
"title_fi",
|
|
"title_en",
|
|
"description_fi",
|
|
"description_en",
|
|
"content_fi",
|
|
"content_en",
|
|
"start_time",
|
|
"end_time",
|
|
"location_fi",
|
|
"location_en",
|
|
"signup_id",
|
|
"signupForm",
|
|
)
|
|
read_only_fields = ["tags", "signupForm"]
|
|
depth = 1
|
|
|
|
def create(self, validated_data):
|
|
signupForms = validated_data.pop("signup_id", [])
|
|
tags = validated_data.pop("tag_id")
|
|
event = Event.objects.create(**validated_data)
|
|
for form in signupForms:
|
|
event.signupForm.add(form)
|
|
for tag in tags:
|
|
event.tags.add(tag)
|
|
event.save()
|
|
return event
|
|
|
|
def update(self, instance, validated_data):
|
|
signupForms = validated_data.pop("signup_id", [])
|
|
tags = validated_data.pop("tag_id")
|
|
instance.signupForm.clear()
|
|
instance.tags.clear()
|
|
for form in signupForms:
|
|
instance.signupForm.add(form)
|
|
for tag in tags:
|
|
instance.tags.add(tag)
|
|
instance = super(EventSerializer, self).update(instance, validated_data)
|
|
return instance
|
|
|
|
|
|
class JobAdSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = JobAd
|
|
fields = (
|
|
"id",
|
|
"title_fi",
|
|
"title_en",
|
|
"description_fi",
|
|
"description_en",
|
|
"content_fi",
|
|
"content_en",
|
|
"visible",
|
|
"autohide",
|
|
"autohide_enabled",
|
|
)
|