feat: add ReferenceItem model and update QuickEvaluation FKs
- 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
This commit is contained in:
@@ -3,8 +3,7 @@ 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 CarState, CarType, QuickEvaluationStatus
|
||||
from core.apps.evaluation.choices.vehicle import BodyType, FuelType, VehicleCondition
|
||||
from core.apps.evaluation.choices.quick import CarType, QuickEvaluationStatus
|
||||
|
||||
|
||||
class QuickEvaluationModel(AbstractBaseModel):
|
||||
@@ -16,46 +15,115 @@ class QuickEvaluationModel(AbstractBaseModel):
|
||||
related_name="quick_evaluations",
|
||||
verbose_name=_("created by"),
|
||||
)
|
||||
tech_passport_number = models.CharField(
|
||||
verbose_name=_("tech passport number"), max_length=50, blank=True, null=True
|
||||
|
||||
# Tex passport
|
||||
tex_passport_serie_num = models.CharField(
|
||||
verbose_name=_("tech passport series and number"),
|
||||
max_length=20,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
license_plate = models.CharField(
|
||||
verbose_name=_("license plate"), max_length=20, blank=True, null=True
|
||||
tech_passport_issued_date = models.DateField(
|
||||
verbose_name=_("tech passport issued date"),
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
model = models.CharField(verbose_name=_("model"), max_length=255, blank=True, null=True)
|
||||
brand = models.CharField(verbose_name=_("brand"), max_length=255, blank=True, null=True)
|
||||
manufacture_year = models.IntegerField(
|
||||
verbose_name=_("manufacture year"), 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"),
|
||||
)
|
||||
mileage = models.IntegerField(verbose_name=_("mileage"), blank=True, null=True)
|
||||
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.CharField(verbose_name=_("color"), max_length=50, blank=True, null=True)
|
||||
fuel_type = models.CharField(
|
||||
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"),
|
||||
max_length=50,
|
||||
choices=FuelType.choices,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
body_type = models.CharField(
|
||||
verbose_name=_("body type"),
|
||||
max_length=50,
|
||||
choices=BodyType.choices,
|
||||
blank=True,
|
||||
state_car = models.ForeignKey(
|
||||
"evaluation.ReferenceitemModel",
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
)
|
||||
condition = models.CharField(
|
||||
verbose_name=_("condition"),
|
||||
max_length=50,
|
||||
choices=VehicleCondition.choices,
|
||||
blank=True,
|
||||
null=True,
|
||||
related_name="quick_eval_states",
|
||||
verbose_name=_("car state"),
|
||||
)
|
||||
|
||||
# Result
|
||||
estimated_price = models.DecimalField(
|
||||
verbose_name=_("estimated price"),
|
||||
max_digits=15,
|
||||
@@ -69,20 +137,6 @@ class QuickEvaluationModel(AbstractBaseModel):
|
||||
choices=QuickEvaluationStatus.choices,
|
||||
default=QuickEvaluationStatus.CREATED,
|
||||
)
|
||||
car_type = models.CharField(
|
||||
verbose_name=_("car type"),
|
||||
max_length=50,
|
||||
choices=CarType.choices,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
state_car = models.CharField(
|
||||
verbose_name=_("car state"),
|
||||
max_length=50,
|
||||
choices=CarState.choices,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"Quick Evaluation {self.pk} by {self.created_by}"
|
||||
|
||||
Reference in New Issue
Block a user