Merge pull request 'add new fields to request-evalution api' (#120) from behruz into main
Some checks failed
Deploy to Production / build-and-deploy (push) Failing after 53s
Some checks failed
Deploy to Production / build-and-deploy (push) Failing after 53s
Reviewed-on: #120
This commit is contained in:
@@ -19,3 +19,8 @@ class RequestStatus(models.TextChoices):
|
||||
IN_PROGRESS = "in_progress", _("Jarayonda")
|
||||
COMPLETED = "completed", _("Bajarildi")
|
||||
REJECTED = "rejected", _("Rad etildi")
|
||||
|
||||
|
||||
class RequestPersonType(models.TextChoices):
|
||||
INDIVIDUAL_PERSON = "individual_person", "Jismoniy shaxs"
|
||||
LEGAL_PERSON = "legal_person", 'Yuridik shaxs',
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
# Generated by Django 5.2.7 on 2026-04-28 11:41
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evaluation', '0036_remove_autoevaluationmodel_form_ownership_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='customer_and_owner_same',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='EvaluationRequestCustomerModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('type', models.CharField(choices=[('individual_person', 'Jismoniy shaxs'), ('legal_person', 'Yuridik shaxs')], max_length=100)),
|
||||
('jshshir', models.CharField(max_length=100)),
|
||||
('evaluation_request', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='customer', to='evaluation.evaluationrequestmodel')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Evaluation Request Customer',
|
||||
'verbose_name_plural': 'Evaluation Request Customers',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='EvaluationRequestOwnerModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('type', models.CharField(choices=[('individual_person', 'Jismoniy shaxs'), ('legal_person', 'Yuridik shaxs')], max_length=100)),
|
||||
('jshshir', models.CharField(max_length=100)),
|
||||
('evaluation_request', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='owner', to='evaluation.evaluationrequestmodel')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Evaluation Request Owner',
|
||||
'verbose_name_plural': 'Evaluation Request Owners',
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,88 @@
|
||||
# Generated by Django 5.2.7 on 2026-04-28 11:47
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('evaluation', '0037_evaluationrequestmodel_customer_and_owner_same_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='distance_covered',
|
||||
field=models.FloatField(blank=True, default=0.0, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='gov_number',
|
||||
field=models.CharField(blank=True, max_length=100, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='chassi',
|
||||
field=models.CharField(blank=True, max_length=100, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='customer_inn_number',
|
||||
field=models.CharField(max_length=20),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='is_archive',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='location_lat',
|
||||
field=models.DecimalField(blank=True, decimal_places=6, max_digits=9, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='location_lng',
|
||||
field=models.DecimalField(blank=True, decimal_places=6, max_digits=9, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='location_name',
|
||||
field=models.CharField(blank=True, max_length=255, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='need_delivering',
|
||||
field=models.BooleanField(default=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='object_type',
|
||||
field=models.CharField(blank=True, choices=[('lightweight_auto', 'Yengil automobil'), ('truck_car', 'Yuk automobil'), ('special_tech', 'Maxsus texnika')], max_length=50, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='owner_inn_number',
|
||||
field=models.CharField(max_length=20),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='rate_type',
|
||||
field=models.CharField(choices=[('auto', 'Automobil'), ('real_estate', "Ko'chmas mulk"), ('equipment', 'Uskuna')], max_length=50),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='status',
|
||||
field=models.CharField(choices=[('pending', 'Kutilmoqda'), ('in_progress', 'Jarayonda'), ('completed', 'Bajarildi'), ('rejected', 'Rad etildi')], default='pending', max_length=50),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='tex_passport',
|
||||
field=models.CharField(blank=True, max_length=20, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationrequestmodel',
|
||||
name='worked_hours',
|
||||
field=models.IntegerField(blank=True, null=True),
|
||||
),
|
||||
]
|
||||
@@ -8,64 +8,41 @@ from core.apps.evaluation.choices.request import (
|
||||
EvaluationRateType,
|
||||
RequestObjectType,
|
||||
RequestStatus,
|
||||
RequestPersonType,
|
||||
)
|
||||
from core.apps.evaluation.models import ReferenceitemModel
|
||||
|
||||
|
||||
class EvaluationrequestModel(AbstractBaseModel):
|
||||
# request sender
|
||||
rate_type = models.CharField(max_length=50,choices=EvaluationRateType.choices)
|
||||
object_type = models.CharField(max_length=50,choices=RequestObjectType.choices,blank=True,null=True)
|
||||
status = models.CharField(max_length=50, choices=RequestStatus.choices, default=RequestStatus.PENDING)
|
||||
|
||||
distance_covered = models.FloatField(default=0.0, null=True, blank=True)
|
||||
worked_hours = models.IntegerField(blank=True,null=True)
|
||||
customer_inn_number = models.CharField(max_length=20)
|
||||
owner_inn_number = models.CharField(max_length=20)
|
||||
tex_passport = models.CharField(max_length=20,blank=True,null=True)
|
||||
chassi = models.CharField(max_length=100,blank=True,null=True)
|
||||
gov_number = models.CharField(max_length=100, null=True, blank=True)
|
||||
|
||||
location_name = models.CharField(max_length=255,blank=True,null=True)
|
||||
location_lat = models.DecimalField(max_digits=9,decimal_places=6,blank=True, null=True)
|
||||
location_lng = models.DecimalField(max_digits=9,decimal_places=6,blank=True,null=True)
|
||||
|
||||
need_delivering = models.BooleanField(default=True)
|
||||
is_archive = models.BooleanField(default=False)
|
||||
customer_and_owner_same = models.BooleanField(default=False)
|
||||
|
||||
###################
|
||||
# Foreign Keys
|
||||
###################
|
||||
user = models.ForeignKey(
|
||||
"accounts.User",
|
||||
on_delete=models.CASCADE,
|
||||
related_name="evaluation_requests",
|
||||
verbose_name=_("user"),
|
||||
)
|
||||
|
||||
# request type -> "Automobil", "Ko'chmas mulk", "Uskuna"
|
||||
rate_type = models.CharField(
|
||||
verbose_name=_("rate type"),
|
||||
max_length=50,
|
||||
choices=EvaluationRateType.choices,
|
||||
)
|
||||
###################
|
||||
# Automobil fields
|
||||
###################
|
||||
object_type = models.CharField(
|
||||
verbose_name=_("object type"),
|
||||
max_length=50,
|
||||
choices=RequestObjectType.choices,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
customer_inn_number = models.CharField(
|
||||
verbose_name=_("customer INN number"),
|
||||
max_length=20,
|
||||
)
|
||||
owner_inn_number = models.CharField(
|
||||
verbose_name=_("owner INN number"),
|
||||
max_length=20,
|
||||
)
|
||||
tex_passport = models.CharField(
|
||||
verbose_name=_("tex passport"),
|
||||
max_length=20,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
worked_hours = models.IntegerField(
|
||||
verbose_name=_("worked hours"),
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
chassi = models.CharField(
|
||||
verbose_name=_("chassi"),
|
||||
max_length=100,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
|
||||
###################
|
||||
# Value fields
|
||||
###################
|
||||
value_determined = models.ForeignKey(
|
||||
"evaluation.ReferenceitemModel",
|
||||
verbose_name=_("value determined"),
|
||||
@@ -99,47 +76,6 @@ class EvaluationrequestModel(AbstractBaseModel):
|
||||
null=True,
|
||||
)
|
||||
|
||||
###################
|
||||
# Location fields
|
||||
###################
|
||||
location_name = models.CharField(
|
||||
verbose_name=_("location name"),
|
||||
max_length=255,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
location_lat = models.DecimalField(
|
||||
verbose_name=_("location latitude"),
|
||||
max_digits=9,
|
||||
decimal_places=6,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
location_lng = models.DecimalField(
|
||||
verbose_name=_("location longitude"),
|
||||
max_digits=9,
|
||||
decimal_places=6,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
|
||||
###################
|
||||
# Other fields
|
||||
###################
|
||||
need_delivering = models.BooleanField(
|
||||
verbose_name=_("need delivering"),
|
||||
default=True,
|
||||
)
|
||||
status = models.CharField(
|
||||
verbose_name=_("status"),
|
||||
max_length=50,
|
||||
choices=RequestStatus.choices,
|
||||
default=RequestStatus.PENDING,
|
||||
)
|
||||
is_archive = models.BooleanField(
|
||||
verbose_name=_("is archive"),
|
||||
default=False,
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"Requests #{self.pk} — {self.get_rate_type_display()}"
|
||||
@@ -166,3 +102,29 @@ class EvaluationrequestModel(AbstractBaseModel):
|
||||
db_table = "EvaluationRequest"
|
||||
verbose_name = _("Evaluation Request")
|
||||
verbose_name_plural = _("Evaluation Requests")
|
||||
|
||||
|
||||
class EvaluationRequestOwnerModel(AbstractBaseModel):
|
||||
evaluation_request = models.OneToOneField(EvaluationrequestModel, on_delete=models.CASCADE, related_name='owner')
|
||||
type = models.CharField(max_length=100, choices=RequestPersonType.choices)
|
||||
jshshir = models.CharField(max_length=100)
|
||||
|
||||
def __str__(self):
|
||||
return f"Owner #{self.pk} — {self.type}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Evaluation Request Owner")
|
||||
verbose_name_plural = _("Evaluation Request Owners")
|
||||
|
||||
|
||||
class EvaluationRequestCustomerModel(AbstractBaseModel):
|
||||
evaluation_request = models.OneToOneField(EvaluationrequestModel, on_delete=models.CASCADE, related_name='customer')
|
||||
type = models.CharField(max_length=100, choices=RequestPersonType.choices)
|
||||
jshshir = models.CharField(max_length=100)
|
||||
|
||||
def __str__(self):
|
||||
return f"Customer #{self.pk} — {self.type}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Evaluation Request Customer")
|
||||
verbose_name_plural = _("Evaluation Request Customers")
|
||||
|
||||
@@ -4,8 +4,11 @@ from django.contrib.auth import get_user_model
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from core.apps.evaluation.models import EvaluationrequestModel, ReferenceitemModel
|
||||
from core.apps.evaluation.models import EvaluationrequestModel, ReferenceitemModel, EvaluationRequestOwnerModel, EvaluationRequestCustomerModel
|
||||
from core.apps.evaluation.serializers.reference import ListReferenceitemSerializer
|
||||
from core.apps.evaluation.serializers.request.owner import EvaluationRequestOwnerSerializer
|
||||
from core.apps.evaluation.serializers.request.customer import EvaluationRequestCustomerSerializer
|
||||
|
||||
|
||||
|
||||
User = get_user_model()
|
||||
@@ -29,6 +32,8 @@ class BaseEvaluationrequestSerializer(serializers.ModelSerializer):
|
||||
property_rights = ListReferenceitemSerializer(read_only=True)
|
||||
form_ownership = ListReferenceitemSerializer(read_only=True)
|
||||
user = serializers.SerializerMethodField(method_name="get_user")
|
||||
customer = EvaluationRequestCustomerSerializer(read_only=True)
|
||||
owner = EvaluationRequestOwnerSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = EvaluationrequestModel
|
||||
@@ -56,6 +61,8 @@ class BaseEvaluationrequestSerializer(serializers.ModelSerializer):
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"is_archive",
|
||||
"customer",
|
||||
"owner",
|
||||
]
|
||||
|
||||
def get_location(self, obj):
|
||||
@@ -113,6 +120,8 @@ class CreateEvaluationrequestSerializer(serializers.ModelSerializer):
|
||||
rate_goal = serializers.PrimaryKeyRelatedField(required=False, queryset=ReferenceitemModel.objects.all())
|
||||
property_rights = serializers.PrimaryKeyRelatedField(required=False, queryset=ReferenceitemModel.objects.all())
|
||||
form_ownership = serializers.PrimaryKeyRelatedField(required=False, queryset=ReferenceitemModel.objects.all())
|
||||
customer = EvaluationRequestCustomerSerializer()
|
||||
owner = EvaluationRequestOwnerSerializer()
|
||||
|
||||
class Meta:
|
||||
model = EvaluationrequestModel
|
||||
@@ -131,6 +140,11 @@ class CreateEvaluationrequestSerializer(serializers.ModelSerializer):
|
||||
"need_delivering",
|
||||
"location",
|
||||
"locationName",
|
||||
"customer",
|
||||
"owner",
|
||||
"customer_and_owner_same",
|
||||
"distance_covered",
|
||||
"gov_number"
|
||||
]
|
||||
|
||||
def validate_tex_passport(self, value):
|
||||
@@ -179,8 +193,32 @@ class CreateEvaluationrequestSerializer(serializers.ModelSerializer):
|
||||
if location_name:
|
||||
validated_data["location_name"] = str(location_name)
|
||||
validated_data["user"] = self.context["request"].user
|
||||
return super().create(validated_data)
|
||||
|
||||
instance = super().create(validated_data)
|
||||
|
||||
customer = validated_data.pop("customer", None)
|
||||
owner = validated_data.pop("owner", None)
|
||||
EvaluationRequestCustomerModel.objects.create(
|
||||
evaluation_request=instance,
|
||||
type=customer.get("type"),
|
||||
jshshir=customer.get("jshshir")
|
||||
)
|
||||
if not instance.customer_and_owner_same:
|
||||
EvaluationRequestOwnerModel.objects.create(
|
||||
evaluation_request=instance,
|
||||
type=owner.get("type"),
|
||||
jshshir=owner.get("jshshir")
|
||||
)
|
||||
else:
|
||||
EvaluationRequestOwnerModel.objects.create(
|
||||
evaluation_request=instance,
|
||||
type=customer.get("type"),
|
||||
jshshir=customer.get("jshshir")
|
||||
)
|
||||
|
||||
return instance
|
||||
|
||||
|
||||
class ArchiveEvaluationrequestSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(required=True)
|
||||
is_archive = serializers.BooleanField(required=True)
|
||||
is_archive = serializers.BooleanField(required=True)
|
||||
|
||||
9
core/apps/evaluation/serializers/request/customer.py
Normal file
9
core/apps/evaluation/serializers/request/customer.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from core.apps.evaluation.models.request import EvaluationRequestCustomerModel
|
||||
|
||||
|
||||
class EvaluationRequestCustomerSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = EvaluationRequestCustomerModel
|
||||
fields = ["id", "evaluation_request", "type", "jshshir"]
|
||||
9
core/apps/evaluation/serializers/request/owner.py
Normal file
9
core/apps/evaluation/serializers/request/owner.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from core.apps.evaluation.models.request import EvaluationRequestOwnerModel
|
||||
|
||||
|
||||
class EvaluationRequestOwnerSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = EvaluationRequestOwnerModel
|
||||
fields = ["id", "evaluation_request", "type", "jshshir"]
|
||||
Reference in New Issue
Block a user