feat: wire contract PDF context and align MechanicAuto with AutoEvaluation
- contract PDF: map report/customer/owner/contract from AutoEvaluationModel fields, accept inspection via POST serializer, fetch CBU.uz currency rates - MechanicAutoEvaluation: add distance_covered, object_owner_residence and car_position/body_type/fuel_type/state_car/assessment_task_type FKs; drop car_type and single tex_passport_file in favour of multi-file FK model Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,6 @@ from django_core.models import AbstractBaseModel
|
||||
from model_bakery import baker
|
||||
|
||||
from core.apps.evaluation.choices.auto import (
|
||||
AutoCarType,
|
||||
AutoCarWheel,
|
||||
AutoEvaluationStatus,
|
||||
AutoObjectType,
|
||||
@@ -50,12 +49,57 @@ class MechanicAutoEvaluationModel(AbstractBaseModel):
|
||||
blank=True,
|
||||
)
|
||||
|
||||
tex_passport_file = models.FileField(
|
||||
verbose_name=_("tech passport file"),
|
||||
upload_to="mechanic_evaluation/tech_passports/%Y/%m/",
|
||||
distance_covered = models.PositiveIntegerField(
|
||||
verbose_name=_("distance covered"),
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
object_owner_residence = models.CharField(
|
||||
verbose_name=_("object owner residence"),
|
||||
max_length=255,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
car_position = models.ForeignKey(
|
||||
'evaluation.ReferenceitemModel',
|
||||
verbose_name=_("car position"),
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=models.SET_NULL,
|
||||
related_name='evaluation_mechanic_auto_car_position',
|
||||
)
|
||||
body_type = models.ForeignKey(
|
||||
'evaluation.ReferenceitemModel',
|
||||
verbose_name=_("body type"),
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=models.SET_NULL,
|
||||
related_name='evaluation_mechanic_auto_body_type',
|
||||
)
|
||||
fuel_type = models.ForeignKey(
|
||||
'evaluation.ReferenceitemModel',
|
||||
verbose_name=_("fuel type"),
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=models.SET_NULL,
|
||||
related_name='evaluation_mechanic_auto_fuel_type',
|
||||
)
|
||||
state_car = models.ForeignKey(
|
||||
'evaluation.ReferenceitemModel',
|
||||
verbose_name=_("state car"),
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=models.SET_NULL,
|
||||
related_name='evaluation_mechanic_auto_state_car',
|
||||
)
|
||||
assessment_task_type = models.ForeignKey(
|
||||
'evaluation.ReferenceitemModel',
|
||||
verbose_name=_("assessment task type"),
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=models.SET_NULL,
|
||||
related_name='evaluation_mechanic_auto_assessment_task_type',
|
||||
)
|
||||
|
||||
# ── Step 1 — Umumiy ma'lumotlar ──────────────────────────────────
|
||||
registration_number = models.CharField(
|
||||
@@ -170,12 +214,6 @@ class MechanicAutoEvaluationModel(AbstractBaseModel):
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
car_type = models.IntegerField(
|
||||
verbose_name=_("car type"),
|
||||
choices=AutoCarType.choices,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
car_wheel = models.IntegerField(
|
||||
verbose_name=_("car wheel"),
|
||||
choices=AutoCarWheel.choices,
|
||||
@@ -248,3 +286,27 @@ class MechanicAutoEvaluationModel(AbstractBaseModel):
|
||||
db_table = "MechanicAutoEvaluation"
|
||||
verbose_name = _("Mechanic Auto Evaluation")
|
||||
verbose_name_plural = _("Mechanic Auto Evaluations")
|
||||
|
||||
|
||||
class MechanicAutoEvaluationTexPassportFile(AbstractBaseModel):
|
||||
mechanic_auto_evaluation = models.ForeignKey(
|
||||
MechanicAutoEvaluationModel,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="tex_passport_files",
|
||||
)
|
||||
file = models.FileField(
|
||||
verbose_name=_("tech passport file"),
|
||||
upload_to="mechanic_evaluation/tech_passports/%Y/%m/",
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"Tex passport file for MechanicAutoEvaluation #{self.mechanic_auto_evaluation_id}"
|
||||
|
||||
@classmethod
|
||||
def _baker(cls):
|
||||
return baker.make(cls)
|
||||
|
||||
class Meta:
|
||||
db_table = "MechanicAutoEvaluationTexPassportFile"
|
||||
verbose_name = _("Mechanic Auto Evaluation Tex Passport File")
|
||||
verbose_name_plural = _("Mechanic Auto Evaluation Tex Passport Files")
|
||||
|
||||
Reference in New Issue
Block a user