Files
backend-v1/core/apps/evaluation/views/document.py
2026-04-27 16:49:07 +05:00

94 lines
3.7 KiB
Python

# django
from django.shortcuts import get_object_or_404
from django_core.mixins import BaseViewSetMixin
# swagger
from drf_spectacular.utils import extend_schema, OpenApiParameter
# rest framework
from rest_framework.exceptions import NotFound, PermissionDenied
from rest_framework.permissions import AllowAny
from rest_framework.viewsets import ReadOnlyModelViewSet, ModelViewSet
from rest_framework.parsers import FormParser, MultiPartParser
from rest_framework.decorators import action
from rest_framework.response import Response
# filters
from django_filters.rest_framework import DjangoFilterBackend
from core.apps.evaluation.models import DocumentModel, ValuationDocumentModel, AutoEvaluationModel
from core.apps.evaluation.serializers import document as serializers
@extend_schema(tags=["ValuationDocument"])
class ValuationDocumentView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = ValuationDocumentModel.objects.all()
serializer_class = serializers.ListValuationdocumentSerializer
permission_classes = [AllowAny]
action_permission_classes = {}
action_serializer_class = {
"list": serializers.ListValuationdocumentSerializer,
"retrieve": serializers.RetrieveValuationdocumentSerializer,
"create": serializers.CreateValuationdocumentSerializer,
}
@extend_schema(tags=["Document"])
class DocumentView(BaseViewSetMixin, ModelViewSet):
queryset = DocumentModel.objects.all()
serializer_class = serializers.ListDocumentSerializer
permission_classes = [AllowAny]
parser_classes = [FormParser, MultiPartParser]
filter_backends = [DjangoFilterBackend]
action_permission_classes = {}
action_serializer_class = {
"list": serializers.ListDocumentSerializer,
"retrieve": serializers.RetrieveDocumentSerializer,
"create": serializers.CreateDocumentSerializer,
}
@extend_schema(
summary="Auto evaluation documents.",
description="get auto evaluation documents.",
parameters=[
OpenApiParameter(
name="page",
type=int, description="Page number"
),
OpenApiParameter(
name="page_size",
type=int, description="Page size"
),
OpenApiParameter(
name="search",
type=str, description="Search query"
),
OpenApiParameter(
name="category_id",
type=str, description="Filter by category ID"
),
]
)
@action(methods=["GET"], detail=False, url_path=r"auto_evaluation/(?P<auto_evaluation_id>\d+)")
def auto_evaluation(self, request, auto_evaluation_id=None):
try:
search = request.query_params.get("search", "")
category_id = request.query_params.get("category_id", "")
auto_evaluation = get_object_or_404(AutoEvaluationModel, id=auto_evaluation_id)
documents = DocumentModel.objects.filter(auto_evaluation=auto_evaluation)
if search:
documents = documents.filter(title__icontains=search)
if category_id:
documents = documents.filter(category_id=category_id)
page = self.paginate_queryset(documents)
if page is not None:
serializer = serializers.ListDocumentSerializer(page, many=True, context={"request": request})
return self.get_paginated_response(serializer.data)
serializer = serializers.ListDocumentSerializer(documents, many=True, context={"request": request})
return Response(serializer.data)
except AutoEvaluationModel.DoesNotExist:
raise NotFound("Auto evaluation not found")
except Exception as e:
raise PermissionDenied(e)