94 lines
3.7 KiB
Python
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)
|