feat: add mechnic-auto-model
This commit is contained in:
364
core/apps/evaluation/serializers/auto/MechanicAutoEvaluation.py
Normal file
364
core/apps/evaluation/serializers/auto/MechanicAutoEvaluation.py
Normal file
@@ -0,0 +1,364 @@
|
||||
import re
|
||||
|
||||
from django.contrib.auth import get_user_model
|
||||
from rest_framework import serializers
|
||||
|
||||
from core.apps.evaluation.choices.request import RequestStatus
|
||||
from core.apps.evaluation.models import (
|
||||
MechanicAutoEvaluationModel,
|
||||
ReferenceitemModel,
|
||||
EvaluationrequestModel,
|
||||
)
|
||||
from core.apps.evaluation.serializers.reference import ListReferenceitemSerializer
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
class BaseMechanicAutoevaluationSerializer(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)
|
||||
object_owner_type_display = serializers.CharField(source="get_object_owner_type_display", read_only=True,
|
||||
default=None)
|
||||
rate_type = ListReferenceitemSerializer(read_only=True)
|
||||
value_determined = ListReferenceitemSerializer(read_only=True)
|
||||
user = serializers.SerializerMethodField(method_name="get_user", read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = MechanicAutoEvaluationModel
|
||||
fields = [
|
||||
"id",
|
||||
"contract_date",
|
||||
"object_inspection_date",
|
||||
"object_owner_individual_person_passport_num",
|
||||
"object_owner_type",
|
||||
"object_owner_individual_person_f_name",
|
||||
"object_owner_individual_person_l_name",
|
||||
"object_owner_individual_person_p_name",
|
||||
"object_owner_legal_entity",
|
||||
"object_owner_legal_inn",
|
||||
"tex_passport_serie_num",
|
||||
"rating_goal",
|
||||
"registration_number",
|
||||
"object_type",
|
||||
"object_type_display",
|
||||
"car_brand",
|
||||
"car_model",
|
||||
"car_number",
|
||||
"manufacture_year",
|
||||
"car_color",
|
||||
"status",
|
||||
"status_display",
|
||||
"created_at",
|
||||
"value_determined",
|
||||
"rate_type",
|
||||
"user",
|
||||
"evaluation_request",
|
||||
]
|
||||
|
||||
def get_user(self, obj):
|
||||
request = self.context.get('request')
|
||||
return {
|
||||
"id": obj.user.id,
|
||||
"phone": obj.user.phone,
|
||||
"first_name": obj.user.first_name,
|
||||
"last_name": obj.user.last_name,
|
||||
"avatar": request.build_absolute_uri(obj.user.avatar.url) if obj.user.avatar else None
|
||||
} if obj.user else None
|
||||
|
||||
|
||||
class ListMechanicAutoevaluationSerializer(BaseMechanicAutoevaluationSerializer):
|
||||
class Meta(BaseMechanicAutoevaluationSerializer.Meta):
|
||||
pass
|
||||
|
||||
|
||||
class RetrieveMechanicAutoevaluationSerializer(BaseMechanicAutoevaluationSerializer):
|
||||
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)
|
||||
|
||||
class Meta(BaseMechanicAutoevaluationSerializer.Meta):
|
||||
fields = BaseMechanicAutoevaluationSerializer.Meta.fields + [
|
||||
"contract_date",
|
||||
"object_inspection_date",
|
||||
"rate_date",
|
||||
"rate_report_date",
|
||||
"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",
|
||||
"tex_passport_serie_num",
|
||||
"tex_passport_file",
|
||||
"tex_passport_gived_date",
|
||||
"tex_passport_gived_location",
|
||||
"car_type",
|
||||
"car_type_display",
|
||||
"car_wheel",
|
||||
"car_wheel_display",
|
||||
"car_dvigatel_number",
|
||||
"valuation",
|
||||
"vehicle",
|
||||
"rating_goal",
|
||||
"updated_at",
|
||||
]
|
||||
|
||||
|
||||
class UpdateMechanicAutoevaluationSerializer(serializers.ModelSerializer):
|
||||
value_determined = serializers.PrimaryKeyRelatedField(
|
||||
queryset=ReferenceitemModel.objects.all(),
|
||||
required=False,
|
||||
allow_null=True,
|
||||
)
|
||||
rate_type = serializers.PrimaryKeyRelatedField(
|
||||
queryset=ReferenceitemModel.objects.all(),
|
||||
required=False,
|
||||
allow_null=True,
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = MechanicAutoEvaluationModel
|
||||
fields = [
|
||||
"registration_number",
|
||||
"contract_date",
|
||||
"object_inspection_date",
|
||||
"rate_date",
|
||||
"rate_report_date",
|
||||
"object_type",
|
||||
"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",
|
||||
"value_determined",
|
||||
"rate_type",
|
||||
"tex_passport_file",
|
||||
"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
|
||||
|
||||
|
||||
class CreateMechanicAutoevaluationSerializer(serializers.ModelSerializer):
|
||||
value_determined = serializers.PrimaryKeyRelatedField(
|
||||
queryset=ReferenceitemModel.objects.all(),
|
||||
required=False,
|
||||
allow_null=True,
|
||||
)
|
||||
rate_type = serializers.PrimaryKeyRelatedField(
|
||||
queryset=ReferenceitemModel.objects.all(),
|
||||
required=False,
|
||||
allow_null=True,
|
||||
)
|
||||
evaluation_request = serializers.PrimaryKeyRelatedField(
|
||||
queryset=EvaluationrequestModel.objects.all(),
|
||||
required=False,
|
||||
allow_null=True,
|
||||
)
|
||||
user = serializers.PrimaryKeyRelatedField(
|
||||
queryset=User.objects.all(),
|
||||
required=True,
|
||||
allow_null=False,
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = MechanicAutoEvaluationModel
|
||||
fields = [
|
||||
"user",
|
||||
"registration_number",
|
||||
"evaluation_request",
|
||||
"contract_date",
|
||||
"object_inspection_date",
|
||||
"rate_date",
|
||||
"rate_report_date",
|
||||
"object_type",
|
||||
"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",
|
||||
"value_determined",
|
||||
"rate_type",
|
||||
"tex_passport_serie_num",
|
||||
"tex_passport_file",
|
||||
"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
|
||||
|
||||
def create(self, validated_data):
|
||||
evaluation_req = validated_data.get("evaluation_request")
|
||||
if evaluation_req:
|
||||
evaluation_req.status = RequestStatus.IN_PROGRESS
|
||||
evaluation_req.save()
|
||||
return super().create(validated_data)
|
||||
|
||||
|
||||
class MechanicAutoEvaluationAppraisersSerializer(serializers.Serializer):
|
||||
ids = serializers.ListField(child=serializers.IntegerField())
|
||||
|
||||
def validate(self, data):
|
||||
if not data.get("ids"):
|
||||
raise serializers.ValidationError("Appraisers IDs are required.")
|
||||
users = User.objects.filter(id__in=data["ids"])
|
||||
if not users:
|
||||
raise serializers.ValidationError("Invalid appraisers IDs.")
|
||||
data['users'] = users
|
||||
return data
|
||||
|
||||
|
||||
class MechanicAutoEvaluationModelSerializer(serializers.ModelSerializer):
|
||||
user = serializers.StringRelatedField(read_only=True)
|
||||
appraisers = serializers.PrimaryKeyRelatedField(
|
||||
many=True,
|
||||
queryset=User.objects.all(),
|
||||
required=False
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = MechanicAutoEvaluationModel
|
||||
fields = (
|
||||
"tex_passport_file",
|
||||
"registration_number",
|
||||
"contract_date",
|
||||
"object_inspection_date",
|
||||
"rate_date",
|
||||
"rate_report_date",
|
||||
"object_type",
|
||||
"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",
|
||||
"value_determined",
|
||||
"rate_type",
|
||||
"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",
|
||||
"rating_goal",
|
||||
"status",
|
||||
"is_archived",
|
||||
"user",
|
||||
"appraisers",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
)
|
||||
|
||||
read_only_fields = (
|
||||
"id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
)
|
||||
@@ -1 +1,2 @@
|
||||
from .AutoEvaluation import * # noqa
|
||||
from .MechanicAutoEvaluation import * # noqa
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from core.apps.evaluation.models import MechanicAutoevaluationhistoryModel
|
||||
|
||||
|
||||
class BaseMechanicAutoevaluationhistorySerializer(serializers.ModelSerializer):
|
||||
event_type_display = serializers.CharField(source="get_event_type_display", read_only=True)
|
||||
actor = serializers.SerializerMethodField()
|
||||
|
||||
def get_actor(self, obj):
|
||||
return {
|
||||
"id": obj.actor_id,
|
||||
"full_name": obj.actor_full_name,
|
||||
"role": obj.actor_role,
|
||||
}
|
||||
|
||||
class Meta:
|
||||
model = MechanicAutoevaluationhistoryModel
|
||||
fields = [
|
||||
"id",
|
||||
"event_type",
|
||||
"event_type_display",
|
||||
"actor",
|
||||
"meta",
|
||||
"created_at",
|
||||
]
|
||||
|
||||
|
||||
class ListMechanicAutoevaluationhistorySerializer(BaseMechanicAutoevaluationhistorySerializer):
|
||||
class Meta(BaseMechanicAutoevaluationhistorySerializer.Meta): ...
|
||||
|
||||
|
||||
class RetrieveMechanicAutoevaluationhistorySerializer(BaseMechanicAutoevaluationhistorySerializer):
|
||||
class Meta(BaseMechanicAutoevaluationhistorySerializer.Meta):
|
||||
fields = BaseMechanicAutoevaluationhistorySerializer.Meta.fields + ["mechanic_auto_evaluation"]
|
||||
|
||||
|
||||
class CreateMechanicAutoevaluationhistorySerializer(BaseMechanicAutoevaluationhistorySerializer):
|
||||
class Meta(BaseMechanicAutoevaluationhistorySerializer.Meta): ...
|
||||
@@ -1,2 +1,3 @@
|
||||
from .AutoEvaluationHistory import * # noqa
|
||||
from .MechanicAutoEvaluationHistory import * # noqa
|
||||
from .QuickEvaluationHistory import * # noqa
|
||||
|
||||
Reference in New Issue
Block a user