From 1a908035274c169c0e591fd3f137080364df3fbe Mon Sep 17 00:00:00 2001 From: Husanjonazamov Date: Mon, 2 Mar 2026 12:31:16 +0500 Subject: [PATCH] hamma modellarda get serizlizers uchun fiedl qoshilfi --- API_ENDPOINTS.md | 114 ++++++++++++++++++ core/apps/accounts/admin/user.py | 3 +- core/apps/evaluation/admin/auto.py | 2 +- core/apps/evaluation/admin/document.py | 2 +- core/apps/evaluation/admin/movable.py | 2 +- core/apps/evaluation/admin/quick.py | 2 +- core/apps/evaluation/admin/real_estate.py | 2 +- core/apps/evaluation/admin/report.py | 2 +- core/apps/evaluation/admin/valuation.py | 2 +- core/apps/evaluation/models/real_estate.py | 4 +- .../serializers/auto/AutoEvaluation.py | 29 +++-- .../serializers/customer/Customer.py | 61 ++++++++-- .../serializers/customer/PropertyOwner.py | 61 ++++++++-- .../serializers/document/ValuationDocument.py | 35 ++++-- .../movable/MovablePropertyEvaluation.py | 42 +++++-- .../serializers/quick/QuickEvaluation.py | 50 ++++++-- .../real_estate/RealEstateEvaluation.py | 27 +++-- .../serializers/report/EvaluationReport.py | 33 +++-- .../serializers/valuation/Valuation.py | 31 +++-- .../evaluation/serializers/vehicle/Vehicle.py | 47 ++++++-- core/apps/payment/admin/payment.py | 2 +- .../payment/serializers/payment/payment.py | 46 +++++-- 22 files changed, 495 insertions(+), 104 deletions(-) create mode 100644 API_ENDPOINTS.md diff --git a/API_ENDPOINTS.md b/API_ENDPOINTS.md new file mode 100644 index 0000000..482d5ef --- /dev/null +++ b/API_ENDPOINTS.md @@ -0,0 +1,114 @@ +# SifatBaho — GET API Endpoints + +> Barcha endpointlar hozirda `AllowAny` permission bilan ishlaydi. +> Token yuborish shart emas (hozircha). +> Base URL: `http://localhost:8000/api/v1/` + +--- + +## 🔐 Auth (Autentifikatsiya) + +| # | URL | Method | Tavsif | +|---|-----|--------|--------| +| 1 | `api/v1/auth/token/` | POST | Login — access va refresh token olish | +| 2 | `api/v1/auth/token/refresh/` | POST | Access tokenni yangilash | +| 3 | `api/v1/auth/token/verify/` | POST | Tokenni tekshirish | + +--- + +## 👤 Buyurtmachilar + +| # | URL | Method | Token | Tavsif | +|---|-----|--------|-------|--------| +| 1 | `api/v1/customer/` | GET | ❌ | Barcha buyurtmachilar ro'yxati (ism, INN, JSHSHIR) | +| 2 | `api/v1/customer/{id}/` | GET | ❌ | Bitta buyurtmachining to'liq ma'lumotlari (passport, manzil, bank) | +| 3 | `api/v1/property-owner/` | GET | ❌ | Barcha mulk egalari ro'yxati | +| 4 | `api/v1/property-owner/{id}/` | GET | ❌ | Bitta mulk egasining to'liq ma'lumotlari | + +--- + +## 📋 Arizalar (Valuation) + +| # | URL | Method | Token | Tavsif | +|---|-----|--------|-------|--------| +| 5 | `api/v1/valuation/` | GET | ❌ | Barcha arizalar ro'yxati (raqam, tur, status, narx) | +| 6 | `api/v1/valuation/{id}/` | GET | ❌ | Bitta arizaning to'liq ma'lumotlari (buyurtmachi, baholovchi, narxlar) | + +--- + +## 🚗 Transport vositalari + +| # | URL | Method | Token | Tavsif | +|---|-----|--------|-------|--------| +| 7 | `api/v1/vehicle/` | GET | ❌ | Barcha transportlar ro'yxati (marka, model, raqam, rang) | +| 8 | `api/v1/vehicle/{id}/` | GET | ❌ | Bitta transportning to'liq ma'lumotlari (VIN, tex passport, yurgan km) | + +--- + +## 🔧 Avto baholash + +| # | URL | Method | Token | Tavsif | +|---|-----|--------|-------|--------| +| 9 | `api/v1/auto-evaluation/` | GET | ❌ | Barcha avto baholashlar (ariza + moshina bog'lanishi) | +| 10 | `api/v1/auto-evaluation/{id}/` | GET | ❌ | Bitta avto baholash detali (ariza va moshina to'liq) | + +--- + +## 🏠 Ko'chmas mulk baholash + +| # | URL | Method | Token | Tavsif | +|---|-----|--------|-------|--------| +| 11 | `api/v1/real-estate-evaluation/` | GET | ❌ | Barcha ko'chmas mulk baholashlar (tur, manzil, maydon) | +| 12 | `api/v1/real-estate-evaluation/{id}/` | GET | ❌ | Bitta ko'chmas mulk detali (kadastr, qavat, xonalar) | + +--- + +## 📦 Ko'char mulk baholash + +| # | URL | Method | Token | Tavsif | +|---|-----|--------|-------|--------| +| 13 | `api/v1/movable-property-evaluation/` | GET | ❌ | Barcha ko'char mulk baholashlar (nomi, kategoriya, soni) | +| 14 | `api/v1/movable-property-evaluation/{id}/` | GET | ❌ | Bitta ko'char mulk detali (seriya raqami, holat) | + +--- + +## ⚡ Tezkor baholash + +| # | URL | Method | Token | Tavsif | +|---|-----|--------|-------|--------| +| 15 | `api/v1/quick-evaluation/` | GET | ❌ | Barcha tezkor baholashlar (marka, model, taxminiy narx) | +| 16 | `api/v1/quick-evaluation/{id}/` | GET | ❌ | Bitta tezkor baholash detali (VIN, yoqilg'i turi, holat) | + +--- + +## 📄 Hisobotlar + +| # | URL | Method | Token | Tavsif | +|---|-----|--------|-------|--------| +| 17 | `api/v1/evaluation-report/` | GET | ❌ | Barcha hisobotlar ro'yxati (raqam, baholovchi, yakuniy narx) | +| 18 | `api/v1/evaluation-report/{id}/` | GET | ❌ | Bitta hisobot detali (xulosa matni, PDF fayl) | + +--- + +## 📎 Ariza hujjatlari + +| # | URL | Method | Token | Tavsif | +|---|-----|--------|-------|--------| +| 19 | `api/v1/valuation-document/` | GET | ❌ | Barcha hujjatlar ro'yxati (turi, sarlavha, fayl) | +| 20 | `api/v1/valuation-document/{id}/` | GET | ❌ | Bitta hujjat detali (tavsif, kim yuklagan) | + +--- + +## 💳 To'lovlar + +| # | URL | Method | Token | Tavsif | +|---|-----|--------|-------|--------| +| 21 | `api/v1/payment/` | GET | ❌ | Barcha to'lovlar ro'yxati (summa, usul, status) | +| 22 | `api/v1/payment/{id}/` | GET | ❌ | Bitta to'lov detali (tranzaksiya ID, izoh) | + +--- + +**Jami: 22 ta GET endpoint** (11 ta List + 11 ta Detail) + +> ⚠️ Hozir barcha endpointlar `AllowAny` — token kerak emas. +> Keyinchalik `IsAuthenticated` ga o'zgartiriladi. diff --git a/core/apps/accounts/admin/user.py b/core/apps/accounts/admin/user.py index 9aed37d..5c2d0f9 100644 --- a/core/apps/accounts/admin/user.py +++ b/core/apps/accounts/admin/user.py @@ -15,6 +15,7 @@ class CustomUserAdmin(admin.UserAdmin, ModelAdmin): "phone", "role", ) + search_fields = ("phone", "first_name", "last_name", "username") autocomplete_fields = ["groups", "user_permissions"] fieldsets = ((None, {"fields": ("phone",)}),) + ( (None, {"fields": ("username", "password")}), @@ -37,7 +38,7 @@ class CustomUserAdmin(admin.UserAdmin, ModelAdmin): class PermissionAdmin(ModelAdmin): - list_display = ("name",) + list_display = ("name",) search_fields = ("name",) diff --git a/core/apps/evaluation/admin/auto.py b/core/apps/evaluation/admin/auto.py index 5cc8ce3..78afa9c 100644 --- a/core/apps/evaluation/admin/auto.py +++ b/core/apps/evaluation/admin/auto.py @@ -19,7 +19,7 @@ class AutoEvaluationAdmin(ModelAdmin): "vehicle__license_plate", ) readonly_fields = ("created_at", "updated_at") - raw_id_fields = ("valuation", "vehicle") + autocomplete_fields = ("valuation", "vehicle") fieldsets = ( ("Bog'lanishlar", { "fields": ("valuation", "vehicle"), diff --git a/core/apps/evaluation/admin/document.py b/core/apps/evaluation/admin/document.py index 026d528..795e24d 100644 --- a/core/apps/evaluation/admin/document.py +++ b/core/apps/evaluation/admin/document.py @@ -21,7 +21,7 @@ class ValuationDocumentAdmin(ModelAdmin): "valuation__conclusion_number", ) readonly_fields = ("created_at", "updated_at") - raw_id_fields = ("valuation", "uploaded_by") + autocomplete_fields = ("valuation", "uploaded_by") fieldsets = ( ("Hujjat", { "fields": ( diff --git a/core/apps/evaluation/admin/movable.py b/core/apps/evaluation/admin/movable.py index 7d9bcc2..404f7cd 100644 --- a/core/apps/evaluation/admin/movable.py +++ b/core/apps/evaluation/admin/movable.py @@ -26,7 +26,7 @@ class MovablePropertyEvaluationAdmin(ModelAdmin): "valuation__conclusion_number", ) readonly_fields = ("created_at", "updated_at") - raw_id_fields = ("valuation",) + autocomplete_fields = ("valuation",) fieldsets = ( ("Ariza", { "fields": ("valuation",), diff --git a/core/apps/evaluation/admin/quick.py b/core/apps/evaluation/admin/quick.py index 0504115..497487d 100644 --- a/core/apps/evaluation/admin/quick.py +++ b/core/apps/evaluation/admin/quick.py @@ -31,7 +31,7 @@ class QuickEvaluationAdmin(ModelAdmin): "tech_passport_number", ) readonly_fields = ("created_at", "updated_at") - raw_id_fields = ("created_by",) + autocomplete_fields = ("created_by",) fieldsets = ( ("Foydalanuvchi", { "fields": ("created_by",), diff --git a/core/apps/evaluation/admin/real_estate.py b/core/apps/evaluation/admin/real_estate.py index dce373d..4096c14 100644 --- a/core/apps/evaluation/admin/real_estate.py +++ b/core/apps/evaluation/admin/real_estate.py @@ -27,7 +27,7 @@ class RealEstateEvaluationAdmin(ModelAdmin): "valuation__conclusion_number", ) readonly_fields = ("created_at", "updated_at") - raw_id_fields = ("valuation",) + autocomplete_fields = ("valuation",) fieldsets = ( ("Ariza", { "fields": ("valuation",), diff --git a/core/apps/evaluation/admin/report.py b/core/apps/evaluation/admin/report.py index 3791963..6d17047 100644 --- a/core/apps/evaluation/admin/report.py +++ b/core/apps/evaluation/admin/report.py @@ -24,7 +24,7 @@ class EvaluationReportAdmin(ModelAdmin): "conclusion_text", ) readonly_fields = ("created_at", "updated_at") - raw_id_fields = ("valuation", "evaluator") + autocomplete_fields = ("valuation", "evaluator") fieldsets = ( ("Hisobot", { "fields": ( diff --git a/core/apps/evaluation/admin/valuation.py b/core/apps/evaluation/admin/valuation.py index 7d00a87..a3f9df1 100644 --- a/core/apps/evaluation/admin/valuation.py +++ b/core/apps/evaluation/admin/valuation.py @@ -33,7 +33,7 @@ class ValuationAdmin(ModelAdmin): "customer__inn", ) readonly_fields = ("created_at", "updated_at") - raw_id_fields = ("customer", "property_owner", "created_by", "assigned_to") + autocomplete_fields = ("customer", "property_owner", "created_by", "assigned_to") fieldsets = ( ("Asosiy ma'lumotlar", { "fields": ( diff --git a/core/apps/evaluation/models/real_estate.py b/core/apps/evaluation/models/real_estate.py index 7432a66..2246ef7 100644 --- a/core/apps/evaluation/models/real_estate.py +++ b/core/apps/evaluation/models/real_estate.py @@ -9,14 +9,14 @@ from core.apps.evaluation.choices.real_estate import PropertyType, RealEstateCon - class RealEstateEvaluationModel(AbstractBaseModel): valuation = models.OneToOneField( - ValuationModel, + "evaluation.ValuationModel", on_delete=models.CASCADE, related_name="real_estate_detail", verbose_name=_("valuation"), ) + property_type = models.CharField( verbose_name=_("property type"), max_length=50, diff --git a/core/apps/evaluation/serializers/auto/AutoEvaluation.py b/core/apps/evaluation/serializers/auto/AutoEvaluation.py index 7ee6e04..beba944 100644 --- a/core/apps/evaluation/serializers/auto/AutoEvaluation.py +++ b/core/apps/evaluation/serializers/auto/AutoEvaluation.py @@ -1,7 +1,7 @@ from rest_framework import serializers - from core.apps.evaluation.models import AutoEvaluationModel - +from core.apps.evaluation.serializers.valuation.Valuation import ListValuationSerializer +from core.apps.evaluation.serializers.vehicle.Vehicle import ListVehicleSerializer class BaseAutoevaluationSerializer(serializers.ModelSerializer): class Meta: @@ -12,19 +12,34 @@ class BaseAutoevaluationSerializer(serializers.ModelSerializer): "vehicle", ] - class ListAutoevaluationSerializer(BaseAutoevaluationSerializer): - class Meta(BaseAutoevaluationSerializer.Meta): ... - + valuation_info = ListValuationSerializer(source="valuation", read_only=True) + vehicle_info = ListVehicleSerializer(source="vehicle", read_only=True) + + class Meta(BaseAutoevaluationSerializer.Meta): + fields = BaseAutoevaluationSerializer.Meta.fields + [ + "valuation_info", + "vehicle_info", + ] class RetrieveAutoevaluationSerializer(BaseAutoevaluationSerializer): - class Meta(BaseAutoevaluationSerializer.Meta): ... + from core.apps.evaluation.serializers.valuation.Valuation import RetrieveValuationSerializer + from core.apps.evaluation.serializers.vehicle.Vehicle import RetrieveVehicleSerializer + + valuation_detail = RetrieveValuationSerializer(source="valuation", read_only=True) + vehicle_detail = RetrieveVehicleSerializer(source="vehicle", read_only=True) + class Meta(BaseAutoevaluationSerializer.Meta): + fields = BaseAutoevaluationSerializer.Meta.fields + [ + "valuation_detail", + "vehicle_detail", + "created_at", + "updated_at", + ] class CreateAutoevaluationSerializer(BaseAutoevaluationSerializer): class Meta(BaseAutoevaluationSerializer.Meta): fields = [ - "id", "valuation", "vehicle", ] diff --git a/core/apps/evaluation/serializers/customer/Customer.py b/core/apps/evaluation/serializers/customer/Customer.py index 6c0b379..c039fc6 100644 --- a/core/apps/evaluation/serializers/customer/Customer.py +++ b/core/apps/evaluation/serializers/customer/Customer.py @@ -1,27 +1,70 @@ from rest_framework import serializers - from core.apps.evaluation.models import CustomerModel - class BaseCustomerSerializer(serializers.ModelSerializer): + customer_type_display = serializers.CharField(source="get_customer_type_display", read_only=True) + class Meta: model = CustomerModel fields = [ "id", + "customer_type", + "customer_type_display", + "jshshir", + "passport_series", + "passport_number", + "first_name", + "last_name", + "middle_name", + "inn", + "org_name", + "created_at", ] - class ListCustomerSerializer(BaseCustomerSerializer): - class Meta(BaseCustomerSerializer.Meta): ... - + class Meta(BaseCustomerSerializer.Meta): + fields = [ + "id", + "customer_type_display", + "first_name", + "last_name", + "org_name", + "inn", + "jshshir", + ] class RetrieveCustomerSerializer(BaseCustomerSerializer): - class Meta(BaseCustomerSerializer.Meta): ... - + class Meta(BaseCustomerSerializer.Meta): + fields = BaseCustomerSerializer.Meta.fields + [ + "address", + "passport_issued_date", + "passport_issued_by", + "org_address", + "director_name", + "mfo", + "bank_account", + "certificate_file", + "updated_at", + ] class CreateCustomerSerializer(BaseCustomerSerializer): class Meta(BaseCustomerSerializer.Meta): fields = [ - "id", + "customer_type", + "jshshir", + "passport_series", + "passport_number", + "first_name", + "last_name", + "middle_name", + "address", + "passport_issued_date", + "passport_issued_by", + "inn", + "org_name", + "org_address", + "director_name", + "mfo", + "bank_account", + "certificate_file", ] - diff --git a/core/apps/evaluation/serializers/customer/PropertyOwner.py b/core/apps/evaluation/serializers/customer/PropertyOwner.py index ee912c3..256a2f9 100644 --- a/core/apps/evaluation/serializers/customer/PropertyOwner.py +++ b/core/apps/evaluation/serializers/customer/PropertyOwner.py @@ -1,27 +1,70 @@ from rest_framework import serializers - from core.apps.evaluation.models import PropertyOwnerModel - class BasePropertyOwnerSerializer(serializers.ModelSerializer): + owner_type_display = serializers.CharField(source="get_owner_type_display", read_only=True) + class Meta: model = PropertyOwnerModel fields = [ "id", + "owner_type", + "owner_type_display", + "jshshir", + "passport_series", + "passport_number", + "first_name", + "last_name", + "middle_name", + "inn", + "org_name", + "created_at", ] - class ListPropertyOwnerSerializer(BasePropertyOwnerSerializer): - class Meta(BasePropertyOwnerSerializer.Meta): ... - + class Meta(BasePropertyOwnerSerializer.Meta): + fields = [ + "id", + "owner_type_display", + "first_name", + "last_name", + "org_name", + "inn", + "jshshir", + ] class RetrievePropertyOwnerSerializer(BasePropertyOwnerSerializer): - class Meta(BasePropertyOwnerSerializer.Meta): ... - + class Meta(BasePropertyOwnerSerializer.Meta): + fields = BasePropertyOwnerSerializer.Meta.fields + [ + "address", + "passport_issued_date", + "passport_issued_by", + "org_address", + "director_name", + "mfo", + "bank_account", + "certificate_file", + "updated_at", + ] class CreatePropertyOwnerSerializer(BasePropertyOwnerSerializer): class Meta(BasePropertyOwnerSerializer.Meta): fields = [ - "id", + "owner_type", + "jshshir", + "passport_series", + "passport_number", + "first_name", + "last_name", + "middle_name", + "address", + "passport_issued_date", + "passport_issued_by", + "inn", + "org_name", + "org_address", + "director_name", + "mfo", + "bank_account", + "certificate_file", ] - diff --git a/core/apps/evaluation/serializers/document/ValuationDocument.py b/core/apps/evaluation/serializers/document/ValuationDocument.py index 3c36f8b..89ab17b 100644 --- a/core/apps/evaluation/serializers/document/ValuationDocument.py +++ b/core/apps/evaluation/serializers/document/ValuationDocument.py @@ -1,28 +1,47 @@ from rest_framework import serializers - from core.apps.evaluation.models import ValuationDocumentModel - class BaseValuationdocumentSerializer(serializers.ModelSerializer): + document_type_display = serializers.CharField(source="get_document_type_display", read_only=True) + uploaded_by_name = serializers.CharField(source="uploaded_by.get_full_name", read_only=True) + class Meta: model = ValuationDocumentModel fields = [ "id", + "valuation", "document_type", + "document_type_display", + "title", + "file", + "uploaded_by", + "uploaded_by_name", + "created_at", ] - class ListValuationdocumentSerializer(BaseValuationdocumentSerializer): - class Meta(BaseValuationdocumentSerializer.Meta): ... - + class Meta(BaseValuationdocumentSerializer.Meta): + fields = [ + "id", + "valuation", + "document_type_display", + "title", + "file", + ] class RetrieveValuationdocumentSerializer(BaseValuationdocumentSerializer): - class Meta(BaseValuationdocumentSerializer.Meta): ... - + class Meta(BaseValuationdocumentSerializer.Meta): + fields = BaseValuationdocumentSerializer.Meta.fields + [ + "description", + "updated_at", + ] class CreateValuationdocumentSerializer(BaseValuationdocumentSerializer): class Meta(BaseValuationdocumentSerializer.Meta): fields = [ - "id", + "valuation", "document_type", + "title", + "file", + "description", ] diff --git a/core/apps/evaluation/serializers/movable/MovablePropertyEvaluation.py b/core/apps/evaluation/serializers/movable/MovablePropertyEvaluation.py index 34b49b1..27baee6 100644 --- a/core/apps/evaluation/serializers/movable/MovablePropertyEvaluation.py +++ b/core/apps/evaluation/serializers/movable/MovablePropertyEvaluation.py @@ -1,28 +1,50 @@ from rest_framework import serializers - from core.apps.evaluation.models import MovablePropertyEvaluationModel - class BaseMovablepropertyevaluationSerializer(serializers.ModelSerializer): + property_category_display = serializers.CharField(source="get_property_category_display", read_only=True) + condition_display = serializers.CharField(source="get_condition_display", read_only=True) + class Meta: model = MovablePropertyEvaluationModel fields = [ "id", - # "name", + "valuation", + "property_name", + "property_category", + "property_category_display", + "serial_number", + "manufacture_year", + "condition", + "condition_display", + "quantity", ] - class ListMovablepropertyevaluationSerializer(BaseMovablepropertyevaluationSerializer): - class Meta(BaseMovablepropertyevaluationSerializer.Meta): ... - + class Meta(BaseMovablepropertyevaluationSerializer.Meta): + fields = [ + "id", + "valuation", + "property_name", + "property_category_display", + "quantity", + ] class RetrieveMovablepropertyevaluationSerializer(BaseMovablepropertyevaluationSerializer): - class Meta(BaseMovablepropertyevaluationSerializer.Meta): ... - + class Meta(BaseMovablepropertyevaluationSerializer.Meta): + fields = BaseMovablepropertyevaluationSerializer.Meta.fields + [ + "created_at", + "updated_at", + ] class CreateMovablepropertyevaluationSerializer(BaseMovablepropertyevaluationSerializer): class Meta(BaseMovablepropertyevaluationSerializer.Meta): fields = [ - "id", - # "name", + "valuation", + "property_name", + "property_category", + "serial_number", + "manufacture_year", + "condition", + "quantity", ] diff --git a/core/apps/evaluation/serializers/quick/QuickEvaluation.py b/core/apps/evaluation/serializers/quick/QuickEvaluation.py index 44d3cb3..4bf9fd8 100644 --- a/core/apps/evaluation/serializers/quick/QuickEvaluation.py +++ b/core/apps/evaluation/serializers/quick/QuickEvaluation.py @@ -1,26 +1,60 @@ from rest_framework import serializers - from core.apps.evaluation.models import QuickEvaluationModel - class BaseQuickevaluationSerializer(serializers.ModelSerializer): + fuel_type_display = serializers.CharField(source="get_fuel_type_display", read_only=True) + body_type_display = serializers.CharField(source="get_body_type_display", read_only=True) + condition_display = serializers.CharField(source="get_condition_display", read_only=True) + created_by_name = serializers.CharField(source="created_by.get_full_name", read_only=True) + class Meta: model = QuickEvaluationModel fields = [ "id", + "created_by", + "created_by_name", + "brand", + "model", + "license_plate", + "manufacture_year", + "estimated_price", + "created_at", ] - class ListQuickevaluationSerializer(BaseQuickevaluationSerializer): - class Meta(BaseQuickevaluationSerializer.Meta): ... - + class Meta(BaseQuickevaluationSerializer.Meta): + pass class RetrieveQuickevaluationSerializer(BaseQuickevaluationSerializer): - class Meta(BaseQuickevaluationSerializer.Meta): ... - + class Meta(BaseQuickevaluationSerializer.Meta): + fields = BaseQuickevaluationSerializer.Meta.fields + [ + "tech_passport_number", + "mileage", + "vin_number", + "engine_number", + "color", + "fuel_type", + "fuel_type_display", + "body_type", + "body_type_display", + "condition", + "condition_display", + "updated_at", + ] class CreateQuickevaluationSerializer(BaseQuickevaluationSerializer): class Meta(BaseQuickevaluationSerializer.Meta): fields = [ - "id", + "tech_passport_number", + "license_plate", + "model", + "brand", + "manufacture_year", + "mileage", + "vin_number", + "engine_number", + "color", + "fuel_type", + "body_type", + "condition", ] diff --git a/core/apps/evaluation/serializers/real_estate/RealEstateEvaluation.py b/core/apps/evaluation/serializers/real_estate/RealEstateEvaluation.py index 63eddad..e8c8f7a 100644 --- a/core/apps/evaluation/serializers/real_estate/RealEstateEvaluation.py +++ b/core/apps/evaluation/serializers/real_estate/RealEstateEvaluation.py @@ -1,15 +1,17 @@ from rest_framework import serializers - from core.apps.evaluation.models import RealEstateEvaluationModel - class BaseRealestateevaluationSerializer(serializers.ModelSerializer): + property_type_display = serializers.CharField(source="get_property_type_display", read_only=True) + condition_display = serializers.CharField(source="get_condition_display", read_only=True) + class Meta: model = RealEstateEvaluationModel fields = [ "id", "valuation", "property_type", + "property_type_display", "address", "cadastral_number", "total_area", @@ -19,22 +21,31 @@ class BaseRealestateevaluationSerializer(serializers.ModelSerializer): "rooms_count", "build_year", "condition", + "condition_display", "has_renovation", ] - class ListRealestateevaluationSerializer(BaseRealestateevaluationSerializer): - class Meta(BaseRealestateevaluationSerializer.Meta): ... - + class Meta(BaseRealestateevaluationSerializer.Meta): + fields = [ + "id", + "valuation", + "property_type_display", + "address", + "total_area", + "condition_display", + ] class RetrieveRealestateevaluationSerializer(BaseRealestateevaluationSerializer): - class Meta(BaseRealestateevaluationSerializer.Meta): ... - + class Meta(BaseRealestateevaluationSerializer.Meta): + fields = BaseRealestateevaluationSerializer.Meta.fields + [ + "created_at", + "updated_at", + ] class CreateRealestateevaluationSerializer(BaseRealestateevaluationSerializer): class Meta(BaseRealestateevaluationSerializer.Meta): fields = [ - "id", "valuation", "property_type", "address", diff --git a/core/apps/evaluation/serializers/report/EvaluationReport.py b/core/apps/evaluation/serializers/report/EvaluationReport.py index 23840ba..f38e540 100644 --- a/core/apps/evaluation/serializers/report/EvaluationReport.py +++ b/core/apps/evaluation/serializers/report/EvaluationReport.py @@ -1,35 +1,46 @@ from rest_framework import serializers - from core.apps.evaluation.models import EvaluationReportModel - class BaseEvaluationreportSerializer(serializers.ModelSerializer): + evaluator_name = serializers.CharField(source="evaluator.get_full_name", read_only=True) + valuation_number = serializers.CharField(source="valuation.conclusion_number", read_only=True) + class Meta: model = EvaluationReportModel fields = [ "id", "valuation", + "valuation_number", "evaluator", + "evaluator_name", "report_number", "final_value", "report_file", - "conclusion_text", + "approved_at", + "created_at", + ] + +class ListEvaluationreportSerializer(BaseEvaluationreportSerializer): + class Meta(BaseEvaluationreportSerializer.Meta): + fields = [ + "id", + "valuation_number", + "evaluator_name", + "report_number", + "final_value", "approved_at", ] - -class ListEvaluationreportSerializer(BaseEvaluationreportSerializer): - class Meta(BaseEvaluationreportSerializer.Meta): ... - - class RetrieveEvaluationreportSerializer(BaseEvaluationreportSerializer): - class Meta(BaseEvaluationreportSerializer.Meta): ... - + class Meta(BaseEvaluationreportSerializer.Meta): + fields = BaseEvaluationreportSerializer.Meta.fields + [ + "conclusion_text", + "updated_at", + ] class CreateEvaluationreportSerializer(BaseEvaluationreportSerializer): class Meta(BaseEvaluationreportSerializer.Meta): fields = [ - "id", "valuation", "evaluator", "report_number", diff --git a/core/apps/evaluation/serializers/valuation/Valuation.py b/core/apps/evaluation/serializers/valuation/Valuation.py index ecbec83..b93c38f 100644 --- a/core/apps/evaluation/serializers/valuation/Valuation.py +++ b/core/apps/evaluation/serializers/valuation/Valuation.py @@ -1,40 +1,56 @@ from rest_framework import serializers - from core.apps.evaluation.models import ValuationModel - class BaseValuationSerializer(serializers.ModelSerializer): + status_display = serializers.CharField(source="get_status_display", read_only=True) + evaluation_type_display = serializers.CharField(source="get_evaluation_type_display", read_only=True) + payment_status_display = serializers.CharField(source="get_payment_status_display", read_only=True) + customer_name = serializers.CharField(source="customer.__str__", read_only=True) + class Meta: model = ValuationModel fields = [ "id", "conclusion_number", + "customer", + "customer_name", "evaluation_purpose", "evaluation_type", + "evaluation_type_display", "status", + "status_display", "created_at", ] - class ListValuationSerializer(BaseValuationSerializer): class Meta(BaseValuationSerializer.Meta): - pass - + fields = BaseValuationSerializer.Meta.fields + [ + "final_price", + "payment_status_display", + ] class RetrieveValuationSerializer(BaseValuationSerializer): + created_by_name = serializers.CharField(source="created_by.get_full_name", read_only=True) + assigned_to_name = serializers.CharField(source="assigned_to.get_full_name", read_only=True) + class Meta(BaseValuationSerializer.Meta): fields = BaseValuationSerializer.Meta.fields + [ - "customer", "property_owner", "created_by", + "created_by_name", "assigned_to", + "assigned_to_name", + "evaluation_subtype", "estimated_price", "final_price", "payment_status", + "payment_status_display", + "is_courier_delivery", + "courier_extra_amount", "notes", + "updated_at", ] - class CreateValuationSerializer(BaseValuationSerializer): class Meta(BaseValuationSerializer.Meta): fields = [ @@ -46,4 +62,3 @@ class CreateValuationSerializer(BaseValuationSerializer): "is_courier_delivery", "notes", ] - diff --git a/core/apps/evaluation/serializers/vehicle/Vehicle.py b/core/apps/evaluation/serializers/vehicle/Vehicle.py index 51e0763..218da3e 100644 --- a/core/apps/evaluation/serializers/vehicle/Vehicle.py +++ b/core/apps/evaluation/serializers/vehicle/Vehicle.py @@ -1,9 +1,11 @@ from rest_framework import serializers - from core.apps.evaluation.models import VehicleModel - class BaseVehicleSerializer(serializers.ModelSerializer): + fuel_type_display = serializers.CharField(source="get_fuel_type_display", read_only=True) + body_type_display = serializers.CharField(source="get_body_type_display", read_only=True) + condition_display = serializers.CharField(source="get_condition_display", read_only=True) + class Meta: model = VehicleModel fields = [ @@ -12,28 +14,59 @@ class BaseVehicleSerializer(serializers.ModelSerializer): "model", "license_plate", "manufacture_year", + "color", + "fuel_type_display", + "condition_display", ] - class ListVehicleSerializer(BaseVehicleSerializer): class Meta(BaseVehicleSerializer.Meta): pass - class RetrieveVehicleSerializer(BaseVehicleSerializer): class Meta(BaseVehicleSerializer.Meta): - fields = "__all__" - + fields = [ + "id", + "tech_passport_series", + "tech_passport_number", + "tech_passport_issued_date", + "tech_passport_issued_by", + "license_plate", + "model", + "brand", + "manufacture_year", + "vin_number", + "engine_number", + "color", + "mileage", + "fuel_type", + "fuel_type_display", + "body_type", + "body_type_display", + "condition", + "condition_display", + "position", + "created_at", + "updated_at", + ] class CreateVehicleSerializer(BaseVehicleSerializer): class Meta(BaseVehicleSerializer.Meta): fields = [ "tech_passport_series", "tech_passport_number", + "tech_passport_issued_date", + "tech_passport_issued_by", "license_plate", + "model", + "brand", + "manufacture_year", + "vin_number", + "engine_number", + "color", "mileage", "fuel_type", "body_type", "condition", + "position", ] - diff --git a/core/apps/payment/admin/payment.py b/core/apps/payment/admin/payment.py index 06a8a46..0ecd78b 100644 --- a/core/apps/payment/admin/payment.py +++ b/core/apps/payment/admin/payment.py @@ -29,7 +29,7 @@ class PaymentAdmin(ModelAdmin): "note", ) readonly_fields = ("created_at", "updated_at") - raw_id_fields = ("valuation", "payer") + autocomplete_fields = ("valuation", "payer") fieldsets = ( ("To'lov ma'lumotlari", { "fields": ( diff --git a/core/apps/payment/serializers/payment/payment.py b/core/apps/payment/serializers/payment/payment.py index 390509b..8194d75 100644 --- a/core/apps/payment/serializers/payment/payment.py +++ b/core/apps/payment/serializers/payment/payment.py @@ -1,28 +1,58 @@ from rest_framework import serializers - from core.apps.payment.models import PaymentModel - class BasePaymentSerializer(serializers.ModelSerializer): + payment_method_display = serializers.CharField(source="get_payment_method_display", read_only=True) + status_display = serializers.CharField(source="get_status_display", read_only=True) + payer_name = serializers.CharField(source="payer.get_full_name", read_only=True) + valuation_number = serializers.CharField(source="valuation.conclusion_number", read_only=True) + class Meta: model = PaymentModel fields = [ "id", "valuation", + "valuation_number", + "payer", + "payer_name", + "amount", + "payment_method", + "payment_method_display", + "status", + "status_display", + "transaction_id", + "paid_at", + "created_at", ] - class ListPaymentSerializer(BasePaymentSerializer): - class Meta(BasePaymentSerializer.Meta): ... - + class Meta(BasePaymentSerializer.Meta): + fields = [ + "id", + "valuation_number", + "payer_name", + "amount", + "payment_method_display", + "status_display", + "paid_at", + ] class RetrievePaymentSerializer(BasePaymentSerializer): - class Meta(BasePaymentSerializer.Meta): ... - + class Meta(BasePaymentSerializer.Meta): + fields = BasePaymentSerializer.Meta.fields + [ + "note", + "updated_at", + ] class CreatePaymentSerializer(BasePaymentSerializer): class Meta(BasePaymentSerializer.Meta): fields = [ - "id", "valuation", + "payer", + "amount", + "payment_method", + "status", + "transaction_id", + "paid_at", + "note", ]