# django from django.shortcuts import get_object_or_404 # 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, generics from rest_framework.filters import OrderingFilter, SearchFilter from rest_framework.generics import ListAPIView from rest_framework.parsers import FormParser, MultiPartParser from rest_framework.permissions import AllowAny, IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.viewsets import ModelViewSet from core.apps.accounts.permissions import IsAdminRole # core apps from core.apps.evaluation.filters.quick import QuickevaluationFilter from core.apps.evaluation.models import QuickEvaluationModel from core.apps.evaluation.serializers import quick as serializers, QuickEvaluationModelSerializer @extend_schema(tags=["QuickEvaluation"]) class QuickEvaluationView(BaseViewSetMixin, ModelViewSet): queryset = QuickEvaluationModel.objects.select_related( "created_by", "brand", "marka", "color", "fuel_type", "body_type", "state_car", "car_position", ).filter(is_archive=False) serializer_class = serializers.ListQuickevaluationSerializer permission_classes = [AllowAny] parser_classes = [MultiPartParser, FormParser] filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] filterset_class = QuickevaluationFilter search_fields = ["car_number", "marka__name", "brand__name"] ordering_fields = [ "created_at", "updated_at", "car_number", "brand__name", "marka__name", "car_type", "car_manufactured_date", "color__name", "fuel_type__name", "state_car__name", "status", "distance_covered", ] ordering = ["-created_at"] action_permission_classes = {} action_serializer_class = { "list": serializers.ListQuickevaluationSerializer, "retrieve": serializers.RetrieveQuickevaluationSerializer, "create": serializers.CreateQuickevaluationSerializer, } @extend_schema(tags=["QuickEvaluation"]) class QuickEvaluationArchiveAPIView(APIView): def post(self, request, pk): instance = get_object_or_404(QuickEvaluationModel, pk=pk) is_archived = request.data.get("is_archived") if is_archived is None: return Response( {"error": "Поле 'is_archived' обязательно"}, status=status.HTTP_400_BAD_REQUEST ) instance.is_archive = is_archived instance.save() return Response({"success": True}, status=200) @extend_schema(tags=["QuickEvaluation"]) class QuickEvaluationArchivedListAPIView(ListAPIView): permission_classes = [IsAuthenticated] serializer_class = serializers.ListQuickevaluationSerializer def get_queryset(self): return QuickEvaluationModel.objects.filter(is_archive=True) @extend_schema(tags=["QuickEvaluation"]) class AdminQuickEvalAPIView(generics.GenericAPIView): permission_classes = [IsAuthenticated, IsAdminRole] queryset = QuickEvaluationModel.objects.all() serializer_class = QuickEvaluationModelSerializer def get(self, request): quick_eval = QuickEvaluationModel.objects.filter( created_by=self.request.user ).select_related('created_by').distinct() serializer = QuickEvaluationModelSerializer(quick_eval, many=True) return Response(serializer.data)