Expressions

Turbid
Сообщения: 91
Зарегистрирован: Пт мар 21, 2008 10:54 am

Expressions

Сообщение Turbid »

http://abills.net.ua/wiki/doku.php?id=a ... ules:dv:ru

PARAMETER_TYPE (Костанты):
...
...
PRICE_IN - Цена за входящий трафик
PRICE_OUT - Цена за исходящий трафик

Примеры
...
...
Если суммарные трафик за учётный период больше 1000 мегабайт, то цена за 1 мб. 0.2 расчётных единицы
TRAFFIC_SUM>1000=PRICE:0.2;

Какой именно PRICE имеется в ввиду в примере (IN, OUT, SUM)?

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

опечаточка должен быть PRICE_IN / OUT

Turbid
Сообщения: 91
Зарегистрирован: Пт мар 21, 2008 10:54 am

Сообщение Turbid »

Что-то не получается заставить их работать :cry:

Требуется: считать входящий траффик по одной цене, если он превышает определнный объем, то пересчитать по другой цене. Делаю так:
В / Система/ Dialup / VPN/ Тарифные планы/ Интервалы/ задаю
Тарифы трафика (1 Mb) IN: x (первоначальная цена)

в Expressions
TRAFFIC_IN>n=PRICE_IN:y;
TRAFFIC_IN>m=PRICE_IN:z;

Но перейдя порог в n видно, что цена начисляется по прежнему по x. Это раз. И тутже еще один вопрос: нужно чтобы весь траффик пересчитывался по цене превышения. Я так понимаю что здесь будет считаться по новой цене только только уже новый траффик, а старый пересчитываться не будет? Как это организовать правильно?

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

Turbid писал(а): в Expressions
TRAFFIC_IN>n=PRICE_IN:y;
TRAFFIC_IN>m=PRICE_IN:z;

Но перейдя порог в n видно, что цена начисляется по прежнему по x.
Учитывается только последняя TRAFFIC_IN.

Turbid
Сообщения: 91
Зарегистрирован: Пт мар 21, 2008 10:54 am

Сообщение Turbid »

Учитывается только последняя TRAFFIC_IN.
Как-то это расходится с этим:
Система просматривает формулы с верху до низу и заканчивает просмотр на первом неверном выражении.
Как сделать чтобы если пользователь в месяц накачал, например, 300 метров - цена за метр 2 рубля, 600 - 1,5, 1000 - 1?

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

Как сделать чтобы если пользователь в месяц накачал, например, 300 метров - цена за метр 2 рубля, 600 - 1,5, 1000 - 1?
Наверное заплатить автору ;) Или самому.

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

Turbid писал(а): Как-то это расходится с этим:
Система просматривает формулы с верху до низу и заканчивает просмотр на первом неверном выражении.
Я просто в коде посмотрел, что во время разбора кода выражений результат записывается в хэш по ключу в левой части выражения, в вашем случае по ключу "TRAFFIC_IN". Таким образом запоминается только последнее выражение с участием TRAFFIC_IN.

Turbid
Сообщения: 91
Зарегистрирован: Пт мар 21, 2008 10:54 am

Сообщение Turbid »

chtito2 писал(а):
Как сделать чтобы если пользователь в месяц накачал, например, 300 метров - цена за метр 2 рубля, 600 - 1,5, 1000 - 1?
Наверное заплатить автору ;) Или самому.
Ув. ~AsmodeuS~, есть такой модуль или возможность его написать? Сколько будет это стоить?

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

Turbid писал(а):
Учитывается только последняя TRAFFIC_IN.
Как-то это расходится с этим:
Система просматривает формулы с верху до низу и заканчивает просмотр на первом неверном выражении.
Как сделать чтобы если пользователь в месяц накачал, например, 300 метров - цена за метр 2 рубля, 600 - 1,5, 1000 - 1?


Если пользователь за учётный период накачал: 300 метров - цена за 1 мб. 2 расчётных единицы; 600 - 1.5; больше 1000 - 1

TRAFFIC_SUM>300=PRICE:2;
TRAFFIC_SUM>600=PRICE:1.5;
TRAFFIC_SUM>1000=PRICE:1;

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

Ах да :) Глянул на код еще раз, там элемент хэша затирается только после сравнений :) Странно что ваша не работает.

Turbid
Сообщения: 91
Зарегистрирован: Пт мар 21, 2008 10:54 am

Сообщение Turbid »

Значит так: в тарифный план ставлю цену за входящий 3, и вот такое выражение:

Код: Выделить всё

TRAFFIC_IN>10=PRICE_IN:2; 
TRAFFIC_IN>20=PRICE_IN:1.5; 
TRAFFIC_IN>30=PRICE_IN:1;
Захожу в статистику IPN одного из пользователей, накачавших за этот месяц уже 128Mb. Выбираю вышеописанный тарифный план и нажимаю пересчитать. В результате пересчета с него считывается 386 рублей, а не 128 (т.к. > 30Mb).

Куда смотреть?

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

екпрешины работают пока только для ДВ

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

~AsmodeuS~ писал(а):екпрешины работают пока только для ДВ
Фак! :( Вот лажа то мощнейшая.... Спасибо Turbid что поднял эту тему пока мы не успели запустить Абиллс в производство, в доках то ни фига не написано. Придется срочно лепить самостоятельное решение для Ipn... В очередной раз огромное спасибо автору. Щас еще выяснится, что купленный модуль карточек тоже только для Dv...

Turbid
Сообщения: 91
Зарегистрирован: Пт мар 21, 2008 10:54 am

Сообщение Turbid »

chtito2 писал(а): Фак! :( Вот лажа то мощнейшая.... Спасибо Turbid что поднял эту тему пока мы не успели запустить Абиллс в производство, в доках то ни фига не написано. Придется срочно лепить самостоятельное решение для Ipn...
Временное решение вижу таким: например, для моего случая, можно завести 3 дополнительных тарифа и пересчитывать в зависимости от траффика по соответствующему. Надо подумать как автоматизировать еще.
chtito2 писал(а):В очередной раз огромное спасибо автору.
Это да.

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

В libexec/linkupdown есть строчки:
print "Expresion:================================\n" if ($debug > 0);
my $RESULT = $Billing->expression($Dv->{UID}, \%expr, { START_PERIOD => $Dv->{ACCOUNT_ACTIVATE},
debug => $debug } );
Разве это не означает, что выражения поддерживаются в Ipn тоже?

Ответить