Compare commits
4 Commits
0dbd246120
...
d5a132c75b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d5a132c75b | ||
| 09862985e1 | |||
| e9d779d489 | |||
| b8dcbe811d |
@@ -24,7 +24,7 @@ class EvaluationrequestAdmin(ModelAdmin):
|
|||||||
"tex_passport",
|
"tex_passport",
|
||||||
"user__phone",
|
"user__phone",
|
||||||
)
|
)
|
||||||
readonly_fields = ("user", "created_at", "updated_at")
|
readonly_fields = ("created_at", "updated_at")
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
("Asosiy", {
|
("Asosiy", {
|
||||||
"fields": (
|
"fields": (
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# Generated by Django 5.2.7 on 2026-04-02 12:34
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('evaluation', '0024_add_history_indexes'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='evaluationrequestmodel',
|
||||||
|
name='form_ownership',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='evaluation_form_ownership_requests', to='evaluation.referenceitemmodel', verbose_name='form ownership'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='evaluationrequestmodel',
|
||||||
|
name='property_rights',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='evaluation_property_rights_requests', to='evaluation.referenceitemmodel', verbose_name='property rights'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='evaluationrequestmodel',
|
||||||
|
name='rate_goal',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='evaluation_rate_goal_requests', to='evaluation.referenceitemmodel', verbose_name='rate goal'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='evaluationrequestmodel',
|
||||||
|
name='value_determined',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='evaluation_value_determined_requests', to='evaluation.referenceitemmodel', verbose_name='value determined'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -44,21 +44,37 @@ class EvaluationrequestModel(AbstractBaseModel):
|
|||||||
blank=True,
|
blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
)
|
)
|
||||||
value_determined = models.CharField(
|
value_determined = models.ForeignKey(
|
||||||
|
"evaluation.ReferenceitemModel",
|
||||||
verbose_name=_("value determined"),
|
verbose_name=_("value determined"),
|
||||||
max_length=100,
|
related_name="evaluation_value_determined_requests",
|
||||||
|
on_delete=models.SET_NULL,
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
)
|
)
|
||||||
rate_goal = models.CharField(
|
rate_goal = models.ForeignKey(
|
||||||
|
"evaluation.ReferenceitemModel",
|
||||||
verbose_name=_("rate goal"),
|
verbose_name=_("rate goal"),
|
||||||
max_length=100,
|
related_name="evaluation_rate_goal_requests",
|
||||||
|
on_delete=models.SET_NULL,
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
)
|
)
|
||||||
property_rights = models.CharField(
|
property_rights = models.ForeignKey(
|
||||||
|
"evaluation.ReferenceitemModel",
|
||||||
verbose_name=_("property rights"),
|
verbose_name=_("property rights"),
|
||||||
max_length=100,
|
related_name="evaluation_property_rights_requests",
|
||||||
|
on_delete=models.SET_NULL,
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
)
|
)
|
||||||
form_ownership = models.CharField(
|
form_ownership = models.ForeignKey(
|
||||||
|
"evaluation.ReferenceitemModel",
|
||||||
verbose_name=_("form ownership"),
|
verbose_name=_("form ownership"),
|
||||||
max_length=100,
|
related_name="evaluation_form_ownership_requests",
|
||||||
|
on_delete=models.SET_NULL,
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
)
|
)
|
||||||
worked_hours = models.IntegerField(
|
worked_hours = models.IntegerField(
|
||||||
verbose_name=_("worked hours"),
|
verbose_name=_("worked hours"),
|
||||||
|
|||||||
@@ -4,11 +4,25 @@ from core.apps.evaluation.models import AutoevaluationhistoryModel
|
|||||||
|
|
||||||
|
|
||||||
class BaseAutoevaluationhistorySerializer(serializers.ModelSerializer):
|
class BaseAutoevaluationhistorySerializer(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:
|
class Meta:
|
||||||
model = AutoevaluationhistoryModel
|
model = AutoevaluationhistoryModel
|
||||||
fields = [
|
fields = [
|
||||||
"id",
|
"id",
|
||||||
"name",
|
"event_type",
|
||||||
|
"event_type_display",
|
||||||
|
"actor",
|
||||||
|
"meta",
|
||||||
|
"created_at",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@@ -17,12 +31,9 @@ class ListAutoevaluationhistorySerializer(BaseAutoevaluationhistorySerializer):
|
|||||||
|
|
||||||
|
|
||||||
class RetrieveAutoevaluationhistorySerializer(BaseAutoevaluationhistorySerializer):
|
class RetrieveAutoevaluationhistorySerializer(BaseAutoevaluationhistorySerializer):
|
||||||
class Meta(BaseAutoevaluationhistorySerializer.Meta): ...
|
class Meta(BaseAutoevaluationhistorySerializer.Meta):
|
||||||
|
fields = BaseAutoevaluationhistorySerializer.Meta.fields + ["auto_evaluation"]
|
||||||
|
|
||||||
|
|
||||||
class CreateAutoevaluationhistorySerializer(BaseAutoevaluationhistorySerializer):
|
class CreateAutoevaluationhistorySerializer(BaseAutoevaluationhistorySerializer):
|
||||||
class Meta(BaseAutoevaluationhistorySerializer.Meta):
|
class Meta(BaseAutoevaluationhistorySerializer.Meta): ...
|
||||||
fields = [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,62 +0,0 @@
|
|||||||
from rest_framework import serializers
|
|
||||||
|
|
||||||
from core.apps.evaluation.models import AutoevaluationhistoryModel, QuickevaluationhistoryModel
|
|
||||||
|
|
||||||
|
|
||||||
class BaseHistorySerializer(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,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# ─── AutoEvaluation History ────────────────────────────────────────────────
|
|
||||||
|
|
||||||
class ListAutoevaluationhistorySerializer(BaseHistorySerializer):
|
|
||||||
class Meta:
|
|
||||||
model = AutoevaluationhistoryModel
|
|
||||||
fields = [
|
|
||||||
"id",
|
|
||||||
"event_type",
|
|
||||||
"event_type_display",
|
|
||||||
"actor",
|
|
||||||
"meta",
|
|
||||||
"created_at",
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class RetrieveAutoevaluationhistorySerializer(ListAutoevaluationhistorySerializer):
|
|
||||||
class Meta(ListAutoevaluationhistorySerializer.Meta):
|
|
||||||
fields = ListAutoevaluationhistorySerializer.Meta.fields + ["auto_evaluation"]
|
|
||||||
|
|
||||||
|
|
||||||
# Read-only — API orqali yozilmaydi, faqat signallar yozadi
|
|
||||||
CreateAutoevaluationhistorySerializer = ListAutoevaluationhistorySerializer
|
|
||||||
|
|
||||||
|
|
||||||
# ─── QuickEvaluation History ───────────────────────────────────────────────
|
|
||||||
|
|
||||||
class ListQuickevaluationhistorySerializer(BaseHistorySerializer):
|
|
||||||
class Meta:
|
|
||||||
model = QuickevaluationhistoryModel
|
|
||||||
fields = [
|
|
||||||
"id",
|
|
||||||
"event_type",
|
|
||||||
"event_type_display",
|
|
||||||
"actor",
|
|
||||||
"meta",
|
|
||||||
"created_at",
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class RetrieveQuickevaluationhistorySerializer(ListQuickevaluationhistorySerializer):
|
|
||||||
class Meta(ListQuickevaluationhistorySerializer.Meta):
|
|
||||||
fields = ListQuickevaluationhistorySerializer.Meta.fields + ["quick_evaluation"]
|
|
||||||
|
|
||||||
|
|
||||||
CreateQuickevaluationhistorySerializer = ListQuickevaluationhistorySerializer
|
|
||||||
@@ -4,11 +4,25 @@ from core.apps.evaluation.models import QuickevaluationhistoryModel
|
|||||||
|
|
||||||
|
|
||||||
class BaseQuickevaluationhistorySerializer(serializers.ModelSerializer):
|
class BaseQuickevaluationhistorySerializer(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:
|
class Meta:
|
||||||
model = QuickevaluationhistoryModel
|
model = QuickevaluationhistoryModel
|
||||||
fields = [
|
fields = [
|
||||||
"id",
|
"id",
|
||||||
"name",
|
"event_type",
|
||||||
|
"event_type_display",
|
||||||
|
"actor",
|
||||||
|
"meta",
|
||||||
|
"created_at",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@@ -17,12 +31,9 @@ class ListQuickevaluationhistorySerializer(BaseQuickevaluationhistorySerializer)
|
|||||||
|
|
||||||
|
|
||||||
class RetrieveQuickevaluationhistorySerializer(BaseQuickevaluationhistorySerializer):
|
class RetrieveQuickevaluationhistorySerializer(BaseQuickevaluationhistorySerializer):
|
||||||
class Meta(BaseQuickevaluationhistorySerializer.Meta): ...
|
class Meta(BaseQuickevaluationhistorySerializer.Meta):
|
||||||
|
fields = BaseQuickevaluationhistorySerializer.Meta.fields + ["quick_evaluation"]
|
||||||
|
|
||||||
|
|
||||||
class CreateQuickevaluationhistorySerializer(BaseQuickevaluationhistorySerializer):
|
class CreateQuickevaluationhistorySerializer(BaseQuickevaluationhistorySerializer):
|
||||||
class Meta(BaseQuickevaluationhistorySerializer.Meta):
|
class Meta(BaseQuickevaluationhistorySerializer.Meta): ...
|
||||||
fields = [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,8 +1,2 @@
|
|||||||
from .History import ( # noqa
|
from .AutoEvaluationHistory import * # noqa
|
||||||
CreateAutoevaluationhistorySerializer,
|
from .QuickEvaluationHistory import * # noqa
|
||||||
CreateQuickevaluationhistorySerializer,
|
|
||||||
ListAutoevaluationhistorySerializer,
|
|
||||||
ListQuickevaluationhistorySerializer,
|
|
||||||
RetrieveAutoevaluationhistorySerializer,
|
|
||||||
RetrieveQuickevaluationhistorySerializer,
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -2,7 +2,8 @@ import re
|
|||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from core.apps.evaluation.models import EvaluationrequestModel
|
from core.apps.evaluation.models import EvaluationrequestModel, ReferenceitemModel
|
||||||
|
from core.apps.evaluation.serializers.reference import ListReferenceitemSerializer
|
||||||
|
|
||||||
|
|
||||||
class BaseEvaluationrequestSerializer(serializers.ModelSerializer):
|
class BaseEvaluationrequestSerializer(serializers.ModelSerializer):
|
||||||
@@ -18,6 +19,10 @@ class BaseEvaluationrequestSerializer(serializers.ModelSerializer):
|
|||||||
location = serializers.SerializerMethodField()
|
location = serializers.SerializerMethodField()
|
||||||
|
|
||||||
location_name = serializers.CharField(required=False)
|
location_name = serializers.CharField(required=False)
|
||||||
|
value_determined = ListReferenceitemSerializer(read_only=True)
|
||||||
|
rate_goal = ListReferenceitemSerializer(read_only=True)
|
||||||
|
property_rights = ListReferenceitemSerializer(read_only=True)
|
||||||
|
form_ownership = ListReferenceitemSerializer(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = EvaluationrequestModel
|
model = EvaluationrequestModel
|
||||||
@@ -66,22 +71,45 @@ class RetrieveEvaluationrequestSerializer(BaseEvaluationrequestSerializer):
|
|||||||
|
|
||||||
|
|
||||||
class CreateEvaluationrequestSerializer(serializers.ModelSerializer):
|
class CreateEvaluationrequestSerializer(serializers.ModelSerializer):
|
||||||
location = serializers.DictField(required=False)
|
location = serializers.DictField(required=False, allow_empty=True)
|
||||||
# Frontend may send locationName
|
|
||||||
locationName = serializers.CharField(write_only=True, required=False)
|
# locationName — string qabul qiladi, location ichida yoki tashqarida yuborsa bo'ladi
|
||||||
|
locationName = serializers.CharField(
|
||||||
|
write_only=True,
|
||||||
|
required=False,
|
||||||
|
allow_null=True,
|
||||||
|
allow_blank=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Faqat truck_car uchun majburiy — field darajasida optional qilib belgilaymiz,
|
||||||
|
# validate() da object_type ga qarab tekshiramiz
|
||||||
|
worked_hours = serializers.IntegerField(
|
||||||
|
required=False,
|
||||||
|
allow_null=True,
|
||||||
|
)
|
||||||
|
chassi = serializers.CharField(
|
||||||
|
required=False,
|
||||||
|
allow_null=True,
|
||||||
|
allow_blank=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
value_determined = serializers.IntegerField(required=False, allow_null=True)
|
||||||
|
rate_goal = serializers.IntegerField(required=False, allow_null=True)
|
||||||
|
property_rights = serializers.IntegerField(required=False, allow_null=True)
|
||||||
|
form_ownership = serializers.IntegerField(required=False, allow_null=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = EvaluationrequestModel
|
model = EvaluationrequestModel
|
||||||
fields = [
|
fields = [
|
||||||
|
"value_determined",
|
||||||
|
"rate_goal",
|
||||||
|
"property_rights",
|
||||||
|
"form_ownership",
|
||||||
"rate_type",
|
"rate_type",
|
||||||
"object_type",
|
"object_type",
|
||||||
"customer_inn_number",
|
"customer_inn_number",
|
||||||
"owner_inn_number",
|
"owner_inn_number",
|
||||||
"tex_passport",
|
"tex_passport",
|
||||||
"value_determined",
|
|
||||||
"rate_goal",
|
|
||||||
"property_rights",
|
|
||||||
"form_ownership",
|
|
||||||
"worked_hours",
|
"worked_hours",
|
||||||
"chassi",
|
"chassi",
|
||||||
"need_delivering",
|
"need_delivering",
|
||||||
@@ -100,27 +128,49 @@ class CreateEvaluationrequestSerializer(serializers.ModelSerializer):
|
|||||||
rate_type = attrs.get("rate_type")
|
rate_type = attrs.get("rate_type")
|
||||||
object_type = attrs.get("object_type")
|
object_type = attrs.get("object_type")
|
||||||
|
|
||||||
# object_type majburiy agar rate_type=auto
|
|
||||||
if rate_type == "auto" and not object_type:
|
if rate_type == "auto" and not object_type:
|
||||||
raise serializers.ValidationError(
|
raise serializers.ValidationError(
|
||||||
{"object_type": "rate_type 'auto' bo'lganda object_type majburiy."}
|
{"object_type": "rate_type 'auto' bo'lganda object_type majburiy."}
|
||||||
)
|
)
|
||||||
|
|
||||||
# tex_passport majburiy agar rate_type=auto
|
|
||||||
if rate_type == "auto" and not attrs.get("tex_passport"):
|
if rate_type == "auto" and not attrs.get("tex_passport"):
|
||||||
raise serializers.ValidationError(
|
raise serializers.ValidationError(
|
||||||
{"tex_passport": "rate_type 'auto' bo'lganda tex_passport majburiy."}
|
{"tex_passport": "rate_type 'auto' bo'lganda tex_passport majburiy."}
|
||||||
)
|
)
|
||||||
|
|
||||||
# worked_hours va chassi faqat yuk automobil uchun majburiy (truck_car)
|
# worked_hours va chassi FAQAT yuk avtomobil (truck_car) uchun majburiy
|
||||||
if object_type == "truck_car":
|
if object_type == "truck_car":
|
||||||
if attrs.get("worked_hours") is None:
|
if attrs.get("worked_hours") is None:
|
||||||
raise serializers.ValidationError(
|
raise serializers.ValidationError(
|
||||||
{"worked_hours": "Yuk automobil uchun ishlagan soati majburiy."}
|
{"worked_hours": "Yuk avtomobil uchun ishlagan soati majburiy."}
|
||||||
)
|
)
|
||||||
if attrs.get("chassi") is None:
|
if not attrs.get("chassi"):
|
||||||
raise serializers.ValidationError(
|
raise serializers.ValidationError(
|
||||||
{"chassi": "Yuk automobil uchun shassi majburiy."}
|
{"chassi": "Yuk avtomobil uchun shassi raqami majburiy."}
|
||||||
|
)
|
||||||
|
|
||||||
|
if attrs.get("value_determined"):
|
||||||
|
if attrs.get("value_determined") not in ReferenceitemModel.objects.values_list("id", flat=True):
|
||||||
|
raise serializers.ValidationError(
|
||||||
|
{"value_determined": "Noto'g'ri qiymat aniqlandi."}
|
||||||
|
)
|
||||||
|
|
||||||
|
if attrs.get("rate_goal"):
|
||||||
|
if attrs.get("rate_goal") not in ReferenceitemModel.objects.values_list("id", flat=True):
|
||||||
|
raise serializers.ValidationError(
|
||||||
|
{"rate_goal": "Noto'g'ri qiymat aniqlandi."}
|
||||||
|
)
|
||||||
|
|
||||||
|
if attrs.get("property_rights"):
|
||||||
|
if attrs.get("property_rights") not in ReferenceitemModel.objects.values_list("id", flat=True):
|
||||||
|
raise serializers.ValidationError(
|
||||||
|
{"property_rights": "Noto'g'ri qiymat aniqlandi."}
|
||||||
|
)
|
||||||
|
|
||||||
|
if attrs.get("form_ownership"):
|
||||||
|
if attrs.get("form_ownership") not in ReferenceitemModel.objects.values_list("id", flat=True):
|
||||||
|
raise serializers.ValidationError(
|
||||||
|
{"form_ownership": "Noto'g'ri qiymat aniqlandi."}
|
||||||
)
|
)
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
@@ -136,7 +186,7 @@ class CreateEvaluationrequestSerializer(serializers.ModelSerializer):
|
|||||||
location_name = location.get("name") or location.get("locationName")
|
location_name = location.get("name") or location.get("locationName")
|
||||||
|
|
||||||
if location_name:
|
if location_name:
|
||||||
validated_data["location_name"] = location_name
|
validated_data["location_name"] = str(location_name)
|
||||||
|
|
||||||
validated_data["user"] = self.context["request"].user
|
validated_data["user"] = self.context["request"].user
|
||||||
return super().create(validated_data)
|
return super().create(validated_data)
|
||||||
|
|||||||
Reference in New Issue
Block a user