From e3e7f18d7f086c1dd8162f1e68cc53117502c334 Mon Sep 17 00:00:00 2001 From: xoliqberdiyev Date: Mon, 27 Apr 2026 16:49:07 +0500 Subject: [PATCH] changing code structure --- core/apps/evaluation/models/request.py | 49 +++-- .../serializers/request/EvaluationRequest.py | 4 - core/apps/evaluation/urls.py | 161 +++++++--------- core/apps/evaluation/views/auto.py | 43 +++-- core/apps/evaluation/views/avg_cost.py | 4 +- core/apps/evaluation/views/certificate.py | 20 +- core/apps/evaluation/views/customer.py | 33 ++-- core/apps/evaluation/views/didox.py | 10 +- core/apps/evaluation/views/document.py | 36 ++-- .../apps/evaluation/views/documentcategory.py | 6 + core/apps/evaluation/views/history.py | 35 ++-- core/apps/evaluation/views/movable.py | 20 +- core/apps/evaluation/views/permission.py | 0 core/apps/evaluation/views/quick.py | 32 ++-- core/apps/evaluation/views/real_estate.py | 20 +- core/apps/evaluation/views/reference.py | 39 ++-- core/apps/evaluation/views/report.py | 21 +- core/apps/evaluation/views/request.py | 180 +++++------------- core/apps/evaluation/views/tech_passport.py | 20 +- core/apps/evaluation/views/valuation.py | 20 +- core/apps/evaluation/views/vehicle.py | 20 +- 21 files changed, 345 insertions(+), 428 deletions(-) delete mode 100644 core/apps/evaluation/views/permission.py diff --git a/core/apps/evaluation/models/request.py b/core/apps/evaluation/models/request.py index a26c7d0..b3637a6 100644 --- a/core/apps/evaluation/models/request.py +++ b/core/apps/evaluation/models/request.py @@ -13,17 +13,23 @@ from core.apps.evaluation.models import ReferenceitemModel class EvaluationrequestModel(AbstractBaseModel): + # request sender user = models.ForeignKey( "accounts.User", on_delete=models.CASCADE, related_name="evaluation_requests", verbose_name=_("user"), ) + + # request type -> "Automobil", "Ko'chmas mulk", "Uskuna" rate_type = models.CharField( verbose_name=_("rate type"), max_length=50, choices=EvaluationRateType.choices, ) + ################### + # Automobil fields + ################### object_type = models.CharField( verbose_name=_("object type"), max_length=50, @@ -45,6 +51,21 @@ class EvaluationrequestModel(AbstractBaseModel): blank=True, null=True, ) + worked_hours = models.IntegerField( + verbose_name=_("worked hours"), + blank=True, + null=True, + ) + chassi = models.CharField( + verbose_name=_("chassi"), + max_length=100, + blank=True, + null=True, + ) + + ################### + # Value fields + ################### value_determined = models.ForeignKey( "evaluation.ReferenceitemModel", verbose_name=_("value determined"), @@ -77,21 +98,10 @@ class EvaluationrequestModel(AbstractBaseModel): blank=True, null=True, ) - worked_hours = models.IntegerField( - verbose_name=_("worked hours"), - blank=True, - null=True, - ) - chassi = models.CharField( - verbose_name=_("chassi"), - max_length=100, - blank=True, - null=True, - ) - need_delivering = models.BooleanField( - verbose_name=_("need delivering"), - default=True, - ) + + ################### + # Location fields + ################### location_name = models.CharField( verbose_name=_("location name"), max_length=255, @@ -112,6 +122,14 @@ class EvaluationrequestModel(AbstractBaseModel): blank=True, null=True, ) + + ################### + # Other fields + ################### + need_delivering = models.BooleanField( + verbose_name=_("need delivering"), + default=True, + ) status = models.CharField( verbose_name=_("status"), max_length=50, @@ -122,6 +140,7 @@ class EvaluationrequestModel(AbstractBaseModel): verbose_name=_("is archive"), default=False, ) + def __str__(self): return f"Requests #{self.pk} — {self.get_rate_type_display()}" diff --git a/core/apps/evaluation/serializers/request/EvaluationRequest.py b/core/apps/evaluation/serializers/request/EvaluationRequest.py index 3554f9b..8a2406c 100644 --- a/core/apps/evaluation/serializers/request/EvaluationRequest.py +++ b/core/apps/evaluation/serializers/request/EvaluationRequest.py @@ -92,7 +92,6 @@ class RetrieveEvaluationrequestSerializer(BaseEvaluationrequestSerializer): class CreateEvaluationrequestSerializer(serializers.ModelSerializer): location = serializers.DictField(required=False, allow_empty=True) - # locationName — string qabul qiladi, location ichida yoki tashqarida yuborsa bo'ladi locationName = serializers.CharField( write_only=True, required=False, @@ -100,8 +99,6 @@ class CreateEvaluationrequestSerializer(serializers.ModelSerializer): allow_blank=True, ) - # Faqat truck_car uchun majburiy — field darajasida optional qilib belgilaymiz, - # validate() da object_type ga qarab tekshiramiz worked_hours = serializers.IntegerField( required=False, allow_null=True, @@ -157,7 +154,6 @@ class CreateEvaluationrequestSerializer(serializers.ModelSerializer): {"tex_passport": "rate_type 'auto' bo'lganda tex_passport majburiy."} ) - # worked_hours va chassi FAQAT yuk avtomobil (truck_car) uchun majburiy if object_type == "truck_car": if attrs.get("worked_hours") is None: raise serializers.ValidationError( diff --git a/core/apps/evaluation/urls.py b/core/apps/evaluation/urls.py index 7d409b6..820352e 100644 --- a/core/apps/evaluation/urls.py +++ b/core/apps/evaluation/urls.py @@ -1,105 +1,86 @@ from django.urls import include, path from rest_framework.routers import DefaultRouter -from .views import ( - AdminEvaluationrequestView, - AutoEvaluationHistoryView, - AutoEvaluationView, - CustomerView, - DeterminedValueView, - DocumentCategoryView, - DocumentView, - EvaluationPurposeView, - EvaluationReportView, - EvaluationrequestView, - MovablePropertyEvaluationView, - OwnershipFormView, - PropertyOwnerView, - PropertyRightsView, - QuickEvaluationHistoryView, - QuickEvaluationView, - RealEstateEvaluationView, - ReferenceitemView, - ValuationDocumentView, - ValuationView, - VehicleView, - AutoEvaluationListAppraisersView, - AutoEvaluationSetAppraisersView, - AutoEvaluationRemoveAppraisersView, - DidoxCompanyInfoAPIView, - TechPassportAPIView, - EvaluationStatusChange, - CertificateView, - ArchiveEvaluationrequestView, GetArchivedAutoEvaluationListAPIView, ArchivedAutoEvaluation, - GetArchivedQuickevaluationListAPIView, ChangeQuickevaluationAPIView, ArchivedReqEvaluation, - GetArchivedReqEvaluationListAPIView, - AvgCostView, -) +from core.apps.evaluation import views router = DefaultRouter() -router.register("document-category", DocumentCategoryView, basename="DocumentCategory") -router.register("document", DocumentView, basename="Document") -router.register("auto-evaluation-history", AutoEvaluationHistoryView, basename="auto-evaluation-history") -router.register("quick-evaluation-history", QuickEvaluationHistoryView, basename="quick-evaluation-history") -router.register("determined-value", DeterminedValueView, basename="determined-value") -router.register("evaluation-purpose", EvaluationPurposeView, basename="evaluation-purpose") -router.register("property-rights", PropertyRightsView, basename="property-rights") -router.register("ownership-form", OwnershipFormView, basename="ownership-form") -router.register("evaluation-request", EvaluationrequestView, basename="evaluation-request") -router.register("admin-evaluation-request", AdminEvaluationrequestView, basename="admin-evaluation-request") -router.register("reference-item", ReferenceitemView, basename="reference-item") -router.register("valuation-document", ValuationDocumentView, basename="valuation-document") -router.register("evaluation-report", EvaluationReportView, basename="evaluation-report") -router.register("quick-evaluation", QuickEvaluationView, basename="quick-evaluation") -router.register("movable-property-evaluation", MovablePropertyEvaluationView, basename="movable-property-evaluation") -router.register("real-estate-evaluation", RealEstateEvaluationView, basename="real-estate-evaluation") -router.register("auto-evaluation", AutoEvaluationView, basename="auto-evaluation") -router.register("vehicle", VehicleView, basename="vehicle") -router.register("valuation", ValuationView, basename="valuation") -router.register("property-owner", PropertyOwnerView, basename="property-owner") -router.register("customer", CustomerView, basename="customer") -router.register("certificate", CertificateView, basename="certificate") +router.register("document-category", views.DocumentCategoryView, basename="DocumentCategory") +router.register("document", views.DocumentView, basename="Document") +router.register("auto-evaluation-history", views.AutoEvaluationHistoryView, basename="auto-evaluation-history") +router.register("quick-evaluation-history", views.QuickEvaluationHistoryView, basename="quick-evaluation-history") +router.register("determined-value", views.DeterminedValueView, basename="determined-value") +router.register("evaluation-purpose", views.EvaluationPurposeView, basename="evaluation-purpose") +router.register("property-rights", views.PropertyRightsView, basename="property-rights") +router.register("ownership-form", views.OwnershipFormView, basename="ownership-form") +router.register("evaluation-request", views.EvaluationrequestView, basename="evaluation-request") +router.register("admin-evaluation-request", views.AdminEvaluationrequestView, basename="admin-evaluation-request") +router.register("reference-item", views.ReferenceitemView, basename="reference-item") +router.register("valuation-document", views.ValuationDocumentView, basename="valuation-document") +router.register("evaluation-report", views.EvaluationReportView, basename="evaluation-report") +router.register("quick-evaluation", views.QuickEvaluationView, basename="quick-evaluation") +router.register("movable-property-evaluation", views.MovablePropertyEvaluationView, basename="movable-property-evaluation") +router.register("real-estate-evaluation", views.RealEstateEvaluationView, basename="real-estate-evaluation") +router.register("auto-evaluation", views.AutoEvaluationView, basename="auto-evaluation") +router.register("vehicle", views.VehicleView, basename="vehicle") +router.register("valuation", views.ValuationView, basename="valuation") +router.register("property-owner", views.PropertyOwnerView, basename="property-owner") +router.register("customer", views.CustomerView, basename="customer") +router.register("certificate", views.CertificateView, basename="certificate") + urlpatterns = [ path("", include(router.urls)), - path("auto-evaluation/appraisers/", include( + + path("didox/info//", views.DidoxCompanyInfoAPIView.as_view()), + path("tech-passport/", views.TechPassportAPIView.as_view()), + + # Quick Evaluation + path('quick-evaluation/', include( [ - path("/list/", AutoEvaluationListAppraisersView.as_view(), name="auto-evaluation-list-appraisers"), - path("/set/", AutoEvaluationSetAppraisersView.as_view(), name="auto-evaluation-set-appraisers"), - path("/remove/", AutoEvaluationRemoveAppraisersView.as_view(), name="auto-evaluation-remove-appraisers"), + path( + 'archive/', include( + [ + path("list/", views.QuickEvaluationArchivedListAPIView.as_view()), + path("/", views.QuickEvaluationArchiveAPIView.as_view()), + ] + ) + ), ] )), - path( - "didox/info//", - DidoxCompanyInfoAPIView.as_view(), - name="didox-info" - ), - path( - "tech-passport/", - TechPassportAPIView.as_view(), - name="tech-passport" - ), - path("evaluation-request//change-status/", EvaluationStatusChange.as_view(), - name="evaluation-change-status"), - path("archive/quick-evaluation/", GetArchivedQuickevaluationListAPIView.as_view(), name="get-quick-evaluation-archive"), - path("archive/quick-evaluation/", ChangeQuickevaluationAPIView.as_view(), name="change-quick-evaluation-archive"), - path("archive/evaluation-request/", ArchiveEvaluationrequestView.as_view(), name="evaluation-request-archive"), + # Auto Evaluation + path("auto-evaluation/", include( + [ + path('archive/', include( + [ + path('/', views.AutoEvaluationArchiveAPIView.as_view()), + path('list/', views.AutoEvaluationArchivedListAPIView.as_view()) + ] + )), + path('appraisers/', include( + [ + path("/list/", views.AutoEvaluationListAppraisersView.as_view()), + path("/set/", views.AutoEvaluationSetAppraisersView.as_view()), + path("/remove/", views.AutoEvaluationRemoveAppraisersView.as_view()), + ] + )) + ] + )), - path("archived-evaluvation/", GetArchivedAutoEvaluationListAPIView.as_view(), - name="archived-evaluation"), + # Evaluation Request + path("evaluation-request/", include( + [ + path("/change-status/", views.EvaluationStatusChange.as_view()), + path( + 'archive/', include( + [ + path('list/', views.RequestEvaluationArchivedListAPIView.as_view()), + path('/', views.RequestEvaluationArchiveAPIView.as_view()), + ] + ) + ) + ] + )), - path("auto-evaluvation-change-status/", ArchivedAutoEvaluation.as_view(), - name="archived-evaluation"), - - path("req-evaluvation-change-status/", ArchivedReqEvaluation.as_view(), - name="archived-req-evaluation"), - - path("req-evaluvation-change-status/", GetArchivedReqEvaluationListAPIView.as_view(), - name="archived-req-evaluation"), - path( - "calculate_avg_cost/", - AvgCostView.as_view(), - name="calculate-avg-cost" - ) + path("calculate_avg_cost/", views.AvgCostAPIView.as_view()), ] diff --git a/core/apps/evaluation/views/auto.py b/core/apps/evaluation/views/auto.py index 73e5cb7..3c1c8ac 100644 --- a/core/apps/evaluation/views/auto.py +++ b/core/apps/evaluation/views/auto.py @@ -1,8 +1,10 @@ from django.db.models import Q from django.shortcuts import get_object_or_404 from django_core.mixins import BaseViewSetMixin + 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.generics import GenericAPIView, ListAPIView from rest_framework.permissions import AllowAny, IsAuthenticated @@ -13,14 +15,7 @@ from rest_framework.viewsets import ModelViewSet 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 -) - +from core.apps.evaluation.serializers import auto as serializers @extend_schema(tags=["AutoEvaluation"]) class AutoEvaluationView(BaseViewSetMixin, ModelViewSet): @@ -29,7 +24,7 @@ class AutoEvaluationView(BaseViewSetMixin, ModelViewSet): "valuation__customer", "vehicle", ).all() - serializer_class = ListAutoevaluationSerializer + serializer_class = serializers.ListAutoevaluationSerializer permission_classes = [AllowAny] filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] @@ -74,11 +69,11 @@ class AutoEvaluationView(BaseViewSetMixin, ModelViewSet): action_permission_classes = {} action_serializer_class = { - "list": ListAutoevaluationSerializer, - "retrieve": RetrieveAutoevaluationSerializer, - "create": CreateAutoevaluationSerializer, - "update": UpdateAutoevaluationSerializer, - "partial_update": UpdateAutoevaluationSerializer, + "list": serializers.ListAutoevaluationSerializer, + "retrieve": serializers.RetrieveAutoevaluationSerializer, + "create": serializers.CreateAutoevaluationSerializer, + "update": serializers.UpdateAutoevaluationSerializer, + "partial_update": serializers.UpdateAutoevaluationSerializer, } def serializer_context(self): @@ -89,7 +84,7 @@ class AutoEvaluationView(BaseViewSetMixin, ModelViewSet): class AutoEvaluationSetAppraisersView(GenericAPIView): permission_classes = [IsAuthenticated] queryset = AutoEvaluationModel.objects.all() - serializer_class = AutoEvaluationAppraisersSerializer + serializer_class = serializers.AutoEvaluationAppraisersSerializer def post(self, request, id): try: @@ -108,7 +103,7 @@ class AutoEvaluationSetAppraisersView(GenericAPIView): class AutoEvaluationRemoveAppraisersView(GenericAPIView): permission_classes = [IsAuthenticated] queryset = AutoEvaluationModel.objects.all() - serializer_class = AutoEvaluationAppraisersSerializer + serializer_class = serializers.AutoEvaluationAppraisersSerializer def post(self, request, id): try: @@ -158,21 +153,27 @@ class AutoEvaluationListAppraisersView(GenericAPIView): @extend_schema(tags=["AutoEvaluation"]) -class GetArchivedAutoEvaluationListAPIView(ListAPIView): +class AutoEvaluationArchivedListAPIView(ListAPIView): permission_classes = [IsAuthenticated] + serializer_class = serializers.ListAutoevaluationSerializer def get_queryset(self): return AutoEvaluationModel.objects.filter(is_archived=True) @extend_schema(tags=["AutoEvaluation"]) -class ArchivedAutoEvaluation(APIView): +class AutoEvaluationArchiveAPIView(APIView): permission_classes = [IsAuthenticated] def post(self, request, pk): auto_evaluation = get_object_or_404(AutoEvaluationModel, pk=pk) auto_evaluation.is_archived = request.data["is_archived"] auto_evaluation.save() - return Response({"success": True, - "status": auto_evaluation.status, - "id": auto_evaluation.pk}, status=200) + return Response( + { + "success": True, + "status": auto_evaluation.status, + "id": auto_evaluation.pk + }, + status=200 + ) diff --git a/core/apps/evaluation/views/avg_cost.py b/core/apps/evaluation/views/avg_cost.py index 7729385..12b6928 100644 --- a/core/apps/evaluation/views/avg_cost.py +++ b/core/apps/evaluation/views/avg_cost.py @@ -1,12 +1,14 @@ +# rest framework from rest_framework import generics from rest_framework.response import Response from rest_framework import permissions +# core apps from core.apps.evaluation.serializers.auto.AvgCost import AvgCostSerializer from core.services.grpc.auto import get_auto_avg_cost -class AvgCostView(generics.GenericAPIView): +class AvgCostAPIView(generics.GenericAPIView): serializer_class = AvgCostSerializer permission_classes = [permissions.IsAuthenticated] diff --git a/core/apps/evaluation/views/certificate.py b/core/apps/evaluation/views/certificate.py index 4eba8f7..a38f961 100644 --- a/core/apps/evaluation/views/certificate.py +++ b/core/apps/evaluation/views/certificate.py @@ -1,23 +1,27 @@ +# django core from django_core.mixins import BaseViewSetMixin + +# swagger from drf_spectacular.utils import extend_schema -from rest_framework.permissions import IsAuthenticated + +# rest framework from rest_framework.viewsets import ModelViewSet -from core.apps.evaluation.models import CertificateModel -from core.apps.evaluation.serializers.certificate import BaseCertificateSerializer +from rest_framework.permissions import IsAuthenticated from rest_framework.filters import SearchFilter from rest_framework.parsers import MultiPartParser, FormParser +# local apps +from core.apps.evaluation.models import CertificateModel +from core.apps.evaluation.serializers.certificate import BaseCertificateSerializer + + @extend_schema(tags=["Certificate"],request=BaseCertificateSerializer) class CertificateView(BaseViewSetMixin, ModelViewSet): queryset = CertificateModel.objects.all() serializer_class = BaseCertificateSerializer permission_classes = [IsAuthenticated] - parser_classes = [MultiPartParser, FormParser] - - filter_backends = [SearchFilter] + filter_backends = [SearchFilter] search_fields = ["title"] - pagination_class = None - action_permission_classes = {} diff --git a/core/apps/evaluation/views/customer.py b/core/apps/evaluation/views/customer.py index 4f5dec9..547922a 100644 --- a/core/apps/evaluation/views/customer.py +++ b/core/apps/evaluation/views/customer.py @@ -3,44 +3,33 @@ from drf_spectacular.utils import extend_schema from rest_framework.permissions import AllowAny from rest_framework.viewsets import ReadOnlyModelViewSet +# local apps from core.apps.evaluation.models import CustomerModel, PropertyOwnerModel -from core.apps.evaluation.serializers.customer import ( - CreateCustomerSerializer, - CreatePropertyOwnerSerializer, - ListCustomerSerializer, - ListPropertyOwnerSerializer, - RetrieveCustomerSerializer, - RetrievePropertyOwnerSerializer, -) +from core.apps.evaluation.serializers import customer as serializers @extend_schema(tags=["Customer"]) class CustomerView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = CustomerModel.objects.all() - serializer_class = ListCustomerSerializer + serializer_class = serializers.ListCustomerSerializer permission_classes = [AllowAny] action_permission_classes = {} action_serializer_class = { - "list": ListCustomerSerializer, - "retrieve": RetrieveCustomerSerializer, - "create": CreateCustomerSerializer, + "list": serializers.ListCustomerSerializer, + "retrieve": serializers.RetrieveCustomerSerializer, + "create": serializers.CreateCustomerSerializer, } - - @extend_schema(tags=["PropertyOwner"]) class PropertyOwnerView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = PropertyOwnerModel.objects.all() - serializer_class = ListPropertyOwnerSerializer + serializer_class = serializers.ListPropertyOwnerSerializer permission_classes = [AllowAny] - action_permission_classes = {} action_serializer_class = { - "list": ListPropertyOwnerSerializer, - "retrieve": RetrievePropertyOwnerSerializer, - "create": CreatePropertyOwnerSerializer, - } - - #test commit + "list": serializers.ListPropertyOwnerSerializer, + "retrieve": serializers.RetrievePropertyOwnerSerializer, + "create": serializers.CreatePropertyOwnerSerializer, + } \ No newline at end of file diff --git a/core/apps/evaluation/views/didox.py b/core/apps/evaluation/views/didox.py index 273a658..155acac 100644 --- a/core/apps/evaluation/views/didox.py +++ b/core/apps/evaluation/views/didox.py @@ -1,11 +1,13 @@ +# rest framework from rest_framework.response import Response from rest_framework import status from rest_framework.permissions import IsAuthenticated from rest_framework.generics import GenericAPIView - +# swagger from drf_spectacular.utils import extend_schema, OpenApiParameter +# local apps from core.services.didox import DidoxService @@ -38,7 +40,6 @@ class DidoxCompanyInfoAPIView(GenericAPIView): {"detail": "TIN must be a valid integer"}, status=status.HTTP_400_BAD_REQUEST ) - data = DidoxService.get_company_info(tin) if not data: @@ -47,14 +48,11 @@ class DidoxCompanyInfoAPIView(GenericAPIView): status=status.HTTP_502_BAD_GATEWAY ) - # if both name and personalNum are null/empty -> 404 name = data.get("name") personal_num = data.get("personalNum") - if not name and not personal_num: return Response( {"detail": "Company or person not found"}, status=status.HTTP_404_NOT_FOUND ) - - return Response(data, status=status.HTTP_200_OK) \ No newline at end of file + return Response(data, status=status.HTTP_200_OK) diff --git a/core/apps/evaluation/views/document.py b/core/apps/evaluation/views/document.py index 620eb75..ecac430 100644 --- a/core/apps/evaluation/views/document.py +++ b/core/apps/evaluation/views/document.py @@ -1,51 +1,51 @@ +# 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.document import ( - CreateDocumentSerializer, - CreateValuationdocumentSerializer, - ListDocumentSerializer, - ListValuationdocumentSerializer, - RetrieveDocumentSerializer, - RetrieveValuationdocumentSerializer, -) +from core.apps.evaluation.serializers import document as serializers @extend_schema(tags=["ValuationDocument"]) class ValuationDocumentView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = ValuationDocumentModel.objects.all() - serializer_class = ListValuationdocumentSerializer + serializer_class = serializers.ListValuationdocumentSerializer permission_classes = [AllowAny] action_permission_classes = {} action_serializer_class = { - "list": ListValuationdocumentSerializer, - "retrieve": RetrieveValuationdocumentSerializer, - "create": CreateValuationdocumentSerializer, + "list": serializers.ListValuationdocumentSerializer, + "retrieve": serializers.RetrieveValuationdocumentSerializer, + "create": serializers.CreateValuationdocumentSerializer, } @extend_schema(tags=["Document"]) class DocumentView(BaseViewSetMixin, ModelViewSet): queryset = DocumentModel.objects.all() - serializer_class = ListDocumentSerializer + serializer_class = serializers.ListDocumentSerializer permission_classes = [AllowAny] parser_classes = [FormParser, MultiPartParser] filter_backends = [DjangoFilterBackend] action_permission_classes = {} action_serializer_class = { - "list": ListDocumentSerializer, - "retrieve": RetrieveDocumentSerializer, - "create": CreateDocumentSerializer, + "list": serializers.ListDocumentSerializer, + "retrieve": serializers.RetrieveDocumentSerializer, + "create": serializers.CreateDocumentSerializer, } @extend_schema( @@ -83,9 +83,9 @@ class DocumentView(BaseViewSetMixin, ModelViewSet): documents = documents.filter(category_id=category_id) page = self.paginate_queryset(documents) if page is not None: - serializer = ListDocumentSerializer(page, many=True, context={"request": request}) + serializer = serializers.ListDocumentSerializer(page, many=True, context={"request": request}) return self.get_paginated_response(serializer.data) - serializer = ListDocumentSerializer(documents, many=True, context={"request": request}) + serializer = serializers.ListDocumentSerializer(documents, many=True, context={"request": request}) return Response(serializer.data) except AutoEvaluationModel.DoesNotExist: raise NotFound("Auto evaluation not found") diff --git a/core/apps/evaluation/views/documentcategory.py b/core/apps/evaluation/views/documentcategory.py index d9c4a27..bbc5ba0 100644 --- a/core/apps/evaluation/views/documentcategory.py +++ b/core/apps/evaluation/views/documentcategory.py @@ -1,8 +1,14 @@ +# django core from django_core.mixins import BaseViewSetMixin + +# swagger from drf_spectacular.utils import extend_schema + +# rest framework from rest_framework.permissions import AllowAny from rest_framework.viewsets import ReadOnlyModelViewSet +# core apps from core.apps.evaluation.models import DocumentcategoryModel from core.apps.evaluation.serializers.documentcategory import ( ListDocumentcategorySerializer, diff --git a/core/apps/evaluation/views/history.py b/core/apps/evaluation/views/history.py index cb8c33c..dc45064 100644 --- a/core/apps/evaluation/views/history.py +++ b/core/apps/evaluation/views/history.py @@ -1,24 +1,25 @@ +# django from django_core.mixins import BaseViewSetMixin + +# django filters from django_filters.rest_framework import DjangoFilterBackend + +# swagger from drf_spectacular.utils import OpenApiParameter, extend_schema + +# rest framework from rest_framework.filters import OrderingFilter from rest_framework.permissions import AllowAny from rest_framework.response import Response from rest_framework.viewsets import ReadOnlyModelViewSet +# core apps from core.apps.evaluation.filters.history import ( AutoevaluationhistoryFilter, QuickevaluationhistoryFilter, ) from core.apps.evaluation.models import AutoevaluationhistoryModel, QuickevaluationhistoryModel -from core.apps.evaluation.serializers.history import ( - CreateAutoevaluationhistorySerializer, - CreateQuickevaluationhistorySerializer, - ListAutoevaluationhistorySerializer, - ListQuickevaluationhistorySerializer, - RetrieveAutoevaluationhistorySerializer, - RetrieveQuickevaluationhistorySerializer, -) +from core.apps.evaluation.serializers import history as serializers @extend_schema( @@ -31,13 +32,12 @@ from core.apps.evaluation.serializers.history import ( ], ) class AutoEvaluationHistoryView(BaseViewSetMixin, ReadOnlyModelViewSet): - # select_related("auto_evaluation") faqat retrieve uchun — list uchun kerak emas queryset = AutoevaluationhistoryModel.objects.only( "id", "auto_evaluation_id", "event_type", "actor_id", "actor_full_name", "actor_role", "meta", "created_at", ) - serializer_class = ListAutoevaluationhistorySerializer + serializer_class = serializers.ListAutoevaluationhistorySerializer permission_classes = [AllowAny] pagination_class = None @@ -55,14 +55,13 @@ class AutoEvaluationHistoryView(BaseViewSetMixin, ReadOnlyModelViewSet): action_permission_classes = {} action_serializer_class = { - "list": ListAutoevaluationhistorySerializer, - "retrieve": RetrieveAutoevaluationhistorySerializer, - "create": CreateAutoevaluationhistorySerializer, + "list": serializers.ListAutoevaluationhistorySerializer, + "retrieve": serializers.RetrieveAutoevaluationhistorySerializer, + "create": serializers.CreateAutoevaluationhistorySerializer, } def list(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_queryset()) - # Queryset bir marta evaluate qilinadi — COUNT uchun alohida query yo'q results = list(queryset) serializer = self.get_serializer(results, many=True) return Response({ @@ -88,7 +87,7 @@ class QuickEvaluationHistoryView(BaseViewSetMixin, ReadOnlyModelViewSet): "actor_id", "actor_full_name", "actor_role", "meta", "created_at", ) - serializer_class = ListQuickevaluationhistorySerializer + serializer_class = serializers.ListQuickevaluationhistorySerializer permission_classes = [AllowAny] pagination_class = None @@ -99,9 +98,9 @@ class QuickEvaluationHistoryView(BaseViewSetMixin, ReadOnlyModelViewSet): action_permission_classes = {} action_serializer_class = { - "list": ListQuickevaluationhistorySerializer, - "retrieve": RetrieveQuickevaluationhistorySerializer, - "create": CreateQuickevaluationhistorySerializer, + "list": serializers.ListQuickevaluationhistorySerializer, + "retrieve": serializers.RetrieveQuickevaluationhistorySerializer, + "create": serializers.CreateQuickevaluationhistorySerializer, } def list(self, request, *args, **kwargs): diff --git a/core/apps/evaluation/views/movable.py b/core/apps/evaluation/views/movable.py index 0ee0dbf..777c127 100644 --- a/core/apps/evaluation/views/movable.py +++ b/core/apps/evaluation/views/movable.py @@ -1,25 +1,27 @@ +# django core from django_core.mixins import BaseViewSetMixin + +# swagger from drf_spectacular.utils import extend_schema + +# rest framework from rest_framework.permissions import AllowAny from rest_framework.viewsets import ReadOnlyModelViewSet +# core apps from core.apps.evaluation.models import MovablePropertyEvaluationModel -from core.apps.evaluation.serializers.movable import ( - CreateMovablepropertyevaluationSerializer, - ListMovablepropertyevaluationSerializer, - RetrieveMovablepropertyevaluationSerializer, -) +from core.apps.evaluation.serializers import movable as serializers @extend_schema(tags=["MovablePropertyEvaluation"]) class MovablePropertyEvaluationView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = MovablePropertyEvaluationModel.objects.all() - serializer_class = ListMovablepropertyevaluationSerializer + serializer_class = serializers.ListMovablepropertyevaluationSerializer permission_classes = [AllowAny] action_permission_classes = {} action_serializer_class = { - "list": ListMovablepropertyevaluationSerializer, - "retrieve": RetrieveMovablepropertyevaluationSerializer, - "create": CreateMovablepropertyevaluationSerializer, + "list": serializers.ListMovablepropertyevaluationSerializer, + "retrieve": serializers.RetrieveMovablepropertyevaluationSerializer, + "create": serializers.CreateMovablepropertyevaluationSerializer, } diff --git a/core/apps/evaluation/views/permission.py b/core/apps/evaluation/views/permission.py deleted file mode 100644 index e69de29..0000000 diff --git a/core/apps/evaluation/views/quick.py b/core/apps/evaluation/views/quick.py index 7eb80ee..aced461 100644 --- a/core/apps/evaluation/views/quick.py +++ b/core/apps/evaluation/views/quick.py @@ -1,7 +1,16 @@ +# 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 from rest_framework.filters import OrderingFilter, SearchFilter from rest_framework.generics import ListAPIView @@ -11,13 +20,10 @@ from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.viewsets import ModelViewSet +# core apps 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, -) +from core.apps.evaluation.serializers import quick as serializers @extend_schema(tags=["QuickEvaluation"]) @@ -26,7 +32,7 @@ class QuickEvaluationView(BaseViewSetMixin, ModelViewSet): "created_by", "brand", "marka", "color", "fuel_type", "body_type", "state_car", "car_position", ).filter(is_archive=False) - serializer_class = ListQuickevaluationSerializer + serializer_class = serializers.ListQuickevaluationSerializer permission_classes = [AllowAny] parser_classes = [MultiPartParser, FormParser] @@ -51,14 +57,14 @@ class QuickEvaluationView(BaseViewSetMixin, ModelViewSet): action_permission_classes = {} action_serializer_class = { - "list": ListQuickevaluationSerializer, - "retrieve": RetrieveQuickevaluationSerializer, - "create": CreateQuickevaluationSerializer, + "list": serializers.ListQuickevaluationSerializer, + "retrieve": serializers.RetrieveQuickevaluationSerializer, + "create": serializers.CreateQuickevaluationSerializer, } @extend_schema(tags=["QuickEvaluation"]) -class ChangeQuickevaluationAPIView(APIView): +class QuickEvaluationArchiveAPIView(APIView): def post(self, request, pk): instance = get_object_or_404(QuickEvaluationModel, pk=pk) @@ -69,14 +75,14 @@ class ChangeQuickevaluationAPIView(APIView): {"error": "Поле 'is_archived' обязательно"}, status=status.HTTP_400_BAD_REQUEST ) - instance.is_archived = is_archived + instance.is_archive = is_archived instance.save() return Response({"success": True}, status=200) @extend_schema(tags=["QuickEvaluation"]) -class GetArchivedQuickevaluationListAPIView(ListAPIView): +class QuickEvaluationArchivedListAPIView(ListAPIView): permission_classes = [IsAuthenticated] def get_queryset(self): - return QuickEvaluationModel.objects.filter(is_archived=True) + return QuickEvaluationModel.objects.filter(is_archive=True) diff --git a/core/apps/evaluation/views/real_estate.py b/core/apps/evaluation/views/real_estate.py index f84a60c..9f8e9a8 100644 --- a/core/apps/evaluation/views/real_estate.py +++ b/core/apps/evaluation/views/real_estate.py @@ -1,25 +1,27 @@ +# django core from django_core.mixins import BaseViewSetMixin + +# swagger from drf_spectacular.utils import extend_schema + +# rest framework from rest_framework.permissions import AllowAny from rest_framework.viewsets import ReadOnlyModelViewSet +# core from core.apps.evaluation.models import RealEstateEvaluationModel -from core.apps.evaluation.serializers.real_estate import ( - CreateRealestateevaluationSerializer, - ListRealestateevaluationSerializer, - RetrieveRealestateevaluationSerializer, -) +from core.apps.evaluation.serializers import real_estate as serializers @extend_schema(tags=["RealEstateEvaluation"]) class RealEstateEvaluationView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = RealEstateEvaluationModel.objects.all() - serializer_class = ListRealestateevaluationSerializer + serializer_class = serializers.ListRealestateevaluationSerializer permission_classes = [AllowAny] action_permission_classes = {} action_serializer_class = { - "list": ListRealestateevaluationSerializer, - "retrieve": RetrieveRealestateevaluationSerializer, - "create": CreateRealestateevaluationSerializer, + "list": serializers.ListRealestateevaluationSerializer, + "retrieve": serializers.RetrieveRealestateevaluationSerializer, + "create": serializers.CreateRealestateevaluationSerializer, } diff --git a/core/apps/evaluation/views/reference.py b/core/apps/evaluation/views/reference.py index 6f6bbd8..2d92abf 100644 --- a/core/apps/evaluation/views/reference.py +++ b/core/apps/evaluation/views/reference.py @@ -1,20 +1,21 @@ +# 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.filters import OrderingFilter, SearchFilter from rest_framework.permissions import AllowAny from rest_framework.viewsets import ReadOnlyModelViewSet +# core apps from core.apps.evaluation.filters.reference import ReferenceitemFilter from core.apps.evaluation.models import ReferenceitemModel -from core.apps.evaluation.serializers.reference import ( - CreateReferenceitemSerializer, - ListReferenceitemSerializer, - RetrieveReferenceitemSerializer, - EvaluationPurposeSerializer, - DeterminedValueSerializer, - LabelValueSerializer, -) +from core.apps.evaluation.serializers import reference as serializers @extend_schema(tags=["EvaluationPurpose"]) @@ -22,10 +23,9 @@ class EvaluationPurposeView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = ReferenceitemModel.objects.filter( type="evaluation_purpose", is_active=True ).order_by("order", "name") - serializer_class = EvaluationPurposeSerializer + serializer_class = serializers.EvaluationPurposeSerializer permission_classes = [AllowAny] pagination_class = None - filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] search_fields = ["name"] ordering_fields = ["name", "order"] @@ -37,10 +37,9 @@ class DeterminedValueView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = ReferenceitemModel.objects.filter( type="determined_value", is_active=True ).order_by("order", "name") - serializer_class = DeterminedValueSerializer + serializer_class = serializers.DeterminedValueSerializer permission_classes = [AllowAny] pagination_class = None - filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] search_fields = ["name"] ordering_fields = ["name", "order"] @@ -52,10 +51,9 @@ class PropertyRightsView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = ReferenceitemModel.objects.filter( type="property_rights", is_active=True ).order_by("order", "name") - serializer_class = LabelValueSerializer + serializer_class = serializers.LabelValueSerializer permission_classes = [AllowAny] pagination_class = None - filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] search_fields = ["name"] ordering_fields = ["name", "order"] @@ -67,10 +65,9 @@ class OwnershipFormView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = ReferenceitemModel.objects.filter( type="ownership_form", is_active=True ).order_by("order", "name") - serializer_class = LabelValueSerializer + serializer_class = serializers.LabelValueSerializer permission_classes = [AllowAny] pagination_class = None - filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] search_fields = ["name"] ordering_fields = ["name", "order"] @@ -80,18 +77,16 @@ class OwnershipFormView(BaseViewSetMixin, ReadOnlyModelViewSet): @extend_schema(tags=["ReferenceItem"]) class ReferenceitemView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = ReferenceitemModel.objects.select_related("parent").filter(is_active=True) - serializer_class = ListReferenceitemSerializer + serializer_class = serializers.ListReferenceitemSerializer permission_classes = [AllowAny] - filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] filterset_class = ReferenceitemFilter search_fields = ["name"] ordering_fields = ["name", "order", "type"] ordering = ["order", "name"] - action_permission_classes = {} action_serializer_class = { - "list": ListReferenceitemSerializer, - "retrieve": RetrieveReferenceitemSerializer, - "create": CreateReferenceitemSerializer, + "list": serializers.ListReferenceitemSerializer, + "retrieve": serializers.RetrieveReferenceitemSerializer, + "create": serializers.CreateReferenceitemSerializer, } diff --git a/core/apps/evaluation/views/report.py b/core/apps/evaluation/views/report.py index 20314e7..f8322c4 100644 --- a/core/apps/evaluation/views/report.py +++ b/core/apps/evaluation/views/report.py @@ -1,25 +1,26 @@ +# django core from django_core.mixins import BaseViewSetMixin + +# swagger from drf_spectacular.utils import extend_schema + +# rest framework from rest_framework.permissions import AllowAny from rest_framework.viewsets import ReadOnlyModelViewSet +# core apps from core.apps.evaluation.models import EvaluationReportModel -from core.apps.evaluation.serializers.report import ( - CreateEvaluationreportSerializer, - ListEvaluationreportSerializer, - RetrieveEvaluationreportSerializer, -) +from core.apps.evaluation.serializers import report as serializers @extend_schema(tags=["EvaluationReport"]) class EvaluationReportView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = EvaluationReportModel.objects.all() - serializer_class = ListEvaluationreportSerializer + serializer_class = serializers.ListEvaluationreportSerializer permission_classes = [AllowAny] - action_permission_classes = {} action_serializer_class = { - "list": ListEvaluationreportSerializer, - "retrieve": RetrieveEvaluationreportSerializer, - "create": CreateEvaluationreportSerializer, + "list": serializers.ListEvaluationreportSerializer, + "retrieve": serializers.RetrieveEvaluationreportSerializer, + "create": serializers.CreateEvaluationreportSerializer, } diff --git a/core/apps/evaluation/views/request.py b/core/apps/evaluation/views/request.py index d480595..0745a95 100644 --- a/core/apps/evaluation/views/request.py +++ b/core/apps/evaluation/views/request.py @@ -1,41 +1,33 @@ +# django +from django.db.models.base import transaction from django.shortcuts import get_object_or_404 -from django_core.mixins import BaseViewSetMixin -from django_filters.rest_framework import DjangoFilterBackend -from drf_spectacular.utils import OpenApiResponse -from drf_spectacular.utils import extend_schema -from rest_framework import status -from rest_framework.filters import OrderingFilter, SearchFilter -from rest_framework.generics import GenericAPIView, ListAPIView -from rest_framework.permissions import IsAuthenticated -from rest_framework.response import Response -from rest_framework.views import APIView -from rest_framework.viewsets import ModelViewSet +# 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, filters, generics, permissions, views, viewsets +from rest_framework.response import Response + +# core apps from core.apps.accounts.choices import RoleChoice from core.apps.evaluation.choices.request import RequestStatus from core.apps.evaluation.filters.request import EvaluationrequestFilter from core.apps.evaluation.models import EvaluationrequestModel -from core.apps.evaluation.serializers.request import ( - CreateEvaluationrequestSerializer, - ListEvaluationrequestSerializer, - RetrieveEvaluationrequestSerializer, - ArchiveEvaluationrequestSerializer, -) - - -# class RequestPagination(PageNumberPagination): -# page_size = 20 -# page_size_query_param = "limit" -# max_page_size = 100 +from core.apps.evaluation.serializers import request as serializers @extend_schema(tags=["EvaluationRequest"]) -class EvaluationrequestView(BaseViewSetMixin, ModelViewSet): - serializer_class = ListEvaluationrequestSerializer - permission_classes = [IsAuthenticated] - # pagination_class = RequestPagination - - filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] +class EvaluationrequestView(BaseViewSetMixin, viewsets.ModelViewSet): + serializer_class = serializers.ListEvaluationrequestSerializer + permission_classes = [permissions.IsAuthenticated] + filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] filterset_class = EvaluationrequestFilter search_fields = [ "customer_inn_number", @@ -70,9 +62,9 @@ class EvaluationrequestView(BaseViewSetMixin, ModelViewSet): action_permission_classes = {} action_serializer_class = { - "list": ListEvaluationrequestSerializer, - "retrieve": RetrieveEvaluationrequestSerializer, - "create": CreateEvaluationrequestSerializer, + "list": serializers.ListEvaluationrequestSerializer, + "retrieve": serializers.RetrieveEvaluationrequestSerializer, + "create": serializers.CreateEvaluationrequestSerializer, } def serializer_context(self): @@ -85,12 +77,10 @@ class EvaluationrequestView(BaseViewSetMixin, ModelViewSet): @extend_schema(tags=["EvaluationRequest"]) -class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet): - serializer_class = ListEvaluationrequestSerializer - permission_classes = [IsAuthenticated] - # pagination_class = RequestPagination - - filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] +class AdminEvaluationrequestView(BaseViewSetMixin, viewsets.ModelViewSet): + serializer_class = serializers.ListEvaluationrequestSerializer + permission_classes = [permissions.IsAuthenticated] + filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] filterset_class = EvaluationrequestFilter search_fields = [ "customer_inn_number", @@ -125,29 +115,29 @@ class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet): action_permission_classes = {} action_serializer_class = { - "list": ListEvaluationrequestSerializer, - "retrieve": RetrieveEvaluationrequestSerializer, - "create": CreateEvaluationrequestSerializer, + "list": serializers.ListEvaluationrequestSerializer, + "retrieve": serializers.RetrieveEvaluationrequestSerializer, + "create": serializers.CreateEvaluationrequestSerializer, } def get_queryset(self): - return EvaluationrequestModel.objects.select_related("value_determined", "rate_goal", "property_rights", - "form_ownership", "user").order_by("-created_at") + return EvaluationrequestModel.objects.\ + select_related("value_determined","rate_goal","property_rights","form_ownership","user")\ + .order_by("-created_at") def serializer_context(self): return self.serializer_class(context={"request": self.request}) @extend_schema(tags=["EvaluationRequest"]) -class EvaluationStatusChange(APIView): - permission_classes = [IsAuthenticated] +class EvaluationStatusChange(views.APIView): + permission_classes = [permissions.IsAuthenticated] def post(self, request, pk): if request.user.role not in [RoleChoice.ADMIN, RoleChoice.SUPERUSER]: return Response({'detail': 'Forbidden'}, status=status.HTTP_403_FORBIDDEN) evaluation = get_object_or_404(EvaluationrequestModel, pk=pk) - status_value = request.data.get('status') if not status_value: return Response({'detail': 'Status is required'}, status=status.HTTP_400_BAD_REQUEST) @@ -176,98 +166,28 @@ class EvaluationStatusChange(APIView): @extend_schema(tags=["EvaluationRequest"]) -class ArchiveEvaluationrequestView(GenericAPIView): - permission_classes = [IsAuthenticated] - - def get_serializer_class(self): - if self.request.method == "GET": - return ListEvaluationrequestSerializer - return ArchiveEvaluationrequestSerializer - - @extend_schema( - tags=["EvaluationRequest"], - summary="Get archived evaluation requests list", - description=""" - Returns only archived evaluation requests. - - This endpoint works like evaluation-request/, - but only records with is_archive=True are returned. - """, - responses={200: ListEvaluationrequestSerializer(many=True)}, - ) - def get(self, request, *args, **kwargs): - queryset = EvaluationrequestModel.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=["EvaluationRequest"], - summary="Archive or unarchive evaluation request", - description=""" - Update archive status for evaluation request. - - - is_archive=true → archive - - is_archive=false → remove from archive - """, - request=ArchiveEvaluationrequestSerializer, - responses={ - 200: OpenApiResponse( - description="Archive status updated successfully" - ), - 400: OpenApiResponse( - description="Validation error" - ), - 404: OpenApiResponse( - description="Evaluation request 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( - EvaluationrequestModel, - 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 - ) - - -@extend_schema(tags=["EvaluationRequest"]) -class GetArchivedReqEvaluationListAPIView(ListAPIView): - permission_classes = [IsAuthenticated] +class RequestEvaluationArchivedListAPIView(generics.ListAPIView): + permission_classes = [permissions.IsAuthenticated] + serializer_class = serializers.ListEvaluationrequestSerializer def get_queryset(self): return EvaluationrequestModel.objects.filter(is_archived=True) @extend_schema(tags=["EvaluationRequest"]) -class ArchivedReqEvaluation(APIView): - permission_classes = [IsAuthenticated] +class RequestEvaluationArchiveAPIView(views.APIView): + permission_classes = [permissions.IsAuthenticated] + @transaction.atomic def post(self, request, pk): req_evaluation = get_object_or_404(EvaluationrequestModel, pk=pk) req_evaluation.is_archived = request.data["is_archived"] req_evaluation.save() - - return Response({"success": True, - "status": req_evaluation.status, - "id": req_evaluation.pk}) - - + return Response( + { + "success": True, + "status": req_evaluation.status, + "id": req_evaluation.pk + }, + status=status.HTTP_200_OK + ) diff --git a/core/apps/evaluation/views/tech_passport.py b/core/apps/evaluation/views/tech_passport.py index b1af112..6c8eac8 100644 --- a/core/apps/evaluation/views/tech_passport.py +++ b/core/apps/evaluation/views/tech_passport.py @@ -1,15 +1,15 @@ +# rest framework from rest_framework.response import Response from rest_framework import status from rest_framework.permissions import IsAuthenticated from rest_framework.generics import GenericAPIView -from drf_spectacular.utils import ( - extend_schema, - OpenApiExample, -) +# swagger +from drf_spectacular.utils import extend_schema +# core apps from core.services.tech_passport import TechPassportService -from ..serializers import TechPassportSerializer +from core.apps.serializers import TechPassportSerializer class TechPassportAPIView(GenericAPIView): @@ -18,12 +18,6 @@ class TechPassportAPIView(GenericAPIView): @extend_schema( tags=["Tech Passport"], - summary="Get vehicle information by technical passport", - description=( - "This endpoint retrieves vehicle information using " - "autonumber, technical passport number, and technical passport series " - "via Gross Insurance API integration." - ), request=TechPassportSerializer, responses={ 200: dict, @@ -45,15 +39,13 @@ class TechPassportAPIView(GenericAPIView): response_data = result["data"] status_code = result["status_code"] - # success bo‘lsa faqat data ichidagi data qaytariladi if status_code == 200: return Response( response_data.get("data", {}), status=status.HTTP_200_OK ) - # error bo‘lsa original response qaytariladi return Response( response_data, status=status_code - ) \ No newline at end of file + ) diff --git a/core/apps/evaluation/views/valuation.py b/core/apps/evaluation/views/valuation.py index a439393..b989523 100644 --- a/core/apps/evaluation/views/valuation.py +++ b/core/apps/evaluation/views/valuation.py @@ -1,25 +1,27 @@ +# django core from django_core.mixins import BaseViewSetMixin + +# swagger from drf_spectacular.utils import extend_schema + +# rest framework from rest_framework.permissions import AllowAny from rest_framework.viewsets import ReadOnlyModelViewSet +# core apps from core.apps.evaluation.models import ValuationModel -from core.apps.evaluation.serializers.valuation import ( - CreateValuationSerializer, - ListValuationSerializer, - RetrieveValuationSerializer, -) +from core.apps.evaluation.serializers import valuation as serializers @extend_schema(tags=["Valuation"]) class ValuationView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = ValuationModel.objects.all() - serializer_class = ListValuationSerializer + serializer_class = serializers.ListValuationSerializer permission_classes = [AllowAny] action_permission_classes = {} action_serializer_class = { - "list": ListValuationSerializer, - "retrieve": RetrieveValuationSerializer, - "create": CreateValuationSerializer, + "list": serializers.ListValuationSerializer, + "retrieve": serializers.RetrieveValuationSerializer, + "create": serializers.CreateValuationSerializer, } diff --git a/core/apps/evaluation/views/vehicle.py b/core/apps/evaluation/views/vehicle.py index 437d402..b250b7a 100644 --- a/core/apps/evaluation/views/vehicle.py +++ b/core/apps/evaluation/views/vehicle.py @@ -1,14 +1,16 @@ +# django core from django_core.mixins import BaseViewSetMixin + +# swagger from drf_spectacular.utils import extend_schema + +# rest framework from rest_framework.permissions import AllowAny from rest_framework.viewsets import ReadOnlyModelViewSet +# core apps from core.apps.evaluation.models import VehicleModel -from core.apps.evaluation.serializers.vehicle import ( - CreateVehicleSerializer, - ListVehicleSerializer, - RetrieveVehicleSerializer, -) +from core.apps.evaluation.serializers import vehicle as serialziers @extend_schema(tags=["Vehicle"]) @@ -16,12 +18,12 @@ class VehicleView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = VehicleModel.objects.select_related( "brand", "model", "color", "fuel_type", "body_type", "position", ).all() - serializer_class = ListVehicleSerializer + serializer_class = serialziers.ListVehicleSerializer permission_classes = [AllowAny] action_permission_classes = {} action_serializer_class = { - "list": ListVehicleSerializer, - "retrieve": RetrieveVehicleSerializer, - "create": CreateVehicleSerializer, + "list": serialziers.ListVehicleSerializer, + "retrieve": serialziers.RetrieveVehicleSerializer, + "create": serialziers.CreateVehicleSerializer, }