Закрытый период

В меню настройки сервера (пункт меню Сервис=>Настройка=>Конфигурация) также существует возможность указания закрытого периода для сущностей ядра и модулей системы. Проверка закрытого периода работает только при установленной опции конфигурации сервера биллинга closed.date.enabled=1. Также имеется возможность выборочного отключения проверки закрытого периода. Флаги отключения см. конфигурация ядра, и в описании конфигурации модулей.

images/download/attachments/43384881/closed_period.gif

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

  • если и левая, и правая границы периода сущности лежат левее закрытой даты, то невозможно любое изменение этих сущностей;

  • если левая граница периода сущности лежит в закрытом периода, а правая нет (либо не существует, либо лежит правее закрытой даты), то возможно изменение параметров данной сущности, за исключением изменения левой границы ее периода (т.к. она лежит в закрытом периоде) и установки правой границы внутри закрытого периода;

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

Для сущностей с одной датой (например, приход) логика работы проверки на закрытый период для изменения следующая:

  • если дата сущности лежит внутри закрытого периода, то невозможно любое изменение этой сущности;

  • если дата сущности лежит вне закрытого периода, то возможно любое изменение этой сущности, за исключением установки ее даты внутри закрытого периода.

Логика проверки на закрытый период для удаления сущностей едина для обоих типов (для сущностей с двумя датами в проверке участвует только левая граница ее периода, т.к. для проверки на пересечение этого достаточно):

  • если дата сущности лежит внутри закрытого периода, то удаление ее невозможно;

  • если дата сущности лежит вне закрытого периода, то ее удаление возможно.

По умолчанию в системе присутствует только один закрытый период "Основной". При необходимости, возможно определение в конфигурации сервера биллинга дополнительных периодов следующим образом:

closed.date.types=<id1>:<title1>;<id2>:<title2>..

Где:

  • <idN> - уникальный код периода, целое число больше 1;

  • <titleN> - название периода.

Например:

closed.date.types=2:Период для платежей;3:Период для расходов

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

closed.date.type.<key>=<typeId>

Где:

  • <key> - ключ проверки, тот же, что используется для её отключения;

  • <typeId> - код периода.

Например, привязка проверки периодов при правке платежей и расходов к периоду с кодом 2:

closed.date.type.ActionUpdateContractPayment=2
closed.date.type.ActionDeleteContractPayment=2