Merge pull request 'add request status change api' (#87) from shaxob into main
All checks were successful
Deploy to Production / build-and-deploy (push) Successful in 1m57s

Reviewed-on: #87
Reviewed-by: xoliqberdiyev <behruz@felixits.uz>
This commit is contained in:
2026-04-22 09:16:19 +00:00
2 changed files with 47 additions and 0 deletions

View File

@@ -28,6 +28,7 @@ from .views import (
AutoEvaluationRemoveAppraisersView,
DidoxCompanyInfoAPIView,
TechPassportAPIView,
EvaluationStatusChange,
)
router = DefaultRouter()
@@ -71,4 +72,6 @@ urlpatterns = [
TechPassportAPIView.as_view(),
name="tech-passport"
),
path("evaluation-request/<int:pk>/change-status/", EvaluationStatusChange.as_view(),
name="evaluation-change-status"),
]

View File

@@ -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
})