changing code structure
This commit is contained in:
@@ -1,41 +1,33 @@
|
||||
# django
|
||||
from django.db.models.base import transaction
|
||||
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 OpenApiResponse
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from rest_framework import status
|
||||
from rest_framework.filters import OrderingFilter, SearchFilter
|
||||
from rest_framework.generics import GenericAPIView, ListAPIView
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.viewsets import ModelViewSet
|
||||
|
||||
# django core
|
||||
from django_core.mixins import BaseViewSetMixin
|
||||
|
||||
# django filters
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
|
||||
# swagger
|
||||
from drf_spectacular.utils import extend_schema
|
||||
|
||||
# rest framework
|
||||
from rest_framework import status, filters, generics, permissions, views, viewsets
|
||||
from rest_framework.response import Response
|
||||
|
||||
# core apps
|
||||
from core.apps.accounts.choices import RoleChoice
|
||||
from core.apps.evaluation.choices.request import RequestStatus
|
||||
from core.apps.evaluation.filters.request import EvaluationrequestFilter
|
||||
from core.apps.evaluation.models import EvaluationrequestModel
|
||||
from core.apps.evaluation.serializers.request import (
|
||||
CreateEvaluationrequestSerializer,
|
||||
ListEvaluationrequestSerializer,
|
||||
RetrieveEvaluationrequestSerializer,
|
||||
ArchiveEvaluationrequestSerializer,
|
||||
)
|
||||
|
||||
|
||||
# class RequestPagination(PageNumberPagination):
|
||||
# page_size = 20
|
||||
# page_size_query_param = "limit"
|
||||
# max_page_size = 100
|
||||
from core.apps.evaluation.serializers import request as serializers
|
||||
|
||||
|
||||
@extend_schema(tags=["EvaluationRequest"])
|
||||
class EvaluationrequestView(BaseViewSetMixin, ModelViewSet):
|
||||
serializer_class = ListEvaluationrequestSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
# pagination_class = RequestPagination
|
||||
|
||||
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||
class EvaluationrequestView(BaseViewSetMixin, viewsets.ModelViewSet):
|
||||
serializer_class = serializers.ListEvaluationrequestSerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
|
||||
filterset_class = EvaluationrequestFilter
|
||||
search_fields = [
|
||||
"customer_inn_number",
|
||||
@@ -70,9 +62,9 @@ class EvaluationrequestView(BaseViewSetMixin, ModelViewSet):
|
||||
|
||||
action_permission_classes = {}
|
||||
action_serializer_class = {
|
||||
"list": ListEvaluationrequestSerializer,
|
||||
"retrieve": RetrieveEvaluationrequestSerializer,
|
||||
"create": CreateEvaluationrequestSerializer,
|
||||
"list": serializers.ListEvaluationrequestSerializer,
|
||||
"retrieve": serializers.RetrieveEvaluationrequestSerializer,
|
||||
"create": serializers.CreateEvaluationrequestSerializer,
|
||||
}
|
||||
|
||||
def serializer_context(self):
|
||||
@@ -85,12 +77,10 @@ class EvaluationrequestView(BaseViewSetMixin, ModelViewSet):
|
||||
|
||||
|
||||
@extend_schema(tags=["EvaluationRequest"])
|
||||
class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet):
|
||||
serializer_class = ListEvaluationrequestSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
# pagination_class = RequestPagination
|
||||
|
||||
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||
class AdminEvaluationrequestView(BaseViewSetMixin, viewsets.ModelViewSet):
|
||||
serializer_class = serializers.ListEvaluationrequestSerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
|
||||
filterset_class = EvaluationrequestFilter
|
||||
search_fields = [
|
||||
"customer_inn_number",
|
||||
@@ -125,29 +115,29 @@ class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet):
|
||||
|
||||
action_permission_classes = {}
|
||||
action_serializer_class = {
|
||||
"list": ListEvaluationrequestSerializer,
|
||||
"retrieve": RetrieveEvaluationrequestSerializer,
|
||||
"create": CreateEvaluationrequestSerializer,
|
||||
"list": serializers.ListEvaluationrequestSerializer,
|
||||
"retrieve": serializers.RetrieveEvaluationrequestSerializer,
|
||||
"create": serializers.CreateEvaluationrequestSerializer,
|
||||
}
|
||||
|
||||
def get_queryset(self):
|
||||
return EvaluationrequestModel.objects.select_related("value_determined", "rate_goal", "property_rights",
|
||||
"form_ownership", "user").order_by("-created_at")
|
||||
return EvaluationrequestModel.objects.\
|
||||
select_related("value_determined","rate_goal","property_rights","form_ownership","user")\
|
||||
.order_by("-created_at")
|
||||
|
||||
def serializer_context(self):
|
||||
return self.serializer_class(context={"request": self.request})
|
||||
|
||||
|
||||
@extend_schema(tags=["EvaluationRequest"])
|
||||
class EvaluationStatusChange(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
class EvaluationStatusChange(views.APIView):
|
||||
permission_classes = [permissions.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)
|
||||
@@ -176,98 +166,28 @@ class EvaluationStatusChange(APIView):
|
||||
|
||||
|
||||
@extend_schema(tags=["EvaluationRequest"])
|
||||
class ArchiveEvaluationrequestView(GenericAPIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.request.method == "GET":
|
||||
return ListEvaluationrequestSerializer
|
||||
return ArchiveEvaluationrequestSerializer
|
||||
|
||||
@extend_schema(
|
||||
tags=["EvaluationRequest"],
|
||||
summary="Get archived evaluation requests list",
|
||||
description="""
|
||||
Returns only archived evaluation requests.
|
||||
|
||||
This endpoint works like evaluation-request/,
|
||||
but only records with is_archive=True are returned.
|
||||
""",
|
||||
responses={200: ListEvaluationrequestSerializer(many=True)},
|
||||
)
|
||||
def get(self, request, *args, **kwargs):
|
||||
queryset = EvaluationrequestModel.objects.filter(
|
||||
is_archive=True
|
||||
).order_by("-created_at")
|
||||
|
||||
serializer = self.get_serializer(queryset, many=True)
|
||||
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
@extend_schema(
|
||||
tags=["EvaluationRequest"],
|
||||
summary="Archive or unarchive evaluation request",
|
||||
description="""
|
||||
Update archive status for evaluation request.
|
||||
|
||||
- is_archive=true → archive
|
||||
- is_archive=false → remove from archive
|
||||
""",
|
||||
request=ArchiveEvaluationrequestSerializer,
|
||||
responses={
|
||||
200: OpenApiResponse(
|
||||
description="Archive status updated successfully"
|
||||
),
|
||||
400: OpenApiResponse(
|
||||
description="Validation error"
|
||||
),
|
||||
404: OpenApiResponse(
|
||||
description="Evaluation request not found"
|
||||
),
|
||||
},
|
||||
)
|
||||
def post(self, request, *args, **kwargs):
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
validated_data = serializer.validated_data
|
||||
|
||||
obj = get_object_or_404(
|
||||
EvaluationrequestModel,
|
||||
id=validated_data["id"]
|
||||
)
|
||||
|
||||
obj.is_archive = validated_data["is_archive"]
|
||||
obj.save(update_fields=["is_archive"])
|
||||
|
||||
return Response(
|
||||
{
|
||||
"success": True,
|
||||
"message": "Archive status updated successfully"
|
||||
},
|
||||
status=status.HTTP_200_OK
|
||||
)
|
||||
|
||||
|
||||
@extend_schema(tags=["EvaluationRequest"])
|
||||
class GetArchivedReqEvaluationListAPIView(ListAPIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
class RequestEvaluationArchivedListAPIView(generics.ListAPIView):
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
serializer_class = serializers.ListEvaluationrequestSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return EvaluationrequestModel.objects.filter(is_archived=True)
|
||||
|
||||
|
||||
@extend_schema(tags=["EvaluationRequest"])
|
||||
class ArchivedReqEvaluation(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
class RequestEvaluationArchiveAPIView(views.APIView):
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
@transaction.atomic
|
||||
def post(self, request, pk):
|
||||
req_evaluation = get_object_or_404(EvaluationrequestModel, pk=pk)
|
||||
req_evaluation.is_archived = request.data["is_archived"]
|
||||
req_evaluation.save()
|
||||
|
||||
return Response({"success": True,
|
||||
"status": req_evaluation.status,
|
||||
"id": req_evaluation.pk})
|
||||
|
||||
|
||||
return Response(
|
||||
{
|
||||
"success": True,
|
||||
"status": req_evaluation.status,
|
||||
"id": req_evaluation.pk
|
||||
},
|
||||
status=status.HTTP_200_OK
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user