Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

Table of Contents

Children Display
alltrue
sorttitle

Возможности

  • Начисления абон. платы по следующим периодам: день, месяц, квартал, пол года, год

  • Снятие денег с дополнительного счёта при использовании параметра $conf{EXT_BILL_ACCOUNT}

  • Возможность производить снятия как по фиксированным периодам: начало месяца, начало квартала, начало года, так и по произвольным через месяц после последнего снятия, через квартал, через полгода, через год

  • Добавление комментариев при назначении периодических платежей пользователям. Комментарии отображаются при снятии денег по периодическим платежам.

  • Отображение даты следующего периодического платежа

  • Индивидуальная скидка для каждой услуги

  • Выполнение внешних программ для объявленных услуг.

Widget Connector
urlhttps://www.youtube.com/watch?v=BPWsj8iEawE

Установка

Настройка работы с базой данных и создание таблиц:

Code Block
languagesql
mysql --default-character-set=utf8  -D abills < db/Abon.sql
cp Abon.pm  /usr/abills/Abills/mysql

Подключение модуля. abills/libexec/config.pl

Code Block
languagebash
@MODULES = (
          'Abon'
          );

Работа с системой

  • Создание тарифных планов
  • Включение периодических услуг у абонента

  • Шаблон формирования описания начислений



    Снятие абон. платы в ручном режиме

    Для снятия с абонентов абон. платы за определённое число нужно запустить дневной периодик с датой планируемого снятия.

    Code Block
    languagebash
    /usr/abills/libexec/periodic daily MODULES=Abon  DATE=xxxx-xx-xx


    Плагины

    internet_static_ip.pl

    Для выдачи статических ip IP можно использовать /usr/abills/Abills/modules/Abon/internet_static_ip.pl


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

    При отключении начислений система убирает абоненту присвоенный IP  адрес.


    Для этого в поле тарифном плане в поле  "Внешняя обработка" нужно прописать следующее

    Code Block
    languagebash
    /usr/abills/Abills/modules/Abon/internet_static_ip.pl POOL_ID=%ID%

    Вместо %ID% нужно подставить id ID пула из которого будут браться свободные адреса


    Если добавить опцию FORCE_IP_ASSIGN=1, то система проверит входит ли поточный IP адрес абонента в рекомендуемый пул адресов (POOL_ID). Если в пуле адресов заполнено поле "Следующий пул" - то проверка по наличию IP адреса будет выполнена и в нем. Если IP адрес абонента не найден ни в одном пуле, то IP будет заменён на свободный IP адрес с рекомендуемого пула.

    Code Block
    languagebash
    /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
    ACTIONACTIVE or ALERT  включение отключение IP
    FORCE_IP_ASSIGN
    Присваивать IP абоненту даже если у него есть IP адрес, но не соответствует пулу
    SKIP_ALERT
    Не выполнять снятие IP
    DEBUGОтладка

    internet_filter.pl

    Для выдачи статических ip можно использовать определенных фильтров,  например блокировка определённых ресурсов, использовать  внешнюю команду /usr/abills/Abills/modules/Abon/internet_filter.pl

    Для этого в тарифном плане в поле поле "Внешняя обработка" нужно прописать следующее

    Code Block
    languagebash
    /usr/abills/Abills/modules/Abon/internet_filter.pl FILTER_ID=%ID%

    Вместо %ID% нужно подставить id пула из которого будут браться  фильтрыфильтра

    Тревожные пометки абонента

    Если на момент снятия у абонента не было средств для активации услуги, услуга приостанавливается (тревожные пометки абонента). Для активации услуги необходимо перезавести ее в ручном режиме.

    АбонентОпис ошибки
    test_android

    Абонент временно не оплатил услугу

    для активации сервиса


    Также в карточке абонента система предупреждает что есть не продленные сервисы


    Image Added

    Внешний обработчик

    Внешний обработчик запускает внешние программы обработки при изменении учетной записи абонента через веб-интерфейс.

    В качестве аргументов передаются параметры сервиса абонента: 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';
    Code Block
    languageperl
    title/usr/abills/Abills/modules/Abon/abon_activate.pl
    collapsetrue
    #!/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;