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

Настройка доп. услуг

№ | Название | Назначение |
---|---|---|
1 | Имя | Название доп. услуги. Будет отображаться в отчётах |
2 | Цена | Сумма, которая будет начисляться/снимать с абонента (единоразовое списание) |
3 | Период | Как часто будет активироваться услуга |
4 | Вид фактической услуги | Направление движения средств: +/- |
5 | Условие срабатывания | Можно выбрать условие, при выполнении которого будет выполнятся доп. услуга над абонентом |
6 | Группы абонентов | Те группы абонентов, на которых распространяется услуга |
7 | Описание | Внутреннее описание доп. услуги для ориентации среди них |
8 | Приостановлена | Можно на время приостановить доп. услугу без её удаления и открепления её от тарифов |
9 | Таблица тарифов | Можно выбрать тарифы, к которым будет прикреплена доп. услуга (абоненты) |
10 | Фильтр тарифов | Можно быстро найти необходимый тариф |
Также можно со стороны настроек тарифа привязать доп. услуги:

Консольные команды
Период
- Месячный (первого числа) - доп. услуга отрабатывает один раз в месяц - первого числа (на самом деле зависит от того, когда запускается скрипт по крону)
- Суточный - доп. услуга начисляет/списывает средства с абонента при каждом запуске (рекомендуется вызывать по крону каждый день)
Вид услуги
- Абон. плата - снимает средства с депозита абонента
- Акция/подарок - начисляет средства на депозит абонента
Условие срабатывания
- Безусловное (всегда) - срабатывает каждый раз
- Положительный баланс и интернет включен - срабатывает только на пользователях, у которых: положительный баланс и включен интернет
- Отрицательный баланс или интернет выключен - срабатывает только на пользователях, у которых: отрицательный баланс (депозит + лимит < 0) или отключен интернет
Настраиваемые условия
В ближайшее время будут доступны настраиваемые условия, т.е. Вы сами сможете задать критерии, по которым абонентам начислять/списывать сумму на депозит. Будут они построены на основе SQL-запросов, будут их примеры. Также думаем, что пользователи будут делиться своими запросами, дабы помочь сообществу.
Тема на форуме:
Фильтр тарифов
Если указать 'true' (без кавычек), то отобразятся только те тарифы, которые прикреплены к этой услуге (и те, у которые в названии содержат 'true').
Если указать 'false' (без кавычек), то отобразятся только те тарифы, которые не прикреплены к этой услуге (и те, у которые в названии содержат 'false').
Отчёты
С версии 2.7.19 появилась возможность активировать логирование пополнений/списаний с абонентов а таблицу платежей (помимо таблиц услуг и дополнительных услуг). При занесении в таблицу платежей записи делятся на 2 типа:
- Дополнительные услуги - пополнение абонента
- Дополнительные услуги - списание с абонента
В поле "комментарий" попадает название доп. услуги из справочника. Пример:

Настройка в системных опциях (услуги → "дополнительные услуги"):

Отчёт во вкладке услуги в админ. панели:
Примеры использования
аренда порта
Арена порта: всем активным абонентам (обычный, замороженный) тарифа "Тестовый", у которых на счету (депозит с учётом лимита) меньше нуля или заблокирован интернет - списываем каждый день "аренду порта".

Настраиваемые условия
В "настраиваемых условиях" текст кода нужно писать с учётом того, что мы находимся в одной из 4-х таблиц или во всех по очереди, в зависимости от выбранной группы пользователей:
users, usersfreeze, usersblok, usersdel
Условие нужно начинать с 'AND', т.к. до этого идут системные условия.
Попробовать составить и проверить условие можно в удобном Вам редакторе (phpMyAdmin, dbForge, adminer):
- Берём тестового пользователя (например, uid = 1)
- Наделяем его необходимыми свойствами (день рождение в текущем месяце)
- Создаём SQL запрос и получаем этого пользователя (
SELECT uid, MONTH(date_birth) FROM users WHERE MONTH(date_birth) = MONTH(NOW())
)
Таким образом можно связать всевозможными способами несколько таблиц с таблицей пользователей.
Подарок в месяц, когда день рождения абонента
Видно, что нужно использовать следующие параметры:
- ежемесячная услуга
- подарок
- "настраиваемое условие"
- состояния: обычный, заморожен
- собственное SQL-условие
Условие в услуге (SQL):
AND MONTH(`date_birth`) = MONTH(NOW())
