Skip to main content
Полный перечень полей — в глоссарии.

Обзор

Этот раздел описывает, как в системе хранятся и обслуживаются тарифы — правила ценообразования для инвентаря. Одна и та же запись тарифа обслуживает три разных объекта: отдельную единицу инвентаря, продукт и позицию внутри комплекта. От того, какая связь у тарифа заполнена, зависит, к чему он относится и по каким правилам его можно менять.
Сама арифметика стоимости — как тариф превращается в цену строки аренды, что такое интервал тарификации, округление вверх, «заморозка» тарифа в момент оформления — уже полностью описана отдельно. Здесь мы не повторяем формулы, а объясняем устройство самих записей тарифов, их менеджер, адреса и массовые операции для комплектов. Подробнее про расчёт стоимости: «Пересчёт сумм и цен».

Модель данных

Тариф — это цена за один тарифицируемый период (час, сутки и т. п.) с необязательным ограничением по дням недели и времени суток. Все тарифы инвентаря хранятся в единой таблице, а различаются тем, какая из трёх связей объекта тарификации заполнена.

Три роли одной записи

  • Тариф единицы — заполнена связь с единицей инвентаря. Это индивидуальная цена конкретного экземпляра оборудования.
  • Тариф продукта — заполнена связь с продуктом. Такая цена действует для всех единиц продукта, у которых нет собственного тарифа.
  • Тариф позиции комплекта — заполнены связи с позицией комплекта и с вариантом цены комплекта. Из суммы таких тарифов складывается итоговая цена варианта цены комплекта (см. ниже).
Название тарифа позиции комплекта формируется автоматически по шаблону «Название комплекта | Название варианта цены». Период времени такого тарифа тоже берётся автоматически — из выбранного варианта цены комплекта, а не задаётся вручную.

Менеджер тарифов: скрытие отключённых периодов

Стандартный доступ к тарифам идёт через менеджер, который автоматически прячет тарифы с отключённым периодом времени. В выборку попадают только тарифы без периода вообще либо тарифы, чей период не отключён. Это значит: если временной период выводят из оборота, все привязанные к нему тарифы разом исчезают из списков и расчётов, хотя сами записи остаются в базе.

Сортировка по умолчанию

Тарифы отсортированы так: сначала тарифы без продукта (тарифы единиц идут первыми), затем по полю порядка, затем от новых к старым по дате создания.

Тарифы единиц и продуктов

Список и создание тарифов единицы

Для конкретной единицы инвентаря есть адрес, который отдаёт её тарифы и позволяет создавать новые. Список не постраничный — возвращаются все подходящие записи сразу. Что именно попадает в список, регулируется параметром type:
Варианты «продукт» и «комплект» строят свой особый запрос только если у единицы есть продукт. Если продукта у единицы нет, особый фильтр не применяется, и адрес возвращает собственные тарифы самой единицы (тарифы продукта при этом не подмешиваются, поскольку продукта нет) — то есть на пустой список рассчитывать нельзя. Полностью пустой список возвращается лишь в одном случае — если единицы с указанным идентификатором вообще не существует.
При создании тарифа через этот адрес связь с единицей проставляется автоматически из адреса запроса — вручную её указывать не нужно и нельзя. Поля-идентификаторы комплекта и продукта доступны только для чтения.

Создание тарифов продукта

Тарифы продукта создаются через отдельный адрес продукта. Связь с продуктом проставляется автоматически из адреса запроса.

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

Изменение и удаление одиночного тарифа доступны через адрес детали. Здесь действует ключевое ограничение:
Тариф, привязанный к позиции комплекта, нельзя изменить или удалить через обычный адрес тарифа. И при попытке обновления, и при попытке удаления система возвращает ошибку. Такие тарифы меняются только через массовые операции комплекта (см. ниже), потому что при любом изменении нужно пересчитать итоговую цену вариантов цены комплекта.

Тарифы и цены комплектов

Комплект — это набор позиций, каждая со своим количеством. У комплекта есть один или несколько вариантов цены (например, «за час», «за сутки»), и итоговая цена каждого варианта не задаётся руками, а вычисляется как сумма тарифов позиций.

Формула итоговой цены варианта

Итоговая цена варианта цены комплекта равна сумме по всем его тарифам произведения: цена тарифа × количество соответствующей позиции комплекта. Если у варианта нет ни одного тарифа, его итоговая цена считается равной нулю. Именно поэтому формат варианта цены комплекта при создании и записи не принимает поле итоговой цены — оно всегда пересчитывается системой при массовых операциях с тарифами. Через этот формат задаются только название варианта, его временной период и порядок сортировки; связь с комплектом проставляется автоматически из адреса запроса.

Массовое создание тарифов комплекта

Массовое создание принимает список строк, в каждой из которых указываются: цена, позиция комплекта и вариант цены комплекта. Для каждой строки система:
  1. Формирует название по шаблону «Название комплекта | Название варианта цены».
  2. Берёт период времени из выбранного варианта цены.
  3. Создаёт тариф позиции комплекта с указанной ценой.
Все тарифы создаются одной пакетной вставкой. После вставки система пересчитывает итоговую цену всех вариантов цены этого комплекта по формуле выше и сохраняет её пакетным обновлением.
Массовое создание выполняется в единой транзакции: если что-то пойдёт не так на любом шаге (вставка тарифов или пересчёт цен), изменения не сохранятся частично — откатывается всё целиком.

Массовое обновление тарифов комплекта

Массовое обновление устроено похоже, но каждая строка дополнительно содержит идентификатор изменяемого тарифа. Система пакетно обновляет у указанных тарифов цену, название и период времени, после чего так же пересчитывает и сохраняет итоговые цены вариантов цены комплекта.
При массовом обновлении фактически меняются только цена, название и период времени тарифа. Даже если в строке переданы другие значения позиции комплекта или варианта цены, привязки тарифа к позиции и к варианту цены не изменятся — они не входят в набор обновляемых полей. Кроме того, в отличие от массового создания, массовое обновление не обёрнуто в единую транзакцию: обновление тарифов и пересчёт итоговых цен выполняются отдельными шагами.

Как это используется

  • Прайс на единицу и на продукт. Оператор задаёт тарифы продукта (общая цена для всех его единиц) и при необходимости индивидуальные тарифы отдельных единиц. При расчёте стоимости аренды система выбирает подходящий тариф с учётом периода, дней недели и времени суток — по правилам, описанным в разделе про расчёт стоимости.
  • Прайс на комплект. Оператор настраивает варианты цены комплекта (например, разные периоды), затем массово заводит или правит тарифы позиций. Итоговая цена каждого варианта пересчитывается автоматически из тарифов позиций и их количеств — руками её не редактируют.
  • Вывод периода из оборота. Если временной период отключают, тарифы, привязанные к нему, автоматически исчезают из выборок и расчётов, оставаясь в базе для истории.
Про дополнительные услуги и их тарифы, а также про полную арифметику стоимости строки аренды — см. соседние разделы модуля и страницу «Пересчёт сумм и цен».

Особенности поведения

  • При массовом обновлении тарифов комплекта фактически применяются только цена, название и период времени; переданные в строке позиция комплекта и вариант цены игнорируются, так как не входят в набор обновляемых полей.
  • Массовое создание тарифов комплекта выполняется в единой транзакции, а массовое обновление — нет; при сбое на этапе пересчёта итоговых цен обновление тарифов уже окажется сохранённым.
  • Итоговая цена варианта цены комплекта нигде не задаётся вручную — она всегда пересчитывается как сумма цен тарифов позиций, умноженных на количество позиций.
  • В списке тарифов единицы особые фильтры по продукту и по комплекту строят свой запрос только при наличии у единицы продукта; если продукта нет, фильтр не применяется и возвращаются собственные тарифы самой единицы (а не пустой список), тогда как полностью пустой ответ отдаётся лишь при отсутствии самой единицы. Сам список не постраничный.
  • Название и период времени тарифа позиции комплекта формируются автоматически (имя по шаблону «Комплект | Вариант цены», период — из варианта цены), а не задаются вручную.

Связанные страницы

Глоссарий: Тарифы и цены

Полный перечень полей и терминов, используемых в тарифах инвентаря.

Инвентарь и услуги (CRM)

Обзорная страница модуля инвентаря и услуг со ссылками на все разделы.

Инвентарь (единицы)

Отдельные единицы оборудования: статусы, состояние, пробег, страховка, импорт и массовые операции.

Продукт

Учёт однотипного инвентаря по количеству с общим состоянием и тарифами продукта.

Комплекты (наборы)

Наборы инвентаря, сдаваемые как единое целое: состав, позиции и цены комплекта.

Доступность и расписание

Расписание занятости инвентаря и расчёт доступности с учётом заказов и задач мастерской.

Субаренда

Периоды субаренды единиц с процентом владельца — источник истории для распределения выручки.

Услуги (сервисы)

Дополнительные платные услуги и их тарифы, публикуемые в каталоге и добавляемые к заказам.

Обслуживание и ремонт

Плановое и разовое техобслуживание инвентаря по интервалу или пробегу, с уведомлениями.

Инвентаризация

Проверки состояния инвентаря при выдаче и приёмке заказов, обновляющие статус единицы.