add new fields for auto-evalution model
This commit is contained in:
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user