130 lines
4.3 KiB
Python
130 lines
4.3 KiB
Python
from django_core.mixins import BaseViewSetMixin
|
|
from django_filters.rest_framework import DjangoFilterBackend
|
|
from drf_spectacular.utils import extend_schema, OpenApiResponse
|
|
from rest_framework.filters import OrderingFilter, SearchFilter
|
|
from rest_framework.parsers import FormParser, MultiPartParser
|
|
from rest_framework.permissions import AllowAny, IsAuthenticated
|
|
from rest_framework.viewsets import ModelViewSet
|
|
from rest_framework.generics import GenericAPIView
|
|
from rest_framework.response import Response
|
|
from rest_framework import status
|
|
from django.shortcuts import get_object_or_404
|
|
|
|
from core.apps.evaluation.filters.quick import QuickevaluationFilter
|
|
from core.apps.evaluation.models import QuickEvaluationModel
|
|
from core.apps.evaluation.serializers.quick import (
|
|
CreateQuickevaluationSerializer,
|
|
ListQuickevaluationSerializer,
|
|
RetrieveQuickevaluationSerializer,
|
|
ArchiveQuickevaluationSerializer,
|
|
)
|
|
|
|
|
|
@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 = 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": ListQuickevaluationSerializer,
|
|
"retrieve": RetrieveQuickevaluationSerializer,
|
|
"create": CreateQuickevaluationSerializer,
|
|
}
|
|
|
|
@extend_schema(tags=["QuickEvaluation"])
|
|
class ArchiveQuickEvaluationView(GenericAPIView):
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_serializer_class(self):
|
|
if self.request.method == "GET":
|
|
return ListQuickevaluationSerializer
|
|
return ArchiveQuickevaluationSerializer
|
|
|
|
@extend_schema(
|
|
tags=["QuickEvaluation"],
|
|
summary="Get archived quick evaluations list",
|
|
description="""
|
|
Returns only archived quick evaluations.
|
|
|
|
This endpoint works like quick-evaluation/,
|
|
but only records with is_archive=True are returned.
|
|
""",
|
|
responses={200: ListQuickevaluationSerializer(many=True)},
|
|
)
|
|
def get(self, request, *args, **kwargs):
|
|
queryset = QuickEvaluationModel.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=["QuickEvaluation"],
|
|
summary="Archive or unarchive quick evaluation",
|
|
description="""
|
|
Update archive status for quick evaluation.
|
|
|
|
- is_archive=true → archive
|
|
- is_archive=false → remove from archive
|
|
""",
|
|
request=ArchiveQuickevaluationSerializer,
|
|
responses={
|
|
200: OpenApiResponse(
|
|
description="Archive status updated successfully"
|
|
),
|
|
400: OpenApiResponse(
|
|
description="Validation error"
|
|
),
|
|
404: OpenApiResponse(
|
|
description="Quick evaluation 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(
|
|
QuickEvaluationModel,
|
|
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
|
|
) |