feat(auto-evaluation): to'liq CRUD API va 4 bosqichli forma qo'shildi
- 10 ta yangi choice klass qo'shildi: ObjectOwnerType, PropertyRights, FormOwnership, LocationHighways, LocationConvenience, AutoCarType, AutoCarWheel - AutoEvaluationModel ga ~30 ta yangi field qo'shildi (4 bosqich): 1-bosqich: ro'yxatga olish raqami, sanalar, ob'ekt turi 2-bosqich: egasi ma'lumotlari (jismoniy/yuridik), mulk huquqi, egalik shakli 3-bosqich: manzil (viloyat, tuman, shahar, mahalla, ko'cha, uy) 4-bosqich: avtomobil (tex passport, marka, model, raqam, rang, dvigatel) - CreateSerializer ga validatsiya qo'shildi: passport formati (AA 1234567), tex passport formati (AAA 1234567), egasi turiga qarab majburiy fieldlar (jismoniy yoki yuridik) - View ReadOnlyModelViewSet dan ModelViewSet ga o'zgartirildi - Admin 4 bosqichli fieldset bilan yangilandi - Yangi filterlar: object_owner_type, property_rights, form_ownership - VehicleModel fieldlari FK → ReferenceitemModel ga o'tkazildi - Migratsiyalar: 0015, 0016, 0017
This commit is contained in:
@@ -1,45 +1,190 @@
|
||||
import re
|
||||
|
||||
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):
|
||||
status_display = serializers.CharField(source="get_status_display", read_only=True)
|
||||
object_type_display = serializers.CharField(source="get_object_type_display", read_only=True, default=None)
|
||||
rate_type_display = serializers.CharField(source="get_rate_type_display", read_only=True, default=None)
|
||||
value_determined_display = serializers.CharField(source="get_value_determined_display", read_only=True, default=None)
|
||||
object_owner_type_display = serializers.CharField(source="get_object_owner_type_display", read_only=True, default=None)
|
||||
property_rights_display = serializers.CharField(source="get_property_rights_display", read_only=True, default=None)
|
||||
form_ownership_display = serializers.CharField(source="get_form_ownership_display", read_only=True, default=None)
|
||||
|
||||
class Meta:
|
||||
model = AutoEvaluationModel
|
||||
fields = [
|
||||
"id",
|
||||
"valuation",
|
||||
"vehicle",
|
||||
"registration_number",
|
||||
"object_type",
|
||||
"object_type_display",
|
||||
"car_brand",
|
||||
"car_model",
|
||||
"car_number",
|
||||
"manufacture_year",
|
||||
"car_color",
|
||||
"rate_type",
|
||||
"rate_type_display",
|
||||
"value_determined",
|
||||
"value_determined_display",
|
||||
"status",
|
||||
"status_display",
|
||||
"created_at",
|
||||
]
|
||||
|
||||
|
||||
class ListAutoevaluationSerializer(BaseAutoevaluationSerializer):
|
||||
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",
|
||||
]
|
||||
pass
|
||||
|
||||
|
||||
class RetrieveAutoevaluationSerializer(BaseAutoevaluationSerializer):
|
||||
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)
|
||||
car_type_display = serializers.CharField(source="get_car_type_display", read_only=True, default=None)
|
||||
car_wheel_display = serializers.CharField(source="get_car_wheel_display", read_only=True, default=None)
|
||||
object_location_highways_display = serializers.CharField(
|
||||
source="get_object_location_highways_display", read_only=True, default=None
|
||||
)
|
||||
object_location_covenience_display = serializers.CharField(
|
||||
source="get_object_location_covenience_display", read_only=True, default=None
|
||||
)
|
||||
|
||||
class Meta(BaseAutoevaluationSerializer.Meta):
|
||||
fields = BaseAutoevaluationSerializer.Meta.fields + [
|
||||
"valuation_detail",
|
||||
"vehicle_detail",
|
||||
"created_at",
|
||||
# Step 1
|
||||
"contract_date",
|
||||
"object_inspection_date",
|
||||
"rate_date",
|
||||
"rate_report_date",
|
||||
"rate_object_name",
|
||||
# Step 2
|
||||
"object_owner_type",
|
||||
"object_owner_type_display",
|
||||
"object_owner_individual_person_f_name",
|
||||
"object_owner_individual_person_l_name",
|
||||
"object_owner_individual_person_p_name",
|
||||
"object_owner_individual_person_passport_num",
|
||||
"object_owner_legal_entity",
|
||||
"object_owner_legal_inn",
|
||||
"property_rights",
|
||||
"property_rights_display",
|
||||
"form_ownership",
|
||||
"form_ownership_display",
|
||||
# Step 3
|
||||
"object_location_province",
|
||||
"object_location_district",
|
||||
"object_location_city",
|
||||
"object_location_neighborhood",
|
||||
"object_location_street",
|
||||
"object_location_home",
|
||||
"object_location_highways",
|
||||
"object_location_highways_display",
|
||||
"object_location_covenience",
|
||||
"object_location_covenience_display",
|
||||
# Step 4
|
||||
"tex_passport_serie_num",
|
||||
"tex_passport_gived_date",
|
||||
"tex_passport_gived_location",
|
||||
"car_type",
|
||||
"car_type_display",
|
||||
"car_wheel",
|
||||
"car_wheel_display",
|
||||
"car_dvigatel_number",
|
||||
# Extra
|
||||
"valuation",
|
||||
"vehicle",
|
||||
"rating_goal",
|
||||
"updated_at",
|
||||
]
|
||||
|
||||
class CreateAutoevaluationSerializer(BaseAutoevaluationSerializer):
|
||||
class Meta(BaseAutoevaluationSerializer.Meta):
|
||||
|
||||
class CreateAutoevaluationSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = AutoEvaluationModel
|
||||
fields = [
|
||||
"valuation",
|
||||
"vehicle",
|
||||
# Step 1
|
||||
"registration_number",
|
||||
"contract_date",
|
||||
"object_inspection_date",
|
||||
"rate_date",
|
||||
"rate_report_date",
|
||||
"rate_object_name",
|
||||
"object_type",
|
||||
# Step 2
|
||||
"object_owner_type",
|
||||
"object_owner_individual_person_f_name",
|
||||
"object_owner_individual_person_l_name",
|
||||
"object_owner_individual_person_p_name",
|
||||
"object_owner_individual_person_passport_num",
|
||||
"object_owner_legal_entity",
|
||||
"object_owner_legal_inn",
|
||||
"property_rights",
|
||||
"form_ownership",
|
||||
"value_determined",
|
||||
"rate_type",
|
||||
# Step 3
|
||||
"object_location_province",
|
||||
"object_location_district",
|
||||
"object_location_city",
|
||||
"object_location_neighborhood",
|
||||
"object_location_street",
|
||||
"object_location_home",
|
||||
"object_location_highways",
|
||||
"object_location_covenience",
|
||||
# Step 4
|
||||
"tex_passport_serie_num",
|
||||
"tex_passport_gived_date",
|
||||
"tex_passport_gived_location",
|
||||
"car_type",
|
||||
"car_wheel",
|
||||
"car_brand",
|
||||
"car_model",
|
||||
"car_number",
|
||||
"manufacture_year",
|
||||
"car_dvigatel_number",
|
||||
"car_color",
|
||||
]
|
||||
|
||||
def validate_tex_passport_serie_num(self, value):
|
||||
if value and not re.match(r"^[A-Z]{3}\s?\d{7}$", value):
|
||||
raise serializers.ValidationError(
|
||||
"Format: AAA 1234567 (3 harf + 7 raqam)"
|
||||
)
|
||||
return value
|
||||
|
||||
def validate_object_owner_individual_person_passport_num(self, value):
|
||||
if value and not re.match(r"^[A-Z]{2}\s?\d{7}$", value):
|
||||
raise serializers.ValidationError(
|
||||
"Format: AA 1234567 (2 harf + 7 raqam)"
|
||||
)
|
||||
return value
|
||||
|
||||
def validate(self, attrs):
|
||||
owner_type = attrs.get("object_owner_type")
|
||||
|
||||
if owner_type == 1:
|
||||
required_fields = {
|
||||
"object_owner_individual_person_f_name": "Ismi",
|
||||
"object_owner_individual_person_l_name": "Familiyasi",
|
||||
"object_owner_individual_person_p_name": "Sharifi",
|
||||
"object_owner_individual_person_passport_num": "Passport raqami",
|
||||
}
|
||||
for field, label in required_fields.items():
|
||||
if not attrs.get(field):
|
||||
raise serializers.ValidationError(
|
||||
{field: f"Jismoniy shaxs uchun {label} majburiy."}
|
||||
)
|
||||
|
||||
elif owner_type == 2:
|
||||
if not attrs.get("object_owner_legal_entity"):
|
||||
raise serializers.ValidationError(
|
||||
{"object_owner_legal_entity": "Yuridik shaxs nomi majburiy."}
|
||||
)
|
||||
if not attrs.get("object_owner_legal_inn"):
|
||||
raise serializers.ValidationError(
|
||||
{"object_owner_legal_inn": "INN raqami majburiy."}
|
||||
)
|
||||
|
||||
return attrs
|
||||
|
||||
@@ -1,28 +1,39 @@
|
||||
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)
|
||||
brand_name = serializers.CharField(source="brand.name", read_only=True, default=None)
|
||||
model_name = serializers.CharField(source="model.name", read_only=True, default=None)
|
||||
color_name = serializers.CharField(source="color.name", read_only=True, default=None)
|
||||
fuel_type_name = serializers.CharField(source="fuel_type.name", read_only=True, default=None)
|
||||
body_type_name = serializers.CharField(source="body_type.name", read_only=True, default=None)
|
||||
condition_display = serializers.CharField(source="get_condition_display", read_only=True)
|
||||
position_name = serializers.CharField(source="position.name", read_only=True, default=None)
|
||||
|
||||
class Meta:
|
||||
model = VehicleModel
|
||||
fields = [
|
||||
"id",
|
||||
"brand",
|
||||
"brand_name",
|
||||
"model",
|
||||
"model_name",
|
||||
"license_plate",
|
||||
"manufacture_year",
|
||||
"color",
|
||||
"fuel_type_display",
|
||||
"color_name",
|
||||
"fuel_type_name",
|
||||
"condition_display",
|
||||
]
|
||||
|
||||
|
||||
class ListVehicleSerializer(BaseVehicleSerializer):
|
||||
class Meta(BaseVehicleSerializer.Meta):
|
||||
pass
|
||||
|
||||
|
||||
class RetrieveVehicleSerializer(BaseVehicleSerializer):
|
||||
class Meta(BaseVehicleSerializer.Meta):
|
||||
fields = [
|
||||
@@ -32,34 +43,40 @@ class RetrieveVehicleSerializer(BaseVehicleSerializer):
|
||||
"tech_passport_issued_date",
|
||||
"tech_passport_issued_by",
|
||||
"license_plate",
|
||||
"model",
|
||||
"brand",
|
||||
"brand_name",
|
||||
"model",
|
||||
"model_name",
|
||||
"manufacture_year",
|
||||
"vin_number",
|
||||
"engine_number",
|
||||
"color",
|
||||
"color_name",
|
||||
"mileage",
|
||||
"fuel_type",
|
||||
"fuel_type_display",
|
||||
"fuel_type_name",
|
||||
"body_type",
|
||||
"body_type_display",
|
||||
"body_type_name",
|
||||
"condition",
|
||||
"condition_display",
|
||||
"position",
|
||||
"position_name",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
]
|
||||
|
||||
class CreateVehicleSerializer(BaseVehicleSerializer):
|
||||
class Meta(BaseVehicleSerializer.Meta):
|
||||
|
||||
class CreateVehicleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = VehicleModel
|
||||
fields = [
|
||||
"tech_passport_series",
|
||||
"tech_passport_number",
|
||||
"tech_passport_issued_date",
|
||||
"tech_passport_issued_by",
|
||||
"license_plate",
|
||||
"model",
|
||||
"brand",
|
||||
"model",
|
||||
"manufacture_year",
|
||||
"vin_number",
|
||||
"engine_number",
|
||||
|
||||
Reference in New Issue
Block a user