Услуги

Услуга в системе описывает набор действий и ингридиентов, которые продаются клиенту. На основе услуги в заказ добавляется продажа, которая связывает услугу с ценой и, при необходимости, сотрудником.

Для логической группировки услуги имеют в своем составе опции. Их использование имеет смысл в том случае, когда есть варианты одного действия, отличающиеся ценой, количеством ингридиентов, временем или другими признаками.

Пример смыслового разделения опций в услуге

Кофе:

  • Американо

    1. 50 мл

    2. 100 мл

    3. 200 мл

  • Раф-кофе

    1. 200 мл

    2. 300 мл

    3. 500 мл

Парикмахерские услуги:

  • Женская модельная стрижка

    1. Короткие волосы

    2. Средние волосы

    3. Длинные волосы

  • Мужская модельная стрижка

    1. Лысый череп

    2. Короткие волосы

    3. Средние волосы

и т.п.

Структура услуги

Ключ

Тип

Описание

id

ObjectId

ID услуги

name

str

Название услуги

desc

str

Описание услуги

category

str

Категория услуги

options

List[Option]

Список опций услуги

Структура опции услуги

Ключ

Тип

Описание

unit_name

str

Единица измерения опции

uuid

UUID

Идентификатор опции услуги

attributes

Dict[str, str]

Атрибуты опции

desc

str

Описание опции

duration

int

Длительность опции, используется по-умолчанию при оформлении записи с бронированием времени

Список услуг

Для просмотра списка доступных услуг используется API GET /api/prototype.

В GET-параметрах запроса допустимо использование следующих фильтров:

Ключ

Тип

Описание

ids

List[ObjectId]

Список ID услуг, необходимых для получения

query

str

Строковый поиск услуги по названию и описанию

categories

List[str]

Список категорий искомых услуг

API использует стандартную схему пагинации.

Пример запроса списка услуг

curl -X GET \
    https://demo.idealist.one/api/prototype \
    -H 'Authorization: Bearer persistent 2adbd5dc-38c4-4963-8930-6d75827ff0fe'

Создание услуги

Для создания услуги используется API POST /api/prototype.

Минимальными требованиями для создания услуги является передача имени услуги (name) и списка из одной опции. Для опции единственным требуемым полем является unit_name, все остальные поля опциональны и заполняются null либо 0 при отсутствии.

Пример минимально необходимых данных для создания услуги

curl -X POST \
    https://demo.idealist.one/api/prototype \
    -H 'Authorization: Bearer persistent 2adbd5dc-38c4-4963-8930-6d75827ff0fe' \
    -d '{
            "name": "test",
            "options": [
                {
                    "unit_name": "шт"
                }
            ]
        }'

Пример создания услуги с заполнением полей

curl -X POST \
    https://demo.idealist.one/api/prototype \
    -H 'Authorization: Bearer persistent 2adbd5dc-38c4-4963-8930-6d75827ff0fe' \
    -d '{
            "name": "Бургер",
            "desc": "Сочный бургер",
            "options": [
                {
                    "unit_name": "шт",
                    "attributes": {"Бургер": "С котлетой"}
                }
            ]
    }'

Поле uuid опции должно быть уникальным в пределах одной услуги.

В случае, если uuid опции не был передан при создании, система автоматически сгенерирует его сама.

Редактирование услуги

Для редактирования услуги используется API PUT /api/prototype/<prototype_id>.

При редактировании все поля услуги перезаписываются, что необходимо учесть при работе с опциями - uuid опции дублируется в заказ для группировки по опциям в различных отчетах. Удаление опции с определенным uuid не критично для работы системы, но выполнения продажи с передачей неизвестной опции и без указания цены вызовет ошибку.

Так же не рекомендуется перезаписывать одни услуги другими, качественно новыми. Несмотря на то, что имя услуги на момент выполнения продажи копируется в неё, это негативно влияет на формирование отчетов и подсчет периодичности визитов клиента при замене категории.

Пример запроса редактирования услуги

curl -X PUT \
    https://demo.idealist.one/api/prototype/5c9370a2b96d4a5b11b93ec1 \
    -H 'Authorization: Bearer persistent 2adbd5dc-38c4-4963-8930-6d75827ff0fe' \
    -d '{
            "name": "Бургер",
            "desc": "Сочный бургер",
            "options": [
                {
                    "uuid": "cf3daba5-6105-4b27-8f92-8cbf922dff43",
                    "unit_name": "шт",
                    "attributes": {"Бургер": "С котлетой"},
                    "desc": "Редактируем старую опцию"
                },
                {
                    "unit_name": "шт",
                    "desc": "Создаём новую опцию"
                }
            ]
        }'