Домен: Автомобили¶
Модели, марки, привязка авто к клиентам.
—
Схема связей¶
client.directory_registry_id
│
└── model_link.directory_registry_link_id ← «авто принадлежит клиенту»
│
└── model_link.model_detail_id ──► model_detail (VIN, regno, specs)
│
└── model.model_id ──► mark
—
ORM-модели¶
ModelLink¶
Таблица model_link — связь «клиент ↔ автомобиль».
Поле |
Тип |
Описание |
|---|---|---|
|
|
Первичный ключ; передаётся в |
|
|
|
|
|
Конкретный экземпляр автомобиля |
|
|
1=основное авто клиента |
|
|
0=активна |
ModelDetail¶
Таблица model_detail — конкретный экземпляр автомобиля (VIN, номера, характеристики).
Поле |
Тип |
Описание |
|---|---|---|
|
|
Первичный ключ |
|
|
Марка + модель |
|
|
Государственный номер |
|
|
VIN-номер |
|
|
Год выпуска |
|
|
Цвет кузова |
|
|
Тип двигателя |
|
|
Тип КПП |
|
|
Тип кузова |
|
|
Тип топлива |
|
|
Номер двигателя |
|
|
Номер шасси |
|
|
Номер кузова |
Model / Mark¶
Таблица model — модель автомобиля (напр. «Camry»).
Таблица mark — марка (напр. «Toyota»).
from autodealer.domain.mark import Mark
from autodealer.domain.model import Model
toyota = Mark.objects.filter(name__icontains="Toyota").first()
camry = Model.objects.filter(mark_id=toyota.mark_id, name="Camry").first()
Справочники типов¶
Таблицы car_body_type, car_engine_type, car_fuel_type,
car_gearbox_type, car_brake_type — классификаторы автомобиля.
from autodealer.domain.car_body_type import CarBodyType
types = CarBodyType.objects.all()
—
Высокоуровневые действия (actions.client)¶
get_client_vehicles¶
- autodealer.actions.client.get_client_vehicles(client_id)¶
Вернуть все автомобили клиента.
- Параметры:
client_id (int) – PK клиента.
- Результат:
list[ModelLink]— пустой если авто нет.
from autodealer.actions.client import get_client_vehicles cars = get_client_vehicles(920) for car in cars: print(car.model_link_id, car.model_detail_id, car.default_car) # Передать в create_service_order: doc_id = create_service_order(..., client_car=cars[0].model_link_id)
add_vehicle_to_client¶
- autodealer.actions.client.add_vehicle_to_client(client_id, make, model_name, *, regno=None, vin=None, year=None, color=None, default_car=False, created_by_user_id=1)¶
Добавить авто клиенту по имени марки/модели. Идемпотентно по
regno.- Результат:
model_detail_id.
from autodealer.actions.client import add_vehicle_to_client md_id = add_vehicle_to_client( client_id=42, make="Toyota", model_name="Camry", regno="А001ВС77", year=2020, color="Белый", default_car=True, )
create_vehicle_for_client¶
- autodealer.actions.client.create_vehicle_for_client(*, client_id, model_id, vin=None, regno=None, year_of_production=None, color_id=None, car_engine_type_id=None, car_gearbox_type_id=None, car_body_type_id=None, car_fuel_type_id=None, engine_number=None, chassis=None, body=None, notes=None, default_car=False, created_by_user_id=1)¶
Создать авто напрямую через
model_id(если марка/модель уже известны).- Результат:
Экземпляр
ModelLink.
Вспомогательные¶
- autodealer.actions.client.get_or_create_mark(name)¶
Найти или создать марку. Возвращает
mark_id.
- autodealer.actions.client.get_or_create_model(mark_id, model_name)¶
Найти или создать модель. Возвращает
model_id.
- autodealer.actions.client.get_or_create_color(name)¶
Найти или создать цвет. Возвращает
color_idилиNone.
- autodealer.actions.client.find_vehicle_by_regno(regno)¶
Поиск по госномеру. Возвращает
model_detail_idилиNone.
- autodealer.actions.client.find_vehicle_by_vin(vin)¶
Поиск по VIN. Возвращает
model_detail_idилиNone.