4
4
from django_filters .rest_framework import DjangoFilterBackend
5
5
from drf_spectacular .utils import OpenApiExample , extend_schema , extend_schema_view
6
6
from rest_framework import mixins , viewsets
7
- from rest_framework .decorators import action
8
7
from rest_framework .permissions import IsAuthenticated
9
- from rest_framework .response import Response
10
8
11
9
from ..models import (
12
10
DestructionList ,
13
11
DestructionListItem ,
14
12
DestructionListItemReview ,
15
13
DestructionListReview ,
14
+ ReviewResponse ,
16
15
)
17
16
from .filtersets import (
18
17
DestructionListFilterset ,
19
18
DestructionListItemFilterset ,
20
19
DestructionListReviewFilterset ,
21
20
DestructionListReviewItemFilterset ,
21
+ ReviewResponseFilterset ,
22
22
)
23
- from .permissions import (
24
- CanMakeRequestedChanges ,
25
- CanStartDestructionPermission ,
26
- CanUpdateDestructionList ,
27
- )
23
+ from .permissions import CanStartDestructionPermission , CanUpdateDestructionList
28
24
from .serializers import (
29
25
DestructionListAPIResponseSerializer ,
30
26
DestructionListItemReviewSerializer ,
31
27
DestructionListItemSerializer ,
32
28
DestructionListReviewSerializer ,
33
29
DestructionListSerializer ,
30
+ ReviewResponseSerializer ,
34
31
)
35
32
36
33
129
126
description = _ ("Retrieve details about a destruction list." ),
130
127
responses = {200 : DestructionListAPIResponseSerializer },
131
128
),
132
- make_requested_changes = extend_schema (
133
- tags = ["Destruction list" ],
134
- summary = _ ("Make requested changes" ),
135
- description = _ (
136
- "Update a destruction list after a reviewer has requested changes."
137
- ),
138
- ),
139
129
)
140
130
class DestructionListViewSet (
141
131
mixins .RetrieveModelMixin ,
@@ -155,8 +145,6 @@ def get_permissions(self):
155
145
permission_classes = [IsAuthenticated & CanStartDestructionPermission ]
156
146
elif self .action == "update" :
157
147
permission_classes = [IsAuthenticated & CanUpdateDestructionList ]
158
- elif self .action == "make_requested_changes" :
159
- permission_classes = [IsAuthenticated & CanMakeRequestedChanges ]
160
148
else :
161
149
permission_classes = [IsAuthenticated ]
162
150
return [permission () for permission in permission_classes ]
@@ -174,12 +162,6 @@ def create(self, request, *args, **kwargs):
174
162
def update (self , request , * args , ** kwargs ):
175
163
return super ().update (request , * args , ** kwargs )
176
164
177
- @action (detail = True , methods = ["patch" ], name = "make-requested-changes" )
178
- def make_requested_changes (self , request , * args , ** kwargs ):
179
- # Triggers the object permissions check
180
- self .get_object ()
181
- return Response ("Not implemented!" )
182
-
183
165
184
166
@extend_schema_view (
185
167
list = extend_schema (
@@ -242,3 +224,35 @@ class DestructionListItemReviewViewSet(mixins.ListModelMixin, viewsets.GenericVi
242
224
queryset = DestructionListItemReview .objects .all ()
243
225
filter_backends = (DjangoFilterBackend ,)
244
226
filterset_class = DestructionListReviewItemFilterset
227
+
228
+
229
+ @extend_schema_view (
230
+ list = extend_schema (
231
+ tags = ["Reviews" ],
232
+ summary = _ ("List review responses" ),
233
+ description = _ ("List all the responses to the reviews of a destruction list." ),
234
+ ),
235
+ create = extend_schema (
236
+ tags = ["Reviews" ],
237
+ summary = _ ("Create a review response" ),
238
+ description = _ (
239
+ "Create a response to a review. "
240
+ "You need to be the author of a destruction list for this and you need to be assigned to it. "
241
+ "The status of the destruction list must be 'changes requested'."
242
+ ),
243
+ ),
244
+ )
245
+ class ReviewResponseViewSet (
246
+ mixins .ListModelMixin , mixins .CreateModelMixin , viewsets .GenericViewSet
247
+ ):
248
+ serializer_class = ReviewResponseSerializer
249
+ queryset = ReviewResponse .objects .all ()
250
+ filter_backends = (DjangoFilterBackend ,)
251
+ filterset_class = ReviewResponseFilterset
252
+
253
+ def get_permissions (self ):
254
+ if self .action == "create" :
255
+ permission_classes = [IsAuthenticated & CanStartDestructionPermission ]
256
+ else :
257
+ permission_classes = [IsAuthenticated ]
258
+ return [permission () for permission in permission_classes ]
0 commit comments