|
| 1 | +from django.conf import settings |
| 2 | +from django.core.mail import send_mail |
1 | 3 | from rest_framework import status
|
2 | 4 | from rest_framework.decorators import action
|
3 | 5 | from rest_framework.generics import get_object_or_404
|
|
13 | 15 | from app.forms.enums import NativeEventFormType as EventFormType
|
14 | 16 | from app.forms.mixins import APIFormErrorsMixin
|
15 | 17 | 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 | +) |
17 | 22 |
|
18 | 23 |
|
19 | 24 | class SubmissionViewSet(APIFormErrorsMixin, BaseViewSet):
|
@@ -71,3 +76,27 @@ def create(self, request, *args, **kwargs):
|
71 | 76 | def download(self, _request, *_args, **_kwargs):
|
72 | 77 | """To return the response as csv, include header 'Accept: text/csv."""
|
73 | 78 | 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