Skip to content

Commit bb24276

Browse files
josefinearntsenJosefine ArntsenMadsNyl
authored
Feat(submissions)/deletion of form submission (#951)
* Update the Submission model with a destroy method() * Update the Submission model with imports * Created an endpoint in the view * Update submissions * Updated serializer and view for deleting a submission with reason * Removed unsued import of mail * Added missing imports * Fixed format in files --------- Co-authored-by: Josefine Arntsen <[email protected]> Co-authored-by: Mads Nylund <[email protected]>
1 parent 9f681bb commit bb24276

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

app/forms/serializers/submission.py

+14
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,17 @@ class SubmissionGDPRSerializer(SubmissionInRegistrationSerializer):
8989
class Meta:
9090
model = SubmissionInRegistrationSerializer.Meta.model
9191
fields = SubmissionInRegistrationSerializer.Meta.fields
92+
93+
94+
class SubmissionDestroySerializer(serializers.Serializer):
95+
reason = serializers.CharField(required=True, allow_blank=False)
96+
97+
class Meta:
98+
fields = ["reason"]
99+
100+
def validate_reason(self, value):
101+
if not value.strip():
102+
raise serializers.ValidationError(
103+
"Grunnen kan ikke være tom eller kun inneholde mellomrom."
104+
)
105+
return value

app/forms/views/submission.py

+30-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from django.conf import settings
2+
from django.core.mail import send_mail
13
from rest_framework import status
24
from rest_framework.decorators import action
35
from rest_framework.generics import get_object_or_404
@@ -13,7 +15,10 @@
1315
from app.forms.enums import NativeEventFormType as EventFormType
1416
from app.forms.mixins import APIFormErrorsMixin
1517
from app.forms.models.forms import EventForm, Form, Submission
16-
from app.forms.serializers.submission import SubmissionSerializer
18+
from app.forms.serializers.submission import (
19+
SubmissionDestroySerializer,
20+
SubmissionSerializer,
21+
)
1722

1823

1924
class SubmissionViewSet(APIFormErrorsMixin, BaseViewSet):
@@ -71,3 +76,27 @@ def create(self, request, *args, **kwargs):
7176
def download(self, _request, *_args, **_kwargs):
7277
"""To return the response as csv, include header 'Accept: text/csv."""
7378
return SubmissionsCsvWriter(self.get_queryset()).write_csv()
79+
80+
@action(detail=True, methods=["delete"])
81+
def destroy_with_reason(self, request, *args, **kwargs):
82+
submission = self.get_object()
83+
serializer = SubmissionDestroySerializer(data=request.data)
84+
85+
if not serializer.is_valid():
86+
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
87+
88+
reason = serializer.validated_data.get("reason", "Ingen grunn oppgitt.")
89+
90+
send_mail(
91+
subject="Ditt svar på spørreskjemaet har blitt slettet",
92+
message=f"Ditt svar på spørreskjemaet {submission.form.title} har blitt slettet av en administrator. Grunnen er: {reason}",
93+
from_email=settings.DEFAULT_FROM_EMAIL,
94+
recipient_list=[submission.user.email],
95+
)
96+
97+
submission.delete()
98+
99+
return Response(
100+
{"detail": "Skjemaet er slettet og brukeren er varslet."},
101+
status=status.HTTP_200_OK,
102+
)

0 commit comments

Comments
 (0)