changing code structure

This commit is contained in:
xoliqberdiyev
2026-04-27 16:49:07 +05:00
parent 7134b2c185
commit e3e7f18d7f
21 changed files with 345 additions and 428 deletions

View File

@@ -13,17 +13,23 @@ from core.apps.evaluation.models import ReferenceitemModel
class EvaluationrequestModel(AbstractBaseModel): class EvaluationrequestModel(AbstractBaseModel):
# request sender
user = models.ForeignKey( user = models.ForeignKey(
"accounts.User", "accounts.User",
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name="evaluation_requests", related_name="evaluation_requests",
verbose_name=_("user"), verbose_name=_("user"),
) )
# request type -> "Automobil", "Ko'chmas mulk", "Uskuna"
rate_type = models.CharField( rate_type = models.CharField(
verbose_name=_("rate type"), verbose_name=_("rate type"),
max_length=50, max_length=50,
choices=EvaluationRateType.choices, choices=EvaluationRateType.choices,
) )
###################
# Automobil fields
###################
object_type = models.CharField( object_type = models.CharField(
verbose_name=_("object type"), verbose_name=_("object type"),
max_length=50, max_length=50,
@@ -45,6 +51,21 @@ class EvaluationrequestModel(AbstractBaseModel):
blank=True, blank=True,
null=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( value_determined = models.ForeignKey(
"evaluation.ReferenceitemModel", "evaluation.ReferenceitemModel",
verbose_name=_("value determined"), verbose_name=_("value determined"),
@@ -77,21 +98,10 @@ class EvaluationrequestModel(AbstractBaseModel):
blank=True, blank=True,
null=True, null=True,
) )
worked_hours = models.IntegerField(
verbose_name=_("worked hours"), ###################
blank=True, # Location fields
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_name = models.CharField( location_name = models.CharField(
verbose_name=_("location name"), verbose_name=_("location name"),
max_length=255, max_length=255,
@@ -112,6 +122,14 @@ class EvaluationrequestModel(AbstractBaseModel):
blank=True, blank=True,
null=True, null=True,
) )
###################
# Other fields
###################
need_delivering = models.BooleanField(
verbose_name=_("need delivering"),
default=True,
)
status = models.CharField( status = models.CharField(
verbose_name=_("status"), verbose_name=_("status"),
max_length=50, max_length=50,
@@ -122,6 +140,7 @@ class EvaluationrequestModel(AbstractBaseModel):
verbose_name=_("is archive"), verbose_name=_("is archive"),
default=False, default=False,
) )
def __str__(self): def __str__(self):
return f"Requests #{self.pk}{self.get_rate_type_display()}" return f"Requests #{self.pk}{self.get_rate_type_display()}"

View File

@@ -92,7 +92,6 @@ class RetrieveEvaluationrequestSerializer(BaseEvaluationrequestSerializer):
class CreateEvaluationrequestSerializer(serializers.ModelSerializer): class CreateEvaluationrequestSerializer(serializers.ModelSerializer):
location = serializers.DictField(required=False, allow_empty=True) location = serializers.DictField(required=False, allow_empty=True)
# locationName — string qabul qiladi, location ichida yoki tashqarida yuborsa bo'ladi
locationName = serializers.CharField( locationName = serializers.CharField(
write_only=True, write_only=True,
required=False, required=False,
@@ -100,8 +99,6 @@ class CreateEvaluationrequestSerializer(serializers.ModelSerializer):
allow_blank=True, allow_blank=True,
) )
# Faqat truck_car uchun majburiy — field darajasida optional qilib belgilaymiz,
# validate() da object_type ga qarab tekshiramiz
worked_hours = serializers.IntegerField( worked_hours = serializers.IntegerField(
required=False, required=False,
allow_null=True, allow_null=True,
@@ -157,7 +154,6 @@ class CreateEvaluationrequestSerializer(serializers.ModelSerializer):
{"tex_passport": "rate_type 'auto' bo'lganda tex_passport majburiy."} {"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 object_type == "truck_car":
if attrs.get("worked_hours") is None: if attrs.get("worked_hours") is None:
raise serializers.ValidationError( raise serializers.ValidationError(

View File

@@ -1,105 +1,86 @@
from django.urls import include, path from django.urls import include, path
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from .views import ( from core.apps.evaluation import views
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,
)
router = DefaultRouter() router = DefaultRouter()
router.register("document-category", DocumentCategoryView, basename="DocumentCategory") router.register("document-category", views.DocumentCategoryView, basename="DocumentCategory")
router.register("document", DocumentView, basename="Document") router.register("document", views.DocumentView, basename="Document")
router.register("auto-evaluation-history", AutoEvaluationHistoryView, basename="auto-evaluation-history") router.register("auto-evaluation-history", views.AutoEvaluationHistoryView, basename="auto-evaluation-history")
router.register("quick-evaluation-history", QuickEvaluationHistoryView, basename="quick-evaluation-history") router.register("quick-evaluation-history", views.QuickEvaluationHistoryView, basename="quick-evaluation-history")
router.register("determined-value", DeterminedValueView, basename="determined-value") router.register("determined-value", views.DeterminedValueView, basename="determined-value")
router.register("evaluation-purpose", EvaluationPurposeView, basename="evaluation-purpose") router.register("evaluation-purpose", views.EvaluationPurposeView, basename="evaluation-purpose")
router.register("property-rights", PropertyRightsView, basename="property-rights") router.register("property-rights", views.PropertyRightsView, basename="property-rights")
router.register("ownership-form", OwnershipFormView, basename="ownership-form") router.register("ownership-form", views.OwnershipFormView, basename="ownership-form")
router.register("evaluation-request", EvaluationrequestView, basename="evaluation-request") router.register("evaluation-request", views.EvaluationrequestView, basename="evaluation-request")
router.register("admin-evaluation-request", AdminEvaluationrequestView, basename="admin-evaluation-request") router.register("admin-evaluation-request", views.AdminEvaluationrequestView, basename="admin-evaluation-request")
router.register("reference-item", ReferenceitemView, basename="reference-item") router.register("reference-item", views.ReferenceitemView, basename="reference-item")
router.register("valuation-document", ValuationDocumentView, basename="valuation-document") router.register("valuation-document", views.ValuationDocumentView, basename="valuation-document")
router.register("evaluation-report", EvaluationReportView, basename="evaluation-report") router.register("evaluation-report", views.EvaluationReportView, basename="evaluation-report")
router.register("quick-evaluation", QuickEvaluationView, basename="quick-evaluation") router.register("quick-evaluation", views.QuickEvaluationView, basename="quick-evaluation")
router.register("movable-property-evaluation", MovablePropertyEvaluationView, basename="movable-property-evaluation") router.register("movable-property-evaluation", views.MovablePropertyEvaluationView, basename="movable-property-evaluation")
router.register("real-estate-evaluation", RealEstateEvaluationView, basename="real-estate-evaluation") router.register("real-estate-evaluation", views.RealEstateEvaluationView, basename="real-estate-evaluation")
router.register("auto-evaluation", AutoEvaluationView, basename="auto-evaluation") router.register("auto-evaluation", views.AutoEvaluationView, basename="auto-evaluation")
router.register("vehicle", VehicleView, basename="vehicle") router.register("vehicle", views.VehicleView, basename="vehicle")
router.register("valuation", ValuationView, basename="valuation") router.register("valuation", views.ValuationView, basename="valuation")
router.register("property-owner", PropertyOwnerView, basename="property-owner") router.register("property-owner", views.PropertyOwnerView, basename="property-owner")
router.register("customer", CustomerView, basename="customer") router.register("customer", views.CustomerView, basename="customer")
router.register("certificate", CertificateView, basename="certificate") router.register("certificate", views.CertificateView, basename="certificate")
urlpatterns = [ urlpatterns = [
path("", include(router.urls)), path("", include(router.urls)),
path("auto-evaluation/appraisers/", include(
path("didox/info/<int:tin>/", views.DidoxCompanyInfoAPIView.as_view()),
path("tech-passport/", views.TechPassportAPIView.as_view()),
# Quick Evaluation
path('quick-evaluation/', include(
[ [
path("<int:id>/list/", AutoEvaluationListAppraisersView.as_view(), name="auto-evaluation-list-appraisers"), path(
path("<int:id>/set/", AutoEvaluationSetAppraisersView.as_view(), name="auto-evaluation-set-appraisers"), 'archive/', include(
path("<int:id>/remove/", AutoEvaluationRemoveAppraisersView.as_view(), name="auto-evaluation-remove-appraisers"), [
path("list/", views.QuickEvaluationArchivedListAPIView.as_view()),
path("<int:pk>/", views.QuickEvaluationArchiveAPIView.as_view()),
]
)
),
] ]
)), )),
# Auto Evaluation
path("auto-evaluation/", include(
[
path('archive/', include(
[
path('<int:pk>/', views.AutoEvaluationArchiveAPIView.as_view()),
path('list/', views.AutoEvaluationArchivedListAPIView.as_view())
]
)),
path('appraisers/', include(
[
path("<int:id>/list/", views.AutoEvaluationListAppraisersView.as_view()),
path("<int:id>/set/", views.AutoEvaluationSetAppraisersView.as_view()),
path("<int:id>/remove/", views.AutoEvaluationRemoveAppraisersView.as_view()),
]
))
]
)),
# Evaluation Request
path("evaluation-request/", include(
[
path("<int:pk>/change-status/", views.EvaluationStatusChange.as_view()),
path( path(
"didox/info/<int:tin>/", 'archive/', include(
DidoxCompanyInfoAPIView.as_view(), [
name="didox-info" path('list/', views.RequestEvaluationArchivedListAPIView.as_view()),
), path('<int:pk>/', views.RequestEvaluationArchiveAPIView.as_view()),
path( ]
"tech-passport/",
TechPassportAPIView.as_view(),
name="tech-passport"
),
path("evaluation-request/<int:pk>/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/<int:pk>", ChangeQuickevaluationAPIView.as_view(), name="change-quick-evaluation-archive"),
path("archive/evaluation-request/", ArchiveEvaluationrequestView.as_view(), name="evaluation-request-archive"),
path("archived-evaluvation/", GetArchivedAutoEvaluationListAPIView.as_view(),
name="archived-evaluation"),
path("auto-evaluvation-change-status/<int:pk>", ArchivedAutoEvaluation.as_view(),
name="archived-evaluation"),
path("req-evaluvation-change-status/<int:pk>", 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()),
] ]

View File

@@ -1,8 +1,10 @@
from django.db.models import Q from django.db.models import Q
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
from drf_spectacular.utils import extend_schema, OpenApiParameter from drf_spectacular.utils import extend_schema, OpenApiParameter
from rest_framework.filters import OrderingFilter, SearchFilter from rest_framework.filters import OrderingFilter, SearchFilter
from rest_framework.generics import GenericAPIView, ListAPIView from rest_framework.generics import GenericAPIView, ListAPIView
from rest_framework.permissions import AllowAny, IsAuthenticated 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.accounts.serializers.user import UserSerializer
from core.apps.evaluation.filters.auto import AutoevaluationFilter from core.apps.evaluation.filters.auto import AutoevaluationFilter
from core.apps.evaluation.models import AutoEvaluationModel from core.apps.evaluation.models import AutoEvaluationModel
from core.apps.evaluation.serializers.auto import ( from core.apps.evaluation.serializers import auto as serializers
CreateAutoevaluationSerializer,
ListAutoevaluationSerializer,
RetrieveAutoevaluationSerializer,
AutoEvaluationAppraisersSerializer,
UpdateAutoevaluationSerializer
)
@extend_schema(tags=["AutoEvaluation"]) @extend_schema(tags=["AutoEvaluation"])
class AutoEvaluationView(BaseViewSetMixin, ModelViewSet): class AutoEvaluationView(BaseViewSetMixin, ModelViewSet):
@@ -29,7 +24,7 @@ class AutoEvaluationView(BaseViewSetMixin, ModelViewSet):
"valuation__customer", "valuation__customer",
"vehicle", "vehicle",
).all() ).all()
serializer_class = ListAutoevaluationSerializer serializer_class = serializers.ListAutoevaluationSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
@@ -74,11 +69,11 @@ class AutoEvaluationView(BaseViewSetMixin, ModelViewSet):
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListAutoevaluationSerializer, "list": serializers.ListAutoevaluationSerializer,
"retrieve": RetrieveAutoevaluationSerializer, "retrieve": serializers.RetrieveAutoevaluationSerializer,
"create": CreateAutoevaluationSerializer, "create": serializers.CreateAutoevaluationSerializer,
"update": UpdateAutoevaluationSerializer, "update": serializers.UpdateAutoevaluationSerializer,
"partial_update": UpdateAutoevaluationSerializer, "partial_update": serializers.UpdateAutoevaluationSerializer,
} }
def serializer_context(self): def serializer_context(self):
@@ -89,7 +84,7 @@ class AutoEvaluationView(BaseViewSetMixin, ModelViewSet):
class AutoEvaluationSetAppraisersView(GenericAPIView): class AutoEvaluationSetAppraisersView(GenericAPIView):
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
queryset = AutoEvaluationModel.objects.all() queryset = AutoEvaluationModel.objects.all()
serializer_class = AutoEvaluationAppraisersSerializer serializer_class = serializers.AutoEvaluationAppraisersSerializer
def post(self, request, id): def post(self, request, id):
try: try:
@@ -108,7 +103,7 @@ class AutoEvaluationSetAppraisersView(GenericAPIView):
class AutoEvaluationRemoveAppraisersView(GenericAPIView): class AutoEvaluationRemoveAppraisersView(GenericAPIView):
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
queryset = AutoEvaluationModel.objects.all() queryset = AutoEvaluationModel.objects.all()
serializer_class = AutoEvaluationAppraisersSerializer serializer_class = serializers.AutoEvaluationAppraisersSerializer
def post(self, request, id): def post(self, request, id):
try: try:
@@ -158,21 +153,27 @@ class AutoEvaluationListAppraisersView(GenericAPIView):
@extend_schema(tags=["AutoEvaluation"]) @extend_schema(tags=["AutoEvaluation"])
class GetArchivedAutoEvaluationListAPIView(ListAPIView): class AutoEvaluationArchivedListAPIView(ListAPIView):
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
serializer_class = serializers.ListAutoevaluationSerializer
def get_queryset(self): def get_queryset(self):
return AutoEvaluationModel.objects.filter(is_archived=True) return AutoEvaluationModel.objects.filter(is_archived=True)
@extend_schema(tags=["AutoEvaluation"]) @extend_schema(tags=["AutoEvaluation"])
class ArchivedAutoEvaluation(APIView): class AutoEvaluationArchiveAPIView(APIView):
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
def post(self, request, pk): def post(self, request, pk):
auto_evaluation = get_object_or_404(AutoEvaluationModel, pk=pk) auto_evaluation = get_object_or_404(AutoEvaluationModel, pk=pk)
auto_evaluation.is_archived = request.data["is_archived"] auto_evaluation.is_archived = request.data["is_archived"]
auto_evaluation.save() auto_evaluation.save()
return Response({"success": True, return Response(
{
"success": True,
"status": auto_evaluation.status, "status": auto_evaluation.status,
"id": auto_evaluation.pk}, status=200) "id": auto_evaluation.pk
},
status=200
)

View File

@@ -1,12 +1,14 @@
# rest framework
from rest_framework import generics from rest_framework import generics
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import permissions from rest_framework import permissions
# core apps
from core.apps.evaluation.serializers.auto.AvgCost import AvgCostSerializer from core.apps.evaluation.serializers.auto.AvgCost import AvgCostSerializer
from core.services.grpc.auto import get_auto_avg_cost from core.services.grpc.auto import get_auto_avg_cost
class AvgCostView(generics.GenericAPIView): class AvgCostAPIView(generics.GenericAPIView):
serializer_class = AvgCostSerializer serializer_class = AvgCostSerializer
permission_classes = [permissions.IsAuthenticated] permission_classes = [permissions.IsAuthenticated]

View File

@@ -1,23 +1,27 @@
# django core
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
# swagger
from drf_spectacular.utils import extend_schema from drf_spectacular.utils import extend_schema
from rest_framework.permissions import IsAuthenticated
# rest framework
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from core.apps.evaluation.models import CertificateModel from rest_framework.permissions import IsAuthenticated
from core.apps.evaluation.serializers.certificate import BaseCertificateSerializer
from rest_framework.filters import SearchFilter from rest_framework.filters import SearchFilter
from rest_framework.parsers import MultiPartParser, FormParser 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) @extend_schema(tags=["Certificate"],request=BaseCertificateSerializer)
class CertificateView(BaseViewSetMixin, ModelViewSet): class CertificateView(BaseViewSetMixin, ModelViewSet):
queryset = CertificateModel.objects.all() queryset = CertificateModel.objects.all()
serializer_class = BaseCertificateSerializer serializer_class = BaseCertificateSerializer
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
parser_classes = [MultiPartParser, FormParser] parser_classes = [MultiPartParser, FormParser]
filter_backends = [SearchFilter] filter_backends = [SearchFilter]
search_fields = ["title"] search_fields = ["title"]
pagination_class = None pagination_class = None
action_permission_classes = {} action_permission_classes = {}

View File

@@ -3,44 +3,33 @@ from drf_spectacular.utils import extend_schema
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.viewsets import ReadOnlyModelViewSet from rest_framework.viewsets import ReadOnlyModelViewSet
# local apps
from core.apps.evaluation.models import CustomerModel, PropertyOwnerModel from core.apps.evaluation.models import CustomerModel, PropertyOwnerModel
from core.apps.evaluation.serializers.customer import ( from core.apps.evaluation.serializers import customer as serializers
CreateCustomerSerializer,
CreatePropertyOwnerSerializer,
ListCustomerSerializer,
ListPropertyOwnerSerializer,
RetrieveCustomerSerializer,
RetrievePropertyOwnerSerializer,
)
@extend_schema(tags=["Customer"]) @extend_schema(tags=["Customer"])
class CustomerView(BaseViewSetMixin, ReadOnlyModelViewSet): class CustomerView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = CustomerModel.objects.all() queryset = CustomerModel.objects.all()
serializer_class = ListCustomerSerializer serializer_class = serializers.ListCustomerSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListCustomerSerializer, "list": serializers.ListCustomerSerializer,
"retrieve": RetrieveCustomerSerializer, "retrieve": serializers.RetrieveCustomerSerializer,
"create": CreateCustomerSerializer, "create": serializers.CreateCustomerSerializer,
} }
@extend_schema(tags=["PropertyOwner"]) @extend_schema(tags=["PropertyOwner"])
class PropertyOwnerView(BaseViewSetMixin, ReadOnlyModelViewSet): class PropertyOwnerView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = PropertyOwnerModel.objects.all() queryset = PropertyOwnerModel.objects.all()
serializer_class = ListPropertyOwnerSerializer serializer_class = serializers.ListPropertyOwnerSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListPropertyOwnerSerializer, "list": serializers.ListPropertyOwnerSerializer,
"retrieve": RetrievePropertyOwnerSerializer, "retrieve": serializers.RetrievePropertyOwnerSerializer,
"create": CreatePropertyOwnerSerializer, "create": serializers.CreatePropertyOwnerSerializer,
} }
#test commit

View File

@@ -1,11 +1,13 @@
# rest framework
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import status from rest_framework import status
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.generics import GenericAPIView from rest_framework.generics import GenericAPIView
# swagger
from drf_spectacular.utils import extend_schema, OpenApiParameter from drf_spectacular.utils import extend_schema, OpenApiParameter
# local apps
from core.services.didox import DidoxService from core.services.didox import DidoxService
@@ -38,7 +40,6 @@ class DidoxCompanyInfoAPIView(GenericAPIView):
{"detail": "TIN must be a valid integer"}, {"detail": "TIN must be a valid integer"},
status=status.HTTP_400_BAD_REQUEST status=status.HTTP_400_BAD_REQUEST
) )
data = DidoxService.get_company_info(tin) data = DidoxService.get_company_info(tin)
if not data: if not data:
@@ -47,14 +48,11 @@ class DidoxCompanyInfoAPIView(GenericAPIView):
status=status.HTTP_502_BAD_GATEWAY status=status.HTTP_502_BAD_GATEWAY
) )
# if both name and personalNum are null/empty -> 404
name = data.get("name") name = data.get("name")
personal_num = data.get("personalNum") personal_num = data.get("personalNum")
if not name and not personal_num: if not name and not personal_num:
return Response( return Response(
{"detail": "Company or person not found"}, {"detail": "Company or person not found"},
status=status.HTTP_404_NOT_FOUND status=status.HTTP_404_NOT_FOUND
) )
return Response(data, status=status.HTTP_200_OK) return Response(data, status=status.HTTP_200_OK)

View File

@@ -1,51 +1,51 @@
# django
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
# swagger
from drf_spectacular.utils import extend_schema, OpenApiParameter from drf_spectacular.utils import extend_schema, OpenApiParameter
# rest framework
from rest_framework.exceptions import NotFound, PermissionDenied from rest_framework.exceptions import NotFound, PermissionDenied
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.viewsets import ReadOnlyModelViewSet, ModelViewSet from rest_framework.viewsets import ReadOnlyModelViewSet, ModelViewSet
from rest_framework.parsers import FormParser, MultiPartParser from rest_framework.parsers import FormParser, MultiPartParser
from rest_framework.decorators import action from rest_framework.decorators import action
from rest_framework.response import Response from rest_framework.response import Response
# filters
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
from core.apps.evaluation.models import DocumentModel, ValuationDocumentModel, AutoEvaluationModel from core.apps.evaluation.models import DocumentModel, ValuationDocumentModel, AutoEvaluationModel
from core.apps.evaluation.serializers.document import ( from core.apps.evaluation.serializers import document as serializers
CreateDocumentSerializer,
CreateValuationdocumentSerializer,
ListDocumentSerializer,
ListValuationdocumentSerializer,
RetrieveDocumentSerializer,
RetrieveValuationdocumentSerializer,
)
@extend_schema(tags=["ValuationDocument"]) @extend_schema(tags=["ValuationDocument"])
class ValuationDocumentView(BaseViewSetMixin, ReadOnlyModelViewSet): class ValuationDocumentView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = ValuationDocumentModel.objects.all() queryset = ValuationDocumentModel.objects.all()
serializer_class = ListValuationdocumentSerializer serializer_class = serializers.ListValuationdocumentSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListValuationdocumentSerializer, "list": serializers.ListValuationdocumentSerializer,
"retrieve": RetrieveValuationdocumentSerializer, "retrieve": serializers.RetrieveValuationdocumentSerializer,
"create": CreateValuationdocumentSerializer, "create": serializers.CreateValuationdocumentSerializer,
} }
@extend_schema(tags=["Document"]) @extend_schema(tags=["Document"])
class DocumentView(BaseViewSetMixin, ModelViewSet): class DocumentView(BaseViewSetMixin, ModelViewSet):
queryset = DocumentModel.objects.all() queryset = DocumentModel.objects.all()
serializer_class = ListDocumentSerializer serializer_class = serializers.ListDocumentSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
parser_classes = [FormParser, MultiPartParser] parser_classes = [FormParser, MultiPartParser]
filter_backends = [DjangoFilterBackend] filter_backends = [DjangoFilterBackend]
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListDocumentSerializer, "list": serializers.ListDocumentSerializer,
"retrieve": RetrieveDocumentSerializer, "retrieve": serializers.RetrieveDocumentSerializer,
"create": CreateDocumentSerializer, "create": serializers.CreateDocumentSerializer,
} }
@extend_schema( @extend_schema(
@@ -83,9 +83,9 @@ class DocumentView(BaseViewSetMixin, ModelViewSet):
documents = documents.filter(category_id=category_id) documents = documents.filter(category_id=category_id)
page = self.paginate_queryset(documents) page = self.paginate_queryset(documents)
if page is not None: 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) 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) return Response(serializer.data)
except AutoEvaluationModel.DoesNotExist: except AutoEvaluationModel.DoesNotExist:
raise NotFound("Auto evaluation not found") raise NotFound("Auto evaluation not found")

View File

@@ -1,8 +1,14 @@
# django core
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
# swagger
from drf_spectacular.utils import extend_schema from drf_spectacular.utils import extend_schema
# rest framework
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.viewsets import ReadOnlyModelViewSet from rest_framework.viewsets import ReadOnlyModelViewSet
# core apps
from core.apps.evaluation.models import DocumentcategoryModel from core.apps.evaluation.models import DocumentcategoryModel
from core.apps.evaluation.serializers.documentcategory import ( from core.apps.evaluation.serializers.documentcategory import (
ListDocumentcategorySerializer, ListDocumentcategorySerializer,

View File

@@ -1,24 +1,25 @@
# django
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
# django filters
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
# swagger
from drf_spectacular.utils import OpenApiParameter, extend_schema from drf_spectacular.utils import OpenApiParameter, extend_schema
# rest framework
from rest_framework.filters import OrderingFilter from rest_framework.filters import OrderingFilter
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.viewsets import ReadOnlyModelViewSet from rest_framework.viewsets import ReadOnlyModelViewSet
# core apps
from core.apps.evaluation.filters.history import ( from core.apps.evaluation.filters.history import (
AutoevaluationhistoryFilter, AutoevaluationhistoryFilter,
QuickevaluationhistoryFilter, QuickevaluationhistoryFilter,
) )
from core.apps.evaluation.models import AutoevaluationhistoryModel, QuickevaluationhistoryModel from core.apps.evaluation.models import AutoevaluationhistoryModel, QuickevaluationhistoryModel
from core.apps.evaluation.serializers.history import ( from core.apps.evaluation.serializers import history as serializers
CreateAutoevaluationhistorySerializer,
CreateQuickevaluationhistorySerializer,
ListAutoevaluationhistorySerializer,
ListQuickevaluationhistorySerializer,
RetrieveAutoevaluationhistorySerializer,
RetrieveQuickevaluationhistorySerializer,
)
@extend_schema( @extend_schema(
@@ -31,13 +32,12 @@ from core.apps.evaluation.serializers.history import (
], ],
) )
class AutoEvaluationHistoryView(BaseViewSetMixin, ReadOnlyModelViewSet): class AutoEvaluationHistoryView(BaseViewSetMixin, ReadOnlyModelViewSet):
# select_related("auto_evaluation") faqat retrieve uchun — list uchun kerak emas
queryset = AutoevaluationhistoryModel.objects.only( queryset = AutoevaluationhistoryModel.objects.only(
"id", "auto_evaluation_id", "event_type", "id", "auto_evaluation_id", "event_type",
"actor_id", "actor_full_name", "actor_role", "actor_id", "actor_full_name", "actor_role",
"meta", "created_at", "meta", "created_at",
) )
serializer_class = ListAutoevaluationhistorySerializer serializer_class = serializers.ListAutoevaluationhistorySerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
pagination_class = None pagination_class = None
@@ -55,14 +55,13 @@ class AutoEvaluationHistoryView(BaseViewSetMixin, ReadOnlyModelViewSet):
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListAutoevaluationhistorySerializer, "list": serializers.ListAutoevaluationhistorySerializer,
"retrieve": RetrieveAutoevaluationhistorySerializer, "retrieve": serializers.RetrieveAutoevaluationhistorySerializer,
"create": CreateAutoevaluationhistorySerializer, "create": serializers.CreateAutoevaluationhistorySerializer,
} }
def list(self, request, *args, **kwargs): def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset()) queryset = self.filter_queryset(self.get_queryset())
# Queryset bir marta evaluate qilinadi — COUNT uchun alohida query yo'q
results = list(queryset) results = list(queryset)
serializer = self.get_serializer(results, many=True) serializer = self.get_serializer(results, many=True)
return Response({ return Response({
@@ -88,7 +87,7 @@ class QuickEvaluationHistoryView(BaseViewSetMixin, ReadOnlyModelViewSet):
"actor_id", "actor_full_name", "actor_role", "actor_id", "actor_full_name", "actor_role",
"meta", "created_at", "meta", "created_at",
) )
serializer_class = ListQuickevaluationhistorySerializer serializer_class = serializers.ListQuickevaluationhistorySerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
pagination_class = None pagination_class = None
@@ -99,9 +98,9 @@ class QuickEvaluationHistoryView(BaseViewSetMixin, ReadOnlyModelViewSet):
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListQuickevaluationhistorySerializer, "list": serializers.ListQuickevaluationhistorySerializer,
"retrieve": RetrieveQuickevaluationhistorySerializer, "retrieve": serializers.RetrieveQuickevaluationhistorySerializer,
"create": CreateQuickevaluationhistorySerializer, "create": serializers.CreateQuickevaluationhistorySerializer,
} }
def list(self, request, *args, **kwargs): def list(self, request, *args, **kwargs):

View File

@@ -1,25 +1,27 @@
# django core
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
# swagger
from drf_spectacular.utils import extend_schema from drf_spectacular.utils import extend_schema
# rest framework
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.viewsets import ReadOnlyModelViewSet from rest_framework.viewsets import ReadOnlyModelViewSet
# core apps
from core.apps.evaluation.models import MovablePropertyEvaluationModel from core.apps.evaluation.models import MovablePropertyEvaluationModel
from core.apps.evaluation.serializers.movable import ( from core.apps.evaluation.serializers import movable as serializers
CreateMovablepropertyevaluationSerializer,
ListMovablepropertyevaluationSerializer,
RetrieveMovablepropertyevaluationSerializer,
)
@extend_schema(tags=["MovablePropertyEvaluation"]) @extend_schema(tags=["MovablePropertyEvaluation"])
class MovablePropertyEvaluationView(BaseViewSetMixin, ReadOnlyModelViewSet): class MovablePropertyEvaluationView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = MovablePropertyEvaluationModel.objects.all() queryset = MovablePropertyEvaluationModel.objects.all()
serializer_class = ListMovablepropertyevaluationSerializer serializer_class = serializers.ListMovablepropertyevaluationSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListMovablepropertyevaluationSerializer, "list": serializers.ListMovablepropertyevaluationSerializer,
"retrieve": RetrieveMovablepropertyevaluationSerializer, "retrieve": serializers.RetrieveMovablepropertyevaluationSerializer,
"create": CreateMovablepropertyevaluationSerializer, "create": serializers.CreateMovablepropertyevaluationSerializer,
} }

View File

@@ -1,7 +1,16 @@
# django
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
# django core
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
# django filters
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
# swagger
from drf_spectacular.utils import extend_schema from drf_spectacular.utils import extend_schema
# rest framework
from rest_framework import status from rest_framework import status
from rest_framework.filters import OrderingFilter, SearchFilter from rest_framework.filters import OrderingFilter, SearchFilter
from rest_framework.generics import ListAPIView 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.views import APIView
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
# core apps
from core.apps.evaluation.filters.quick import QuickevaluationFilter from core.apps.evaluation.filters.quick import QuickevaluationFilter
from core.apps.evaluation.models import QuickEvaluationModel from core.apps.evaluation.models import QuickEvaluationModel
from core.apps.evaluation.serializers.quick import ( from core.apps.evaluation.serializers import quick as serializers
CreateQuickevaluationSerializer,
ListQuickevaluationSerializer,
RetrieveQuickevaluationSerializer,
)
@extend_schema(tags=["QuickEvaluation"]) @extend_schema(tags=["QuickEvaluation"])
@@ -26,7 +32,7 @@ class QuickEvaluationView(BaseViewSetMixin, ModelViewSet):
"created_by", "brand", "marka", "color", "fuel_type", "created_by", "brand", "marka", "color", "fuel_type",
"body_type", "state_car", "car_position", "body_type", "state_car", "car_position",
).filter(is_archive=False) ).filter(is_archive=False)
serializer_class = ListQuickevaluationSerializer serializer_class = serializers.ListQuickevaluationSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
parser_classes = [MultiPartParser, FormParser] parser_classes = [MultiPartParser, FormParser]
@@ -51,14 +57,14 @@ class QuickEvaluationView(BaseViewSetMixin, ModelViewSet):
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListQuickevaluationSerializer, "list": serializers.ListQuickevaluationSerializer,
"retrieve": RetrieveQuickevaluationSerializer, "retrieve": serializers.RetrieveQuickevaluationSerializer,
"create": CreateQuickevaluationSerializer, "create": serializers.CreateQuickevaluationSerializer,
} }
@extend_schema(tags=["QuickEvaluation"]) @extend_schema(tags=["QuickEvaluation"])
class ChangeQuickevaluationAPIView(APIView): class QuickEvaluationArchiveAPIView(APIView):
def post(self, request, pk): def post(self, request, pk):
instance = get_object_or_404(QuickEvaluationModel, pk=pk) instance = get_object_or_404(QuickEvaluationModel, pk=pk)
@@ -69,14 +75,14 @@ class ChangeQuickevaluationAPIView(APIView):
{"error": "Поле 'is_archived' обязательно"}, {"error": "Поле 'is_archived' обязательно"},
status=status.HTTP_400_BAD_REQUEST status=status.HTTP_400_BAD_REQUEST
) )
instance.is_archived = is_archived instance.is_archive = is_archived
instance.save() instance.save()
return Response({"success": True}, status=200) return Response({"success": True}, status=200)
@extend_schema(tags=["QuickEvaluation"]) @extend_schema(tags=["QuickEvaluation"])
class GetArchivedQuickevaluationListAPIView(ListAPIView): class QuickEvaluationArchivedListAPIView(ListAPIView):
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
def get_queryset(self): def get_queryset(self):
return QuickEvaluationModel.objects.filter(is_archived=True) return QuickEvaluationModel.objects.filter(is_archive=True)

View File

@@ -1,25 +1,27 @@
# django core
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
# swagger
from drf_spectacular.utils import extend_schema from drf_spectacular.utils import extend_schema
# rest framework
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.viewsets import ReadOnlyModelViewSet from rest_framework.viewsets import ReadOnlyModelViewSet
# core
from core.apps.evaluation.models import RealEstateEvaluationModel from core.apps.evaluation.models import RealEstateEvaluationModel
from core.apps.evaluation.serializers.real_estate import ( from core.apps.evaluation.serializers import real_estate as serializers
CreateRealestateevaluationSerializer,
ListRealestateevaluationSerializer,
RetrieveRealestateevaluationSerializer,
)
@extend_schema(tags=["RealEstateEvaluation"]) @extend_schema(tags=["RealEstateEvaluation"])
class RealEstateEvaluationView(BaseViewSetMixin, ReadOnlyModelViewSet): class RealEstateEvaluationView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = RealEstateEvaluationModel.objects.all() queryset = RealEstateEvaluationModel.objects.all()
serializer_class = ListRealestateevaluationSerializer serializer_class = serializers.ListRealestateevaluationSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListRealestateevaluationSerializer, "list": serializers.ListRealestateevaluationSerializer,
"retrieve": RetrieveRealestateevaluationSerializer, "retrieve": serializers.RetrieveRealestateevaluationSerializer,
"create": CreateRealestateevaluationSerializer, "create": serializers.CreateRealestateevaluationSerializer,
} }

View File

@@ -1,20 +1,21 @@
# django core
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
# django filters
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
# swagger
from drf_spectacular.utils import extend_schema from drf_spectacular.utils import extend_schema
# rest framework
from rest_framework.filters import OrderingFilter, SearchFilter from rest_framework.filters import OrderingFilter, SearchFilter
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.viewsets import ReadOnlyModelViewSet from rest_framework.viewsets import ReadOnlyModelViewSet
# core apps
from core.apps.evaluation.filters.reference import ReferenceitemFilter from core.apps.evaluation.filters.reference import ReferenceitemFilter
from core.apps.evaluation.models import ReferenceitemModel from core.apps.evaluation.models import ReferenceitemModel
from core.apps.evaluation.serializers.reference import ( from core.apps.evaluation.serializers import reference as serializers
CreateReferenceitemSerializer,
ListReferenceitemSerializer,
RetrieveReferenceitemSerializer,
EvaluationPurposeSerializer,
DeterminedValueSerializer,
LabelValueSerializer,
)
@extend_schema(tags=["EvaluationPurpose"]) @extend_schema(tags=["EvaluationPurpose"])
@@ -22,10 +23,9 @@ class EvaluationPurposeView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = ReferenceitemModel.objects.filter( queryset = ReferenceitemModel.objects.filter(
type="evaluation_purpose", is_active=True type="evaluation_purpose", is_active=True
).order_by("order", "name") ).order_by("order", "name")
serializer_class = EvaluationPurposeSerializer serializer_class = serializers.EvaluationPurposeSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
pagination_class = None pagination_class = None
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
search_fields = ["name"] search_fields = ["name"]
ordering_fields = ["name", "order"] ordering_fields = ["name", "order"]
@@ -37,10 +37,9 @@ class DeterminedValueView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = ReferenceitemModel.objects.filter( queryset = ReferenceitemModel.objects.filter(
type="determined_value", is_active=True type="determined_value", is_active=True
).order_by("order", "name") ).order_by("order", "name")
serializer_class = DeterminedValueSerializer serializer_class = serializers.DeterminedValueSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
pagination_class = None pagination_class = None
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
search_fields = ["name"] search_fields = ["name"]
ordering_fields = ["name", "order"] ordering_fields = ["name", "order"]
@@ -52,10 +51,9 @@ class PropertyRightsView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = ReferenceitemModel.objects.filter( queryset = ReferenceitemModel.objects.filter(
type="property_rights", is_active=True type="property_rights", is_active=True
).order_by("order", "name") ).order_by("order", "name")
serializer_class = LabelValueSerializer serializer_class = serializers.LabelValueSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
pagination_class = None pagination_class = None
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
search_fields = ["name"] search_fields = ["name"]
ordering_fields = ["name", "order"] ordering_fields = ["name", "order"]
@@ -67,10 +65,9 @@ class OwnershipFormView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = ReferenceitemModel.objects.filter( queryset = ReferenceitemModel.objects.filter(
type="ownership_form", is_active=True type="ownership_form", is_active=True
).order_by("order", "name") ).order_by("order", "name")
serializer_class = LabelValueSerializer serializer_class = serializers.LabelValueSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
pagination_class = None pagination_class = None
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
search_fields = ["name"] search_fields = ["name"]
ordering_fields = ["name", "order"] ordering_fields = ["name", "order"]
@@ -80,18 +77,16 @@ class OwnershipFormView(BaseViewSetMixin, ReadOnlyModelViewSet):
@extend_schema(tags=["ReferenceItem"]) @extend_schema(tags=["ReferenceItem"])
class ReferenceitemView(BaseViewSetMixin, ReadOnlyModelViewSet): class ReferenceitemView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = ReferenceitemModel.objects.select_related("parent").filter(is_active=True) queryset = ReferenceitemModel.objects.select_related("parent").filter(is_active=True)
serializer_class = ListReferenceitemSerializer serializer_class = serializers.ListReferenceitemSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_class = ReferenceitemFilter filterset_class = ReferenceitemFilter
search_fields = ["name"] search_fields = ["name"]
ordering_fields = ["name", "order", "type"] ordering_fields = ["name", "order", "type"]
ordering = ["order", "name"] ordering = ["order", "name"]
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListReferenceitemSerializer, "list": serializers.ListReferenceitemSerializer,
"retrieve": RetrieveReferenceitemSerializer, "retrieve": serializers.RetrieveReferenceitemSerializer,
"create": CreateReferenceitemSerializer, "create": serializers.CreateReferenceitemSerializer,
} }

View File

@@ -1,25 +1,26 @@
# django core
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
# swagger
from drf_spectacular.utils import extend_schema from drf_spectacular.utils import extend_schema
# rest framework
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.viewsets import ReadOnlyModelViewSet from rest_framework.viewsets import ReadOnlyModelViewSet
# core apps
from core.apps.evaluation.models import EvaluationReportModel from core.apps.evaluation.models import EvaluationReportModel
from core.apps.evaluation.serializers.report import ( from core.apps.evaluation.serializers import report as serializers
CreateEvaluationreportSerializer,
ListEvaluationreportSerializer,
RetrieveEvaluationreportSerializer,
)
@extend_schema(tags=["EvaluationReport"]) @extend_schema(tags=["EvaluationReport"])
class EvaluationReportView(BaseViewSetMixin, ReadOnlyModelViewSet): class EvaluationReportView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = EvaluationReportModel.objects.all() queryset = EvaluationReportModel.objects.all()
serializer_class = ListEvaluationreportSerializer serializer_class = serializers.ListEvaluationreportSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListEvaluationreportSerializer, "list": serializers.ListEvaluationreportSerializer,
"retrieve": RetrieveEvaluationreportSerializer, "retrieve": serializers.RetrieveEvaluationreportSerializer,
"create": CreateEvaluationreportSerializer, "create": serializers.CreateEvaluationreportSerializer,
} }

View File

@@ -1,41 +1,33 @@
# django
from django.db.models.base import transaction
from django.shortcuts import get_object_or_404 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.accounts.choices import RoleChoice
from core.apps.evaluation.choices.request import RequestStatus from core.apps.evaluation.choices.request import RequestStatus
from core.apps.evaluation.filters.request import EvaluationrequestFilter from core.apps.evaluation.filters.request import EvaluationrequestFilter
from core.apps.evaluation.models import EvaluationrequestModel from core.apps.evaluation.models import EvaluationrequestModel
from core.apps.evaluation.serializers.request import ( from core.apps.evaluation.serializers import request as serializers
CreateEvaluationrequestSerializer,
ListEvaluationrequestSerializer,
RetrieveEvaluationrequestSerializer,
ArchiveEvaluationrequestSerializer,
)
# class RequestPagination(PageNumberPagination):
# page_size = 20
# page_size_query_param = "limit"
# max_page_size = 100
@extend_schema(tags=["EvaluationRequest"]) @extend_schema(tags=["EvaluationRequest"])
class EvaluationrequestView(BaseViewSetMixin, ModelViewSet): class EvaluationrequestView(BaseViewSetMixin, viewsets.ModelViewSet):
serializer_class = ListEvaluationrequestSerializer serializer_class = serializers.ListEvaluationrequestSerializer
permission_classes = [IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
# pagination_class = RequestPagination filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_class = EvaluationrequestFilter filterset_class = EvaluationrequestFilter
search_fields = [ search_fields = [
"customer_inn_number", "customer_inn_number",
@@ -70,9 +62,9 @@ class EvaluationrequestView(BaseViewSetMixin, ModelViewSet):
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListEvaluationrequestSerializer, "list": serializers.ListEvaluationrequestSerializer,
"retrieve": RetrieveEvaluationrequestSerializer, "retrieve": serializers.RetrieveEvaluationrequestSerializer,
"create": CreateEvaluationrequestSerializer, "create": serializers.CreateEvaluationrequestSerializer,
} }
def serializer_context(self): def serializer_context(self):
@@ -85,12 +77,10 @@ class EvaluationrequestView(BaseViewSetMixin, ModelViewSet):
@extend_schema(tags=["EvaluationRequest"]) @extend_schema(tags=["EvaluationRequest"])
class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet): class AdminEvaluationrequestView(BaseViewSetMixin, viewsets.ModelViewSet):
serializer_class = ListEvaluationrequestSerializer serializer_class = serializers.ListEvaluationrequestSerializer
permission_classes = [IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
# pagination_class = RequestPagination filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_class = EvaluationrequestFilter filterset_class = EvaluationrequestFilter
search_fields = [ search_fields = [
"customer_inn_number", "customer_inn_number",
@@ -125,29 +115,29 @@ class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet):
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListEvaluationrequestSerializer, "list": serializers.ListEvaluationrequestSerializer,
"retrieve": RetrieveEvaluationrequestSerializer, "retrieve": serializers.RetrieveEvaluationrequestSerializer,
"create": CreateEvaluationrequestSerializer, "create": serializers.CreateEvaluationrequestSerializer,
} }
def get_queryset(self): def get_queryset(self):
return EvaluationrequestModel.objects.select_related("value_determined", "rate_goal", "property_rights", return EvaluationrequestModel.objects.\
"form_ownership", "user").order_by("-created_at") select_related("value_determined","rate_goal","property_rights","form_ownership","user")\
.order_by("-created_at")
def serializer_context(self): def serializer_context(self):
return self.serializer_class(context={"request": self.request}) return self.serializer_class(context={"request": self.request})
@extend_schema(tags=["EvaluationRequest"]) @extend_schema(tags=["EvaluationRequest"])
class EvaluationStatusChange(APIView): class EvaluationStatusChange(views.APIView):
permission_classes = [IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
def post(self, request, pk): def post(self, request, pk):
if request.user.role not in [RoleChoice.ADMIN, RoleChoice.SUPERUSER]: if request.user.role not in [RoleChoice.ADMIN, RoleChoice.SUPERUSER]:
return Response({'detail': 'Forbidden'}, status=status.HTTP_403_FORBIDDEN) return Response({'detail': 'Forbidden'}, status=status.HTTP_403_FORBIDDEN)
evaluation = get_object_or_404(EvaluationrequestModel, pk=pk) evaluation = get_object_or_404(EvaluationrequestModel, pk=pk)
status_value = request.data.get('status') status_value = request.data.get('status')
if not status_value: if not status_value:
return Response({'detail': 'Status is required'}, status=status.HTTP_400_BAD_REQUEST) return Response({'detail': 'Status is required'}, status=status.HTTP_400_BAD_REQUEST)
@@ -176,98 +166,28 @@ class EvaluationStatusChange(APIView):
@extend_schema(tags=["EvaluationRequest"]) @extend_schema(tags=["EvaluationRequest"])
class ArchiveEvaluationrequestView(GenericAPIView): class RequestEvaluationArchivedListAPIView(generics.ListAPIView):
permission_classes = [IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
serializer_class = serializers.ListEvaluationrequestSerializer
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]
def get_queryset(self): def get_queryset(self):
return EvaluationrequestModel.objects.filter(is_archived=True) return EvaluationrequestModel.objects.filter(is_archived=True)
@extend_schema(tags=["EvaluationRequest"]) @extend_schema(tags=["EvaluationRequest"])
class ArchivedReqEvaluation(APIView): class RequestEvaluationArchiveAPIView(views.APIView):
permission_classes = [IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
@transaction.atomic
def post(self, request, pk): def post(self, request, pk):
req_evaluation = get_object_or_404(EvaluationrequestModel, pk=pk) req_evaluation = get_object_or_404(EvaluationrequestModel, pk=pk)
req_evaluation.is_archived = request.data["is_archived"] req_evaluation.is_archived = request.data["is_archived"]
req_evaluation.save() req_evaluation.save()
return Response(
return Response({"success": True, {
"success": True,
"status": req_evaluation.status, "status": req_evaluation.status,
"id": req_evaluation.pk}) "id": req_evaluation.pk
},
status=status.HTTP_200_OK
)

View File

@@ -1,15 +1,15 @@
# rest framework
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import status from rest_framework import status
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.generics import GenericAPIView from rest_framework.generics import GenericAPIView
from drf_spectacular.utils import ( # swagger
extend_schema, from drf_spectacular.utils import extend_schema
OpenApiExample,
)
# core apps
from core.services.tech_passport import TechPassportService from core.services.tech_passport import TechPassportService
from ..serializers import TechPassportSerializer from core.apps.serializers import TechPassportSerializer
class TechPassportAPIView(GenericAPIView): class TechPassportAPIView(GenericAPIView):
@@ -18,12 +18,6 @@ class TechPassportAPIView(GenericAPIView):
@extend_schema( @extend_schema(
tags=["Tech Passport"], 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, request=TechPassportSerializer,
responses={ responses={
200: dict, 200: dict,
@@ -45,14 +39,12 @@ class TechPassportAPIView(GenericAPIView):
response_data = result["data"] response_data = result["data"]
status_code = result["status_code"] status_code = result["status_code"]
# success bolsa faqat data ichidagi data qaytariladi
if status_code == 200: if status_code == 200:
return Response( return Response(
response_data.get("data", {}), response_data.get("data", {}),
status=status.HTTP_200_OK status=status.HTTP_200_OK
) )
# error bolsa original response qaytariladi
return Response( return Response(
response_data, response_data,
status=status_code status=status_code

View File

@@ -1,25 +1,27 @@
# django core
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
# swagger
from drf_spectacular.utils import extend_schema from drf_spectacular.utils import extend_schema
# rest framework
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.viewsets import ReadOnlyModelViewSet from rest_framework.viewsets import ReadOnlyModelViewSet
# core apps
from core.apps.evaluation.models import ValuationModel from core.apps.evaluation.models import ValuationModel
from core.apps.evaluation.serializers.valuation import ( from core.apps.evaluation.serializers import valuation as serializers
CreateValuationSerializer,
ListValuationSerializer,
RetrieveValuationSerializer,
)
@extend_schema(tags=["Valuation"]) @extend_schema(tags=["Valuation"])
class ValuationView(BaseViewSetMixin, ReadOnlyModelViewSet): class ValuationView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = ValuationModel.objects.all() queryset = ValuationModel.objects.all()
serializer_class = ListValuationSerializer serializer_class = serializers.ListValuationSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListValuationSerializer, "list": serializers.ListValuationSerializer,
"retrieve": RetrieveValuationSerializer, "retrieve": serializers.RetrieveValuationSerializer,
"create": CreateValuationSerializer, "create": serializers.CreateValuationSerializer,
} }

View File

@@ -1,14 +1,16 @@
# django core
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
# swagger
from drf_spectacular.utils import extend_schema from drf_spectacular.utils import extend_schema
# rest framework
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.viewsets import ReadOnlyModelViewSet from rest_framework.viewsets import ReadOnlyModelViewSet
# core apps
from core.apps.evaluation.models import VehicleModel from core.apps.evaluation.models import VehicleModel
from core.apps.evaluation.serializers.vehicle import ( from core.apps.evaluation.serializers import vehicle as serialziers
CreateVehicleSerializer,
ListVehicleSerializer,
RetrieveVehicleSerializer,
)
@extend_schema(tags=["Vehicle"]) @extend_schema(tags=["Vehicle"])
@@ -16,12 +18,12 @@ class VehicleView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = VehicleModel.objects.select_related( queryset = VehicleModel.objects.select_related(
"brand", "model", "color", "fuel_type", "body_type", "position", "brand", "model", "color", "fuel_type", "body_type", "position",
).all() ).all()
serializer_class = ListVehicleSerializer serializer_class = serialziers.ListVehicleSerializer
permission_classes = [AllowAny] permission_classes = [AllowAny]
action_permission_classes = {} action_permission_classes = {}
action_serializer_class = { action_serializer_class = {
"list": ListVehicleSerializer, "list": serialziers.ListVehicleSerializer,
"retrieve": RetrieveVehicleSerializer, "retrieve": serialziers.RetrieveVehicleSerializer,
"create": CreateVehicleSerializer, "create": serialziers.CreateVehicleSerializer,
} }