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