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:
xoliqberdiyev
2026-05-05 18:51:24 +05:00
parent 25e92623fd
commit 80a1f5ff17
10 changed files with 560 additions and 164 deletions

View File

@@ -0,0 +1,118 @@
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("evaluation", "0045_alter_referenceitemmodel_type"),
]
operations = [
migrations.RemoveField(
model_name="mechanicautoevaluationmodel",
name="car_type",
),
migrations.RemoveField(
model_name="mechanicautoevaluationmodel",
name="tex_passport_file",
),
migrations.AddField(
model_name="mechanicautoevaluationmodel",
name="distance_covered",
field=models.PositiveIntegerField(blank=True, null=True, verbose_name="distance covered"),
),
migrations.AddField(
model_name="mechanicautoevaluationmodel",
name="object_owner_residence",
field=models.CharField(blank=True, max_length=255, null=True, verbose_name="object owner residence"),
),
migrations.AddField(
model_name="mechanicautoevaluationmodel",
name="car_position",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="evaluation_mechanic_auto_car_position",
to="evaluation.referenceitemmodel",
verbose_name="car position",
),
),
migrations.AddField(
model_name="mechanicautoevaluationmodel",
name="body_type",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="evaluation_mechanic_auto_body_type",
to="evaluation.referenceitemmodel",
verbose_name="body type",
),
),
migrations.AddField(
model_name="mechanicautoevaluationmodel",
name="fuel_type",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="evaluation_mechanic_auto_fuel_type",
to="evaluation.referenceitemmodel",
verbose_name="fuel type",
),
),
migrations.AddField(
model_name="mechanicautoevaluationmodel",
name="state_car",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="evaluation_mechanic_auto_state_car",
to="evaluation.referenceitemmodel",
verbose_name="state car",
),
),
migrations.AddField(
model_name="mechanicautoevaluationmodel",
name="assessment_task_type",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="evaluation_mechanic_auto_assessment_task_type",
to="evaluation.referenceitemmodel",
verbose_name="assessment task type",
),
),
migrations.CreateModel(
name="MechanicAutoEvaluationTexPassportFile",
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)),
(
"file",
models.FileField(
upload_to="mechanic_evaluation/tech_passports/%Y/%m/",
verbose_name="tech passport file",
),
),
(
"mechanic_auto_evaluation",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="tex_passport_files",
to="evaluation.mechanicautoevaluationmodel",
),
),
],
options={
"verbose_name": "Mechanic Auto Evaluation Tex Passport File",
"verbose_name_plural": "Mechanic Auto Evaluation Tex Passport Files",
"db_table": "MechanicAutoEvaluationTexPassportFile",
},
),
]