Обзор
Этот раздел описывает, как в системе хранятся и обслуживаются тарифы — правила ценообразования для инвентаря. Одна и та же запись тарифа обслуживает три разных объекта: отдельную единицу инвентаря, продукт и позицию внутри комплекта. От того, какая связь у тарифа заполнена, зависит, к чему он относится и по каким правилам его можно менять.Сама арифметика стоимости — как тариф превращается в цену строки аренды, что такое интервал тарификации, округление вверх, «заморозка» тарифа в момент оформления — уже полностью описана отдельно. Здесь мы не повторяем формулы, а объясняем устройство самих записей тарифов, их менеджер, адреса и массовые операции для комплектов. Подробнее про расчёт стоимости: «Пересчёт сумм и цен».
Модель данных
Тариф — это цена за один тарифицируемый период (час, сутки и т. п.) с необязательным ограничением по дням недели и времени суток. Все тарифы инвентаря хранятся в единой таблице, а различаются тем, какая из трёх связей объекта тарификации заполнена.Три роли одной записи
- Тариф единицы — заполнена связь с единицей инвентаря. Это индивидуальная цена конкретного экземпляра оборудования.
- Тариф продукта — заполнена связь с продуктом. Такая цена действует для всех единиц продукта, у которых нет собственного тарифа.
- Тариф позиции комплекта — заполнены связи с позицией комплекта и с вариантом цены комплекта. Из суммы таких тарифов складывается итоговая цена варианта цены комплекта (см. ниже).
Название тарифа позиции комплекта формируется автоматически по шаблону «Название комплекта | Название варианта цены». Период времени такого тарифа тоже берётся автоматически — из выбранного варианта цены комплекта, а не задаётся вручную.
Менеджер тарифов: скрытие отключённых периодов
Стандартный доступ к тарифам идёт через менеджер, который автоматически прячет тарифы с отключённым периодом времени. В выборку попадают только тарифы без периода вообще либо тарифы, чей период не отключён. Это значит: если временной период выводят из оборота, все привязанные к нему тарифы разом исчезают из списков и расчётов, хотя сами записи остаются в базе.Сортировка по умолчанию
Тарифы отсортированы так: сначала тарифы без продукта (тарифы единиц идут первыми), затем по полю порядка, затем от новых к старым по дате создания.Тарифы единиц и продуктов
Список и создание тарифов единицы
Для конкретной единицы инвентаря есть адрес, который отдаёт её тарифы и позволяет создавать новые. Список не постраничный — возвращаются все подходящие записи сразу. Что именно попадает в список, регулируется параметромtype:
При создании тарифа через этот адрес связь с единицей проставляется автоматически из адреса запроса — вручную её указывать не нужно и нельзя. Поля-идентификаторы комплекта и продукта доступны только для чтения.
Создание тарифов продукта
Тарифы продукта создаются через отдельный адрес продукта. Связь с продуктом проставляется автоматически из адреса запроса.Редактирование и удаление
Изменение и удаление одиночного тарифа доступны через адрес детали. Здесь действует ключевое ограничение:Тарифы и цены комплектов
Комплект — это набор позиций, каждая со своим количеством. У комплекта есть один или несколько вариантов цены (например, «за час», «за сутки»), и итоговая цена каждого варианта не задаётся руками, а вычисляется как сумма тарифов позиций.Формула итоговой цены варианта
Итоговая цена варианта цены комплекта равна сумме по всем его тарифам произведения: цена тарифа × количество соответствующей позиции комплекта. Если у варианта нет ни одного тарифа, его итоговая цена считается равной нулю. Именно поэтому формат варианта цены комплекта при создании и записи не принимает поле итоговой цены — оно всегда пересчитывается системой при массовых операциях с тарифами. Через этот формат задаются только название варианта, его временной период и порядок сортировки; связь с комплектом проставляется автоматически из адреса запроса.Массовое создание тарифов комплекта
Массовое создание принимает список строк, в каждой из которых указываются: цена, позиция комплекта и вариант цены комплекта. Для каждой строки система:- Формирует название по шаблону «Название комплекта | Название варианта цены».
- Берёт период времени из выбранного варианта цены.
- Создаёт тариф позиции комплекта с указанной ценой.
Массовое обновление тарифов комплекта
Массовое обновление устроено похоже, но каждая строка дополнительно содержит идентификатор изменяемого тарифа. Система пакетно обновляет у указанных тарифов цену, название и период времени, после чего так же пересчитывает и сохраняет итоговые цены вариантов цены комплекта.Как это используется
- Прайс на единицу и на продукт. Оператор задаёт тарифы продукта (общая цена для всех его единиц) и при необходимости индивидуальные тарифы отдельных единиц. При расчёте стоимости аренды система выбирает подходящий тариф с учётом периода, дней недели и времени суток — по правилам, описанным в разделе про расчёт стоимости.
- Прайс на комплект. Оператор настраивает варианты цены комплекта (например, разные периоды), затем массово заводит или правит тарифы позиций. Итоговая цена каждого варианта пересчитывается автоматически из тарифов позиций и их количеств — руками её не редактируют.
- Вывод периода из оборота. Если временной период отключают, тарифы, привязанные к нему, автоматически исчезают из выборок и расчётов, оставаясь в базе для истории.
Особенности поведения
- При массовом обновлении тарифов комплекта фактически применяются только цена, название и период времени; переданные в строке позиция комплекта и вариант цены игнорируются, так как не входят в набор обновляемых полей.
- Массовое создание тарифов комплекта выполняется в единой транзакции, а массовое обновление — нет; при сбое на этапе пересчёта итоговых цен обновление тарифов уже окажется сохранённым.
- Итоговая цена варианта цены комплекта нигде не задаётся вручную — она всегда пересчитывается как сумма цен тарифов позиций, умноженных на количество позиций.
- В списке тарифов единицы особые фильтры по продукту и по комплекту строят свой запрос только при наличии у единицы продукта; если продукта нет, фильтр не применяется и возвращаются собственные тарифы самой единицы (а не пустой список), тогда как полностью пустой ответ отдаётся лишь при отсутствии самой единицы. Сам список не постраничный.
- Название и период времени тарифа позиции комплекта формируются автоматически (имя по шаблону «Комплект | Вариант цены», период — из варианта цены), а не задаются вручную.
Связанные страницы
Глоссарий: Тарифы и цены
Полный перечень полей и терминов, используемых в тарифах инвентаря.
Инвентарь и услуги (CRM)
Обзорная страница модуля инвентаря и услуг со ссылками на все разделы.
Инвентарь (единицы)
Отдельные единицы оборудования: статусы, состояние, пробег, страховка, импорт и массовые операции.
Продукт
Учёт однотипного инвентаря по количеству с общим состоянием и тарифами продукта.
Комплекты (наборы)
Наборы инвентаря, сдаваемые как единое целое: состав, позиции и цены комплекта.
Доступность и расписание
Расписание занятости инвентаря и расчёт доступности с учётом заказов и задач мастерской.
Субаренда
Периоды субаренды единиц с процентом владельца — источник истории для распределения выручки.
Услуги (сервисы)
Дополнительные платные услуги и их тарифы, публикуемые в каталоге и добавляемые к заказам.
Обслуживание и ремонт
Плановое и разовое техобслуживание инвентаря по интервалу или пробегу, с уведомлениями.
Инвентаризация
Проверки состояния инвентаря при выдаче и приёмке заказов, обновляющие статус единицы.