import re from rest_framework import serializers from core.apps.evaluation.models import QuickEvaluationModel class BaseQuickevaluationSerializer(serializers.ModelSerializer): created_by_name = serializers.CharField(source="created_by.get_full_name", read_only=True) status_display = serializers.CharField(source="get_status_display", read_only=True) car_type_display = serializers.CharField(source="get_car_type_display", read_only=True) brand_name = serializers.CharField(source="brand.name", read_only=True, default=None) marka_name = serializers.CharField(source="marka.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) state_car_name = serializers.CharField(source="state_car.name", read_only=True, default=None) car_position_name = serializers.CharField(source="car_position.name", read_only=True, default=None) class Meta: model = QuickEvaluationModel fields = [ "id", "created_by", "created_by_name", "brand", "brand_name", "marka", "marka_name", "car_number", "car_manufactured_date", "estimated_price", "status", "status_display", "car_type", "car_type_display", "state_car", "state_car_name", "created_at", ] class ListQuickevaluationSerializer(BaseQuickevaluationSerializer): class Meta(BaseQuickevaluationSerializer.Meta): pass class RetrieveQuickevaluationSerializer(BaseQuickevaluationSerializer): class Meta(BaseQuickevaluationSerializer.Meta): fields = BaseQuickevaluationSerializer.Meta.fields + [ "tex_passport_serie_num", "tech_passport_issued_date", "tech_passport_issued_place", "tex_passport_file", "car_position", "car_position_name", "distance_covered", "body_type", "body_type_name", "vin_number", "engine_number", "color", "color_name", "fuel_type", "fuel_type_name", "updated_at", ] class CreateQuickevaluationSerializer(serializers.ModelSerializer): class Meta: model = QuickEvaluationModel fields = [ "tex_passport_serie_num", "tech_passport_issued_date", "tech_passport_issued_place", "tex_passport_file", "car_type", "brand", "marka", "car_position", "distance_covered", "body_type", "vin_number", "car_number", "car_manufactured_date", "engine_number", "color", "fuel_type", "state_car", ] 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_vin_number(self, value): if value and len(value) != 17: raise serializers.ValidationError("VIN raqami 17 belgidan iborat bo'lishi kerak.") return value def validate(self, attrs): car_type = attrs.get("car_type") if car_type == "lightweight": if not attrs.get("distance_covered"): raise serializers.ValidationError( {"distance_covered": "car_type 'lightweight' uchun majburiy."} ) if not attrs.get("body_type"): raise serializers.ValidationError( {"body_type": "car_type 'lightweight' uchun majburiy."} ) if car_type == "truck": if not attrs.get("vin_number"): raise serializers.ValidationError( {"vin_number": "car_type 'truck' uchun majburiy."} ) return attrs def create(self, validated_data): request = self.context.get("request") if request and request.user and request.user.is_authenticated: validated_data["created_by"] = request.user return super().create(validated_data)