- Create ReferenceitemModel with type, name, parent (self FK), order, is_active fields - Add ReferenceType choices: brand, marka, color, fuel_type, body_type, car_position, state_car - Implement ReferenceItem API (list, retrieve) with filter by type/parent/is_active, search, ordering - Add ReferenceItem admin with list_filter, search, inline editing - Change QuickEvaluation FK fields from shared.OptionsModel to evaluation.ReferenceitemModel - Update serializers and views to use .name instead of .key - Add ReferenceItem to unfold admin navigation
153 lines
4.3 KiB
Python
153 lines
4.3 KiB
Python
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django_core.models import AbstractBaseModel
|
|
from model_bakery import baker
|
|
|
|
from core.apps.evaluation.choices.quick import CarType, QuickEvaluationStatus
|
|
|
|
|
|
class QuickEvaluationModel(AbstractBaseModel):
|
|
created_by = models.ForeignKey(
|
|
"accounts.User",
|
|
on_delete=models.SET_NULL,
|
|
null=True,
|
|
blank=True,
|
|
related_name="quick_evaluations",
|
|
verbose_name=_("created by"),
|
|
)
|
|
|
|
# Tex passport
|
|
tex_passport_serie_num = models.CharField(
|
|
verbose_name=_("tech passport series and number"),
|
|
max_length=20,
|
|
blank=True,
|
|
null=True,
|
|
)
|
|
tech_passport_issued_date = models.DateField(
|
|
verbose_name=_("tech passport issued date"),
|
|
blank=True,
|
|
null=True,
|
|
)
|
|
tech_passport_issued_place = models.CharField(
|
|
verbose_name=_("tech passport issued place"),
|
|
max_length=255,
|
|
blank=True,
|
|
null=True,
|
|
)
|
|
tex_passport_file = models.FileField(
|
|
verbose_name=_("tech passport file"),
|
|
upload_to="quick_evaluation/tech_passports/%Y/%m/",
|
|
blank=True,
|
|
null=True,
|
|
)
|
|
|
|
# Car info
|
|
car_type = models.CharField(
|
|
verbose_name=_("car type"),
|
|
max_length=50,
|
|
choices=CarType.choices,
|
|
blank=True,
|
|
null=True,
|
|
)
|
|
brand = models.ForeignKey(
|
|
"evaluation.ReferenceitemModel",
|
|
on_delete=models.SET_NULL,
|
|
null=True,
|
|
blank=True,
|
|
related_name="quick_eval_brands",
|
|
verbose_name=_("brand"),
|
|
)
|
|
marka = models.ForeignKey(
|
|
"evaluation.ReferenceitemModel",
|
|
on_delete=models.SET_NULL,
|
|
null=True,
|
|
blank=True,
|
|
related_name="quick_eval_markas",
|
|
verbose_name=_("marka"),
|
|
)
|
|
car_position = models.ForeignKey(
|
|
"evaluation.ReferenceitemModel",
|
|
on_delete=models.SET_NULL,
|
|
null=True,
|
|
blank=True,
|
|
related_name="quick_eval_positions",
|
|
verbose_name=_("car position"),
|
|
)
|
|
distance_covered = models.IntegerField(
|
|
verbose_name=_("distance covered (km)"),
|
|
blank=True,
|
|
null=True,
|
|
)
|
|
body_type = models.ForeignKey(
|
|
"evaluation.ReferenceitemModel",
|
|
on_delete=models.SET_NULL,
|
|
null=True,
|
|
blank=True,
|
|
related_name="quick_eval_body_types",
|
|
verbose_name=_("body type"),
|
|
)
|
|
vin_number = models.CharField(
|
|
verbose_name=_("VIN number"), max_length=50, blank=True, null=True
|
|
)
|
|
car_number = models.CharField(
|
|
verbose_name=_("car number"), max_length=20, blank=True, null=True
|
|
)
|
|
car_manufactured_date = models.IntegerField(
|
|
verbose_name=_("manufacture year"), blank=True, null=True
|
|
)
|
|
engine_number = models.CharField(
|
|
verbose_name=_("engine number"), max_length=50, blank=True, null=True
|
|
)
|
|
color = models.ForeignKey(
|
|
"evaluation.ReferenceitemModel",
|
|
on_delete=models.SET_NULL,
|
|
null=True,
|
|
blank=True,
|
|
related_name="quick_eval_colors",
|
|
verbose_name=_("color"),
|
|
)
|
|
fuel_type = models.ForeignKey(
|
|
"evaluation.ReferenceitemModel",
|
|
on_delete=models.SET_NULL,
|
|
null=True,
|
|
blank=True,
|
|
related_name="quick_eval_fuel_types",
|
|
verbose_name=_("fuel type"),
|
|
)
|
|
state_car = models.ForeignKey(
|
|
"evaluation.ReferenceitemModel",
|
|
on_delete=models.SET_NULL,
|
|
null=True,
|
|
blank=True,
|
|
related_name="quick_eval_states",
|
|
verbose_name=_("car state"),
|
|
)
|
|
|
|
# Result
|
|
estimated_price = models.DecimalField(
|
|
verbose_name=_("estimated price"),
|
|
max_digits=15,
|
|
decimal_places=2,
|
|
blank=True,
|
|
null=True,
|
|
)
|
|
status = models.CharField(
|
|
verbose_name=_("status"),
|
|
max_length=50,
|
|
choices=QuickEvaluationStatus.choices,
|
|
default=QuickEvaluationStatus.CREATED,
|
|
)
|
|
|
|
def __str__(self):
|
|
return f"Quick Evaluation {self.pk} by {self.created_by}"
|
|
|
|
@classmethod
|
|
def _baker(cls):
|
|
return baker.make(cls)
|
|
|
|
class Meta:
|
|
db_table = "QuickEvaluation"
|
|
verbose_name = _("Quick Evaluation")
|
|
verbose_name_plural = _("Quick Evaluations")
|
|
|