add new fields for auto-evalution model

This commit is contained in:
xoliqberdiyev
2026-05-05 17:07:28 +05:00
parent e665939b1b
commit 9a730fa0a3
6 changed files with 401 additions and 43 deletions

View File

@@ -3,13 +3,36 @@ import re
from django.contrib.auth import get_user_model
from rest_framework import serializers
from django.db import transaction
from core.apps.evaluation.choices.request import RequestStatus
from core.apps.evaluation.models import AutoEvaluationModel, ReferenceitemModel, EvaluationrequestModel
from core.apps.evaluation.models import (
AutoEvaluationModel,
AutoEvaluationTexPassportFile,
ReferenceitemModel,
EvaluationrequestModel,
)
from core.apps.evaluation.serializers.reference import ListReferenceitemSerializer
User = get_user_model()
class AutoEvaluationTexPassportFileSerializer(serializers.ModelSerializer):
file = serializers.SerializerMethodField()
class Meta:
model = AutoEvaluationTexPassportFile
fields = ["id", "file"]
def get_file(self, obj):
request = self.context.get("request")
if not obj.file:
return None
if request:
return request.build_absolute_uri(obj.file.url)
return obj.file.url
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)
@@ -17,6 +40,12 @@ class BaseAutoevaluationSerializer(serializers.ModelSerializer):
default=None)
rate_type = ListReferenceitemSerializer(read_only=True)
value_determined = ListReferenceitemSerializer(read_only=True)
car_position = ListReferenceitemSerializer(read_only=True)
body_type = ListReferenceitemSerializer(read_only=True)
fuel_type = ListReferenceitemSerializer(read_only=True)
state_car = ListReferenceitemSerializer(read_only=True)
assessment_task_type = ListReferenceitemSerializer(read_only=True)
tex_passport_files = AutoEvaluationTexPassportFileSerializer(many=True, read_only=True)
user = serializers.SerializerMethodField(method_name="get_user", read_only=True)
class Meta:
@@ -32,7 +61,9 @@ class BaseAutoevaluationSerializer(serializers.ModelSerializer):
"object_owner_individual_person_p_name",
"object_owner_legal_entity",
"object_owner_legal_inn",
"object_owner_residence",
"tex_passport_serie_num",
"tex_passport_files",
"rating_goal",
"registration_number",
"object_type",
@@ -42,6 +73,12 @@ class BaseAutoevaluationSerializer(serializers.ModelSerializer):
"car_number",
"manufacture_year",
"car_color",
"distance_covered",
"car_position",
"body_type",
"fuel_type",
"state_car",
"assessment_task_type",
"status",
"status_display",
"created_at",
@@ -68,7 +105,6 @@ class ListAutoevaluationSerializer(BaseAutoevaluationSerializer):
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)
class Meta(BaseAutoevaluationSerializer.Meta):
@@ -89,11 +125,8 @@ class RetrieveAutoevaluationSerializer(BaseAutoevaluationSerializer):
"object_owner_legal_inn",
# Step 4
"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",
@@ -106,11 +139,6 @@ class RetrieveAutoevaluationSerializer(BaseAutoevaluationSerializer):
class UpdateAutoevaluationSerializer(serializers.ModelSerializer):
value_determined = serializers.PrimaryKeyRelatedField(
queryset=ReferenceitemModel.objects.all(),
required=False,
allow_null=True,
)
value_determined = serializers.PrimaryKeyRelatedField(
queryset=ReferenceitemModel.objects.all(),
required=False,
@@ -121,6 +149,36 @@ class UpdateAutoevaluationSerializer(serializers.ModelSerializer):
required=False,
allow_null=True,
)
car_position = serializers.PrimaryKeyRelatedField(
queryset=ReferenceitemModel.objects.all(),
required=False,
allow_null=True,
)
body_type = serializers.PrimaryKeyRelatedField(
queryset=ReferenceitemModel.objects.all(),
required=False,
allow_null=True,
)
fuel_type = serializers.PrimaryKeyRelatedField(
queryset=ReferenceitemModel.objects.all(),
required=False,
allow_null=True,
)
state_car = serializers.PrimaryKeyRelatedField(
queryset=ReferenceitemModel.objects.all(),
required=False,
allow_null=True,
)
assessment_task_type = serializers.PrimaryKeyRelatedField(
queryset=ReferenceitemModel.objects.all(),
required=False,
allow_null=True,
)
tex_passport_files = serializers.ListField(
child=serializers.FileField(),
required=False,
write_only=True,
)
class Meta:
model = AutoEvaluationModel
@@ -140,14 +198,15 @@ class UpdateAutoevaluationSerializer(serializers.ModelSerializer):
"object_owner_individual_person_passport_num",
"object_owner_legal_entity",
"object_owner_legal_inn",
"object_owner_residence",
"value_determined",
"rate_type",
"assessment_task_type",
# Step 4
"tex_passport_file",
"tex_passport_files",
"tex_passport_serie_num",
"tex_passport_gived_date",
"tex_passport_gived_location",
"car_type",
"car_wheel",
"car_brand",
"car_model",
@@ -155,6 +214,11 @@ class UpdateAutoevaluationSerializer(serializers.ModelSerializer):
"manufacture_year",
"car_dvigatel_number",
"car_color",
"distance_covered",
"car_position",
"body_type",
"fuel_type",
"state_car",
]
def validate_tex_passport_serie_num(self, value):
@@ -199,13 +263,23 @@ class UpdateAutoevaluationSerializer(serializers.ModelSerializer):
return attrs
def update(self, instance, validated_data):
files = validated_data.pop("tex_passport_files", None)
with transaction.atomic():
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.save()
if files is not None:
AutoEvaluationTexPassportFile.objects.bulk_create([
AutoEvaluationTexPassportFile(auto_evaluation=instance, file=f) for f in files
])
return instance
def to_representation(self, instance):
return RetrieveAutoevaluationSerializer(instance, context=self.context).data
class CreateAutoevaluationSerializer(serializers.ModelSerializer):
value_determined = serializers.PrimaryKeyRelatedField(
queryset=ReferenceitemModel.objects.all(),
required=False,
allow_null=True,
)
value_determined = serializers.PrimaryKeyRelatedField(
queryset=ReferenceitemModel.objects.all(),
required=False,
@@ -216,11 +290,41 @@ class CreateAutoevaluationSerializer(serializers.ModelSerializer):
required=False,
allow_null=True,
)
car_position = serializers.PrimaryKeyRelatedField(
queryset=ReferenceitemModel.objects.all(),
required=False,
allow_null=True,
)
body_type = serializers.PrimaryKeyRelatedField(
queryset=ReferenceitemModel.objects.all(),
required=False,
allow_null=True,
)
fuel_type = serializers.PrimaryKeyRelatedField(
queryset=ReferenceitemModel.objects.all(),
required=False,
allow_null=True,
)
state_car = serializers.PrimaryKeyRelatedField(
queryset=ReferenceitemModel.objects.all(),
required=False,
allow_null=True,
)
assessment_task_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,
)
tex_passport_files = serializers.ListField(
child=serializers.FileField(),
required=False,
write_only=True,
)
class Meta:
model = AutoEvaluationModel
@@ -241,14 +345,15 @@ class CreateAutoevaluationSerializer(serializers.ModelSerializer):
"object_owner_individual_person_passport_num",
"object_owner_legal_entity",
"object_owner_legal_inn",
"object_owner_residence",
"value_determined",
"rate_type",
"assessment_task_type",
# Step 4
"tex_passport_serie_num",
"tex_passport_file",
"tex_passport_files",
"tex_passport_gived_date",
"tex_passport_gived_location",
"car_type",
"car_wheel",
"car_brand",
"car_model",
@@ -256,6 +361,11 @@ class CreateAutoevaluationSerializer(serializers.ModelSerializer):
"manufacture_year",
"car_dvigatel_number",
"car_color",
"distance_covered",
"car_position",
"body_type",
"fuel_type",
"state_car",
]
def validate_tex_passport_serie_num(self, value):
@@ -300,13 +410,23 @@ class CreateAutoevaluationSerializer(serializers.ModelSerializer):
return attrs
def create(self, validated_data):
files = validated_data.pop("tex_passport_files", [])
user = self.context.get('request').user
validated_data['user'] = user
evaluation_req = validated_data.get("evaluation_request")
if evaluation_req:
evaluation_req.status = RequestStatus.IN_PROGRESS
evaluation_req.save()
return super().create(validated_data)
with transaction.atomic():
instance = super().create(validated_data)
if files:
AutoEvaluationTexPassportFile.objects.bulk_create([
AutoEvaluationTexPassportFile(auto_evaluation=instance, file=f) for f in files
])
return instance
def to_representation(self, instance):
return RetrieveAutoevaluationSerializer(instance, context=self.context).data
class AutoEvaluationAppraisersSerializer(serializers.Serializer):
@@ -343,8 +463,7 @@ class AutoEvaluationModelSerializer(serializers.ModelSerializer):
class Meta:
model = AutoEvaluationModel
fields = ("tex_passport_file",
fields = (
"registration_number",
"contract_date",
"object_inspection_date",
@@ -359,13 +478,14 @@ class AutoEvaluationModelSerializer(serializers.ModelSerializer):
"object_owner_individual_person_passport_num",
"object_owner_legal_entity",
"object_owner_legal_inn",
"object_owner_residence",
"value_determined",
"rate_type",
"assessment_task_type",
"tex_passport_serie_num",
"tex_passport_gived_date",
"tex_passport_gived_location",
"car_type",
"car_wheel",
"car_brand",
"car_model",
@@ -373,6 +493,11 @@ class AutoEvaluationModelSerializer(serializers.ModelSerializer):
"manufacture_year",
"car_dvigatel_number",
"car_color",
"distance_covered",
"car_position",
"body_type",
"fuel_type",
"state_car",
"rating_goal",
"status",