def reject(self, request, pk=None): approval_request = self.get_object() if not request.data.get("comment"): return Response({"comment": "This field is required."}, status=status.HTTP_400_BAD_REQUEST) try: approval_request.reject(approver=request.user, comment=request.data.get("comment")) except ApprovalRequest.NotActionable: return Response( { "error": "This approval request has already been approved or rejected." }, status=status.HTTP_400_BAD_REQUEST, ) except ApprovalRequest.CannotActOnOwnRequest: return Response( {"error": "You cannot reject your own approval request."}, status=status.HTTP_403_FORBIDDEN, ) return Response(ApprovalRequestSerializer(approval_request).data)
def request_approval(self, request, pk=None): revision = self.get_object() if revision.approval_status is not None: return Response({'error': 'This revision already has an approval request.'}, status=status.HTTP_400_BAD_REQUEST) approval_request = revision.request_approval(creator=request.user) return Response(ApprovalRequestSerializer(approval_request).data, status=status.HTTP_201_CREATED)
def approve(self, request, pk=None): approval_request = self.get_object() if not request.data.get('comment'): return Response({'comment': 'This field is required.'}, status=status.HTTP_400_BAD_REQUEST) try: approval_request.approve(approver=request.user, comment=request.data.get('comment')) except ApprovalRequest.NotActionable: return Response( {'error': 'This approval request has already been approved or rejected.'}, status=status.HTTP_400_BAD_REQUEST) except ApprovalRequest.CannotActOnOwnRequest: return Response( {'error': 'You cannot approve your own approval request.'}, status=status.HTTP_403_FORBIDDEN) return Response(ApprovalRequestSerializer(approval_request).data)