Модуль снятия дневных, месячных и годовых абон. плат за используемые сервисы или услуги.
Начисления абон. платы по следующим периодам: день, месяц, квартал, пол года, год
Снятие денег с дополнительного счёта при использовании параметра $conf{EXT_BILL_ACCOUNT}
Возможность производить снятия как по фиксированным периодам: начало месяца, начало квартала, начало года, так и по произвольным через месяц после последнего снятия, через квартал, через полгода, через год
Добавление комментариев при назначении периодических платежей пользователям. Комментарии отображаются при снятии денег по периодическим платежам.
Отображение даты следующего периодического платежа
Индивидуальная скидка для каждой услуги
Выполнение внешних программ для объявленных услуг.
Настройка работы с базой данных и создание таблиц:
mysql --default-character-set=utf8 -D abills < db/Abon.sql cp Abon.pm /usr/abills/Abills/mysql |
Подключение модуля. abills/libexec/config.pl
@MODULES = ( 'Abon' ); |
Для снятия с абонентов абон. платы за определённое число нужно запустить дневной периодик с датой планируемого снятия.
/usr/abills/libexec/periodic daily MODULES=Abon DATE=xxxx-xx-xx |
internet_static_ip.pl
Для выдачи статических IP можно использовать /usr/abills/Abills/modules/Abon/internet_static_ip.pl
При активации начислений программа проверяет нет ли у абонента уже присвоенного IP адреса и если поле не заполнено выдает следующий свободный IP из пула.
При отключении начислений система убирает абоненту присвоенный IP адрес.
Для этого в тарифном плане в поле "Внешняя обработка" нужно прописать следующее
/usr/abills/Abills/modules/Abon/internet_static_ip.pl POOL_ID=%ID% |
Вместо %ID% нужно подставить ID пула из которого будут браться свободные адреса
Если добавить опцию FORCE_IP_ASSIGN=1, то система проверит входит ли поточный IP адрес абонента в рекомендуемый пул адресов (POOL_ID). Если в пуле адресов заполнено поле "Следующий пул" - то проверка по наличию IP адреса будет выполнена и в нем. Если IP адрес абонента не найден ни в одном пуле, то IP будет заменён на свободный IP адрес с рекомендуемого пула.
/usr/abills/Abills/modules/Abon/internet_static_ip.pl POOL_ID=%ID% UID=%UID% ACTION=ACTIVE FORCE_IP_ASSIGN=1 |
Опции
POOL_ID | Пул из которого брать IP |
UID | UID |
ACTION | ACTIVE or ALERT включение отключение IP |
FORCE_IP_ASSIGN | Присваивать IP абоненту даже если у него есть IP адрес, но не соответствует пулу |
SKIP_ALERT | Не выполнять снятие IP |
DEBUG | Отладка |
internet_filter.pl
Для выдачи определенных фильтров, например блокировка определённых ресурсов, использовать внешнюю команду /usr/abills/Abills/modules/Abon/internet_filter.pl
Для этого в тарифном плане в поле "Внешняя обработка" нужно прописать следующее
/usr/abills/Abills/modules/Abon/internet_filter.pl FILTER_ID=%ID% |
Вместо %ID% нужно подставить id фильтра
Если на момент снятия у абонента не было средств для активации услуги, услуга приостанавливается (тревожные пометки абонента). Для активации услуги необходимо перезавести ее в ручном режиме.
Абонент | Опис ошибки |
---|---|
test_android | Абонент временно не оплатил услугу для активации сервиса |
Также в карточке абонента система предупреждает что есть не продленные сервисы
Внешний обработчик запускает внешние программы обработки при изменении учетной записи абонента через веб-интерфейс.
В качестве аргументов передаются параметры сервиса абонента: UID, TP_ID, LOGIN, DEPOSIT, CREDIT.
Пример внешней программы для добавления ТП Abon:
При подключении тарифного плана "Интернет" с TP_ID=196 активировать ТП "Abon" с ID=14 (например, Статический IP)
$conf{INTERNET_EXTERNAL_CMD} = '/usr/abills/Abills/modules/Abon/abon_activate.pl';
#!/usr/bin/perl =head NAME abon_activate.pl =cut no if $] >= 5.017011, warnings => 'experimental::smartmatch'; use strict; our $libpath; BEGIN { use FindBin '$Bin'; our $Bin; use FindBin '$Bin'; $libpath = $Bin . '/../'; if ($Bin =~ m/\/abills(\/)/) { $libpath = substr($Bin, 0, $-[1]); } unshift(@INC, $libpath, $libpath . '/Abills/', $libpath . '/Abills/mysql/', $libpath . '/Abills/Control/', $libpath . '/Abills/modules/', $libpath . '/lib/' ); } do 'libexec/config.pl'; our (%conf); use Abills::SQL; use Abills::Base qw/parse_arguments/; use Admins; my $argv = parse_arguments(\@ARGV); my $debug = $argv->{DEBUG} || 0; our $db = Abills::SQL->connect(@conf{qw/dbtype dbhost dbname dbuser dbpasswd/}, { CHARSET => $conf{dbcharset} }); my $Admin = Admins->new($db, \%conf); $Admin->info($conf{SYSTEM_ADMIN_ID}, { IP => '127.0.0.3', SHORT => 1 }); abon_activate(); #********************************************************** =head2 abon_activate() =cut #********************************************************** sub abon_activate { return 0 if !$argv->{UID} || !$argv->{add} || !$argv->{TP_ID} || $argv->{TP_ID} ne '196'; require Abon::Services; Abon::Services->import(); my $Abon_services = Abon::Services->new($db, $Admin, \%conf); my $result = $Abon_services->abon_user_tariff_activate({ UID => $argv->{UID}, ID => 14, #Tariff ID }); if ($result->{errno}) { print $result->{errno} . ($result->{errstr} ? ":$result->{errstr}" : ''); return 0; } my $messages = $result->{MESSAGES} && ref $result->{MESSAGES} eq 'ARRAY' ? join("\n", @{$result->{MESSAGES}}) : ''; print "1:$messages"; return 1; } 1; |