Files
backend-v1/core/apps/evaluation/views/auto.py
xoliqberdiyev 965328edd4 fix
2026-04-18 16:31:53 +05:00

157 lines
5.6 KiB
Python

from django.db.models import Q
from django_core.mixins import BaseViewSetMixin
from django.shortcuts import get_object_or_404
from django_filters.rest_framework import DjangoFilterBackend
from drf_spectacular.utils import extend_schema, OpenApiParameter
from rest_framework.filters import OrderingFilter, SearchFilter
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 core.apps.accounts.serializers.user import UserSerializer
from core.apps.evaluation.filters.auto import AutoevaluationFilter
from core.apps.evaluation.models import AutoEvaluationModel
from core.apps.evaluation.serializers.auto import (
CreateAutoevaluationSerializer,
ListAutoevaluationSerializer,
RetrieveAutoevaluationSerializer,
AutoEvaluationAppraisersSerializer,
UpdateAutoevaluationSerializer
)
@extend_schema(tags=["AutoEvaluation"])
class AutoEvaluationView(BaseViewSetMixin, ModelViewSet):
queryset = AutoEvaluationModel.objects.select_related(
"valuation",
"valuation__customer",
"vehicle",
).all()
serializer_class = ListAutoevaluationSerializer
permission_classes = [AllowAny]
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_class = AutoevaluationFilter
search_fields = [
"registration_number",
"car_model",
"car_brand",
"car_number",
]
ordering_fields = [
"id",
"contract_date",
"object_inspection_date",
"object_owner_individual_person_passport_num",
"object_owner_type",
"object_owner_individual_person_f_name",
"object_owner_individual_person_l_name",
"object_owner_individual_person_p_name",
"object_owner_legal_entity",
"object_owner_legal_inn",
"tex_passport_serie_num",
"rating_goal",
"object_location_province",
"registration_number",
"object_type",
"object_type_display",
"car_brand",
"car_model",
"car_number",
"manufacture_year",
"car_color",
"status",
"status_display",
"created_at",
"value_determined",
"rate_type",
"property_rights",
"form_ownership",
]
ordering = ["-created_at"]
action_permission_classes = {}
action_serializer_class = {
"list": ListAutoevaluationSerializer,
"retrieve": RetrieveAutoevaluationSerializer,
"create": CreateAutoevaluationSerializer,
"update": UpdateAutoevaluationSerializer,
"partial_update": UpdateAutoevaluationSerializer,
}
def serializer_context(self):
return self.serializer_class(context={'request': self.request})
@extend_schema(tags=["AutoEvaluation"])
class AutoEvaluationSetAppraisersView(GenericAPIView):
permission_classes = [IsAuthenticated]
queryset = AutoEvaluationModel.objects.all()
serializer_class = AutoEvaluationAppraisersSerializer
def post(self, request, id):
try:
auto_evaluation = get_object_or_404(AutoEvaluationModel, id=id)
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
users = serializer.validated_data.get("users")
auto_evaluation.appraisers.set(users)
auto_evaluation.save()
return Response({"success": True, "data": "Foydalanuvchilar muvaffaqiyatli qo'shildi"})
except Exception as e:
return Response({"error": str(e)}, status=500)
@extend_schema(tags=["AutoEvaluation"])
class AutoEvaluationRemoveAppraisersView(GenericAPIView):
permission_classes = [IsAuthenticated]
queryset = AutoEvaluationModel.objects.all()
serializer_class = AutoEvaluationAppraisersSerializer
def post(self, request, id):
try:
auto_evaluation = get_object_or_404(AutoEvaluationModel, id=id)
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
users = serializer.validated_data.get("users")
auto_evaluation.appraisers.remove(*users)
auto_evaluation.save()
return Response({"success": True, "data": "Foydalanuvchilar muvaffaqiyatli o'chirildi"})
except Exception as e:
return Response({"error": str(e)}, status=500)
@extend_schema(tags=["AutoEvaluation"])
class AutoEvaluationListAppraisersView(GenericAPIView):
permission_classes = [IsAuthenticated]
queryset = AutoEvaluationModel.objects.all()
serializer_class = UserSerializer
@extend_schema(
parameters=[
OpenApiParameter(
name="search",
type=str,
description="Search query",
required=False,
)
]
)
def get(self, request, id):
try:
search_query = request.query_params.get("search", "")
auto_evaluation = get_object_or_404(AutoEvaluationModel, id=id)
query = auto_evaluation.appraisers.all()
if search_query:
query = query.filter(
Q(phone__icontains=search_query) |
Q(first_name__icontains=search_query) |
Q(last_name__icontains=search_query)
)
page = self.paginate_queryset(query)
serializer = self.serializer_class(page, many=True)
return self.get_paginated_response(serializer.data)
except Exception as e:
return Response({"error": str(e)}, status=500)