- 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
191 lines
7.0 KiB
Python
191 lines
7.0 KiB
Python
import re
|
|
|
|
from rest_framework import serializers
|
|
|
|
from core.apps.evaluation.models import AutoEvaluationModel
|
|
|
|
|
|
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",
|
|
"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):
|
|
class Meta(BaseAutoevaluationSerializer.Meta):
|
|
pass
|
|
|
|
|
|
class RetrieveAutoevaluationSerializer(BaseAutoevaluationSerializer):
|
|
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 + [
|
|
# 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(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = AutoEvaluationModel
|
|
fields = [
|
|
# 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
|