add request status change api
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
from django.shortcuts import get_object_or_404
|
||||
|
||||
from django_core.mixins import BaseViewSetMixin
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
from drf_spectacular.utils import extend_schema
|
||||
@@ -5,6 +7,9 @@ from rest_framework.filters import OrderingFilter, SearchFilter
|
||||
from rest_framework.pagination import PageNumberPagination
|
||||
from rest_framework.permissions import AllowAny, IsAuthenticated
|
||||
from rest_framework.viewsets import ModelViewSet
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework import status
|
||||
|
||||
from core.apps.evaluation.filters.request import EvaluationrequestFilter
|
||||
from core.apps.evaluation.models import EvaluationrequestModel
|
||||
@@ -13,6 +18,7 @@ from core.apps.evaluation.serializers.request import (
|
||||
ListEvaluationrequestSerializer,
|
||||
RetrieveEvaluationrequestSerializer,
|
||||
)
|
||||
from core.apps.evaluation.choices.request import RequestStatus
|
||||
|
||||
|
||||
# class RequestPagination(PageNumberPagination):
|
||||
@@ -128,3 +134,41 @@ class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet):
|
||||
|
||||
def serializer_context(self):
|
||||
return self.serializer_class(context={"request": self.request})
|
||||
|
||||
|
||||
@extend_schema(tags=["EvaluationRequest"])
|
||||
class EvaluationStatusChange(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def post(self, request, pk):
|
||||
if request.user.role not in [RoleChoice.ADMIN, RoleChoice.SUPERUSER]:
|
||||
return Response({'detail': 'Forbidden'}, status=status.HTTP_403_FORBIDDEN)
|
||||
|
||||
evaluation = get_object_or_404(EvaluationrequestModel, pk=pk)
|
||||
|
||||
|
||||
status_value = request.data.get('status')
|
||||
if not status_value:
|
||||
return Response({'detail': 'Status is required'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
valid_statuses = [
|
||||
RequestStatus.PENDING,
|
||||
RequestStatus.IN_PROGRESS,
|
||||
RequestStatus.COMPLETED,
|
||||
RequestStatus.REJECTED
|
||||
]
|
||||
|
||||
if status_value not in valid_statuses:
|
||||
return Response(
|
||||
{'detail': f'Invalid status. Must be one of: {valid_statuses}'},
|
||||
status=status.HTTP_400_BAD_REQUEST
|
||||
)
|
||||
|
||||
evaluation.status = status_value
|
||||
evaluation.save()
|
||||
|
||||
return Response({
|
||||
'success': True,
|
||||
'status': evaluation.status,
|
||||
'id': evaluation.pk
|
||||
})
|
||||
Reference in New Issue
Block a user