Домен: Справочник услуг¶
Комплексные и обычные услуги, используемые при создании заказ-нарядов.
—
Схема связей¶
service_complex_work_tree ← дерево категорий (напр. «Кат.01 Седан»)
│
└── service_complex_work_item ← группа работ внутри категории
│
└── service_complex_work ← конкретная работа (name, price, time_value)
service_common_work_tree ← дерево каталога услуг
│
└── service_common_work ← услуга в каталоге (bar_code, price)
—
ORM-модели¶
ServiceComplexWorkTree¶
Таблица service_complex_work_tree — корневые категории комплексных работ.
Каждой категории RocketWash соответствует свой service_complex_work_tree_id.
|
Категория |
|---|---|
11 |
Кат.01 — Седан / хетчбэк |
15 |
Кат.02 — Внедорожник / кроссовер |
16 |
Кат.03 — Микроавтобус |
17 |
Кат.04 — Крупный внедорожник / минивэн |
from autodealer.domain.service_complex_work_tree import ServiceComplexWorkTree
trees = ServiceComplexWorkTree.objects.all()
ServiceComplexWorkItem¶
Таблица service_complex_work_item — группа работ внутри дерева.
Поле |
Тип |
Описание |
|---|---|---|
|
|
Первичный ключ |
|
|
Дерево / категория |
|
|
Название группы |
ServiceComplexWork¶
Таблица service_complex_work — конкретная работа в комплексе.
Строки этой таблицы передаются в create_service_order как ServiceOrderItem.
Поле |
Тип |
Описание |
|---|---|---|
|
|
Первичный ключ |
|
|
Группа работ |
|
|
Название (макс. 255 символов) |
|
|
Цена за единицу |
|
|
Длительность в минутах |
|
|
Количество (по умолчанию 1) |
|
|
Порядок отображения |
|
|
Внешний ID |
from autodealer.domain.service_complex_work import ServiceComplexWork
from autodealer.domain.service_complex_work_item import ServiceComplexWorkItem
# Все работы категории Кат.01
item_ids = [
i.service_complex_work_item_id
for i in ServiceComplexWorkItem.objects.filter(service_complex_work_tree_id=11).all()
]
works = ServiceComplexWork.objects.filter(service_complex_work_item_id__in=item_ids).all()
ServiceCommonWork¶
Таблица service_common_work — общий каталог услуг (не привязан к категориям авто).
Используется функцией get_or_create_service.
Поле |
Тип |
Описание |
|---|---|---|
|
|
Первичный ключ |
|
|
Папка каталога |
|
|
Название |
|
|
Цена |
|
|
Длительность в минутах |
|
|
Уникальный ключ (напр. |
—
Высокоуровневые функции (services)¶
iter_complex_works_by_tree¶
- autodealer.services.iter_complex_works_by_tree(tree_id)¶
Генератор всех работ из дерева
service_complex_work_tree. Не загружает все записи в память сразу.- Параметры:
tree_id (int) –
service_complex_work_tree_id.- Yields:
Экземпляры
ServiceComplexWork.
from autodealer.services import iter_complex_works_by_tree for work in iter_complex_works_by_tree(11): # Кат.01 print(work.name, work.price, work.time_value)
get_or_create_service¶
- autodealer.services.get_or_create_service(name, price=None, time_value=None, bar_code=None, tree_id=None)¶
Найти услугу в
service_common_workпоbar_codeили создать новую. Идемпотентно: повторный вызов с тем жеbar_codeвернёт существующую запись.- Параметры:
name (str) – Название услуги.
price (float) – Цена по умолчанию.
time_value (float) – Длительность в минутах.
bar_code (str) – Уникальный ключ (напр.
"rw:821460").tree_id (int) – FK →
service_common_work_tree.
- Результат:
service_common_work_id.- Тип результата:
int
from autodealer.services import get_or_create_service svc_id = get_or_create_service( "Комплекс", price=2300.0, time_value=90, bar_code="rw:821460", )