Биллинговая система Nodeny

Главная категория => Общий раздел => Тема начата: Aivanzipper от 05 Июля 2010, 12:37:05



Название: Перерасчет при подкючении
Отправлено: Aivanzipper от 05 Июля 2010, 12:37:05
Все знают проблему когда подключаем нового пользователя, например, в феврале, ставим ему день начала потребления, а перерасчет происходит с расчетом 31 день в месяце. Много уже ругались по этому поводу. Оказывается, все фиксится очень просто: в файле nomoney.pl ищем строку
Код:
$k=sprintf("%.2f",(32-$start_day)/31);
(у меня она 247) и заменяем на такие строки
Код:
chop($mounth_days=`date -v1d -v\`date -v +1m +%m\`m -v-1d +%d`);
$k=sprintf("%.2f",($mounth_days-$start_day+1)/$mounth_days);

Сохраняем, радуемся.

PS жмем плюсик  ::)


Название: Re: Перерасчет при подкючении
Отправлено: Efendy от 05 Июля 2010, 14:44:53
скрипт перехода на новый месяц запускается в начале _следующего_ месяца. Эта ситуация разруливается?


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 05 Июля 2010, 15:01:28
скрипт перехода на новый месяц запускается в начале _следующего_ месяца. Эта ситуация разруливается?

А это тут при чем?
Я изменил только алгоритм перерасчета, больше ничего.


Название: Re: Перерасчет при подкючении
Отправлено: Efendy от 05 Июля 2010, 15:03:31
а при том, что в следующем месяце обычно дней не такое количество как в предыдущем. Скрипт запускается в следующем месяце чем том, на который идет расчет


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 05 Июля 2010, 15:05:53
Ну и какая разница. Берется первый день следующего месяца минус один день. Получаем дату, выводим в формате %d итого получаем число последнего дня текущего месяца, оно же количество дней в текущем месяце.


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 05 Июля 2010, 15:09:16
[root@host /scripts/ping]# date -v1d
четверг,  1 июля 2010 г. 16:10:03 (EEST)
[root@host /scripts/ping]# date -v1d -v08m
воскресенье,  1 августа 2010 г. 16:10:46 (EEST)
[root@host /scripts/ping]# date -v1d -v08m -v-1d
суббота, 31 июля 2010 г. 16:10:55 (EEST)
[root@host /scripts/ping]# date -v1d -v08m -v-1d +%d
31


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 05 Июля 2010, 15:17:40
скрипт перехода на новый месяц запускается в начале _следующего_ месяца.

Стоп, или ты хочешь сказать что скрипт nomoney.pl запускается дважды? В момент первой активности юзера и в начале следующего месяца?


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 05 Июля 2010, 15:26:57
Специально посмотрел: в таблице users есть поле start_day, в которое соответственно записывается день начала потребления услуги (вычисляется в nomoney.pl в момент первой активности), а уже потом new_month.pl достает из базы значение этого поля, так что все должно быть нормально.


Название: Re: Перерасчет при подкючении
Отправлено: blackjack от 05 Июля 2010, 20:01:30
вот не пойму вас, есть функция GetMaxDayInMonth()
так почему не зделать по формуле
сумма снятия=(GetMaxDayInMonth($mon_now)-$day_now)*(стоимость тарифа/GetMaxDayInMonth($mon_now))

все.


Название: Re: Перерасчет при подкючении
Отправлено: stix от 05 Июля 2010, 20:10:12
Код:
use Date::Manip;
my ($m, $y) = UnixDate("today", "%m", "%Y");
my $days = Date_DaysInMonth($m,$y);
print "$days\n";
я делал так


Название: Re: Перерасчет при подкючении
Отправлено: Efendy от 05 Июля 2010, 20:26:04
Скрипт перехода на новый месяц не запускается дважды. Суть вот в чем:
для одного и того же снятия, подпрограмма подсчета денег запускается в разные месяцы. Сейчас июль. Когда мы просматриваем баланс клиента, то этот баланс считается динамически. Допустим при подсчете баланса используется текущий месяц. Баланс посчитается правильно. Наступит август и нужно произвести непосредственное снятие денег. Т.е. До этого момента баланс считался динамически, а в момент проводок платежа "снятие за инет" он уже фиксируется в базе. Запускается в августе, т.е. количество дней будет уже не то. Можно сделать минус 1 день. Но тогда 1 числа каждого месяца динамический баланс будет неверный.


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 06 Июля 2010, 08:28:00
Ну в таком случае надо просто задать одно условие: так как скрипт_перехода запускается только первого числа, необходимо сделать так:

if (дата_сейчас==первое_число) {высчитать сколько дней было в прошлом месяце};


Название: Re: Перерасчет при подкючении
Отправлено: Efendy от 06 Июля 2010, 08:38:26
Ну в таком случае надо просто задать одно условие: так как скрипт_перехода запускается только первого числа, необходимо сделать так:

if (дата_сейчас==первое_число) {высчитать сколько дней было в прошлом месяце};
if( запуск из скрипта перехода) {высчитать сколько дней было в прошлом месяце}


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 06 Июля 2010, 09:03:30
Мой вариант:
Код:
chomp($mounth_days=`date -v1d -v\`date -v +1m +%m\`m -v-1d +%d`);
if (`date %d` eq '01\n') {chomp($mounth_days=`date -v1d -v-1d +%d`)};
$k=sprintf("%.2f",($mounth_days-$start_day+1)/$mounth_days);

А как узнать откуда запуск? Было-бы феншуйнее.


Название: Re: Перерасчет при подкючении
Отправлено: Efendy от 06 Июля 2010, 14:10:35
Краткий пересказ:

- сделайте эту фичу
- разраб занят другим, фича будет в новой версии
- хорошо, мы сделали фичу сами
- разраб грит, что в фиче есть бока
- хорошо, разраб сделай фичу

Отвечаю:

Цитировать
разраб занят другим, фича будет в новой версии


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 06 Июля 2010, 14:43:44
Так сложно сказать метод?


Название: Re: Перерасчет при подкючении
Отправлено: Efendy от 07 Июля 2010, 10:03:50
вот не пойму вас, есть функция GetMaxDayInMonth()
так почему не зделать по формуле
сумма снятия=(GetMaxDayInMonth($mon_now)-$day_now)*(стоимость тарифа/GetMaxDayInMonth($mon_now))

все.
из nodeny.pl недоступна т.к. он не вызывает calls.pl


Название: Re: Перерасчет при подкючении
Отправлено: Efendy от 07 Июля 2010, 10:04:28
Так сложно сказать метод?
= сделай. Я же говорил, что сделаю. В новой версии.


Название: Re: Перерасчет при подкючении
Отправлено: stix от 07 Июля 2010, 10:13:18
Так сложно сказать метод?
= сделай. Я же говорил, что сделаю. В новой версии.
следует ждать встречного вопроса, когда будет next ver. ?  :D


Название: Re: Перерасчет при подкючении
Отправлено: VitalVas от 07 Июля 2010, 11:00:05
следует ждать встречного вопроса, когда будет next ver. ?  :D
через пол года  ;D
или когда выйдет, тогда и будет  ;D


Название: Re: Перерасчет при подкючении
Отправлено: versus от 07 Июля 2010, 11:27:42
Переход с 45 ветки на 48 длился почти 2 года
Переход с 48 ветки на 50 длился больше года
Переход с 50.32 .6 на 50.next  длится всего c марта месяца, при этом полностью переписывается вэб движок админки, переписываются и оптимизируются основные запросы к базе и учтено множество замечаний по улучшению работы программы.
Откуда такое нетерпение к дате релиза, чем текущий стейбл не устраивает ???
Нодени славится тем, что это очень проверенное решение, тщательное тестирование, которого проводится во внутренних сетях.
Заметьте, 49.33 была выпущена уже протестированной и рабочей. С момента выхода 49.33 никаких ошибок не замечено, ночь на первое число, я спецально сижу в инете что бы оперативно реагировать на проблемы пользователей. Так вот за 2 последних месяца вобще нет вопросов. Я с чистой совестью в 2 часа ночи иду спать.

Хотите ловить баги на своих сетях и быть тестерами новых версий на живых пользователях???
По мне так хоть и полгода и год пусть Стас делает релиз, лишь бы потом не обрывали у вас телефоны пользователи требуя компенсаций за проблемы с биллингом.

ЗЫ кому не терпится, записываемся в теме, основное требование работа на тестовой версии на не меньше чем  300 абонентов в течении 2-х месяцев, багрепорты и отчеты еженедельно. Доступ в админку и к ссш сервера приветствуется.
Как только поток проблем иссякнет, то сразу же выпускаем релиз.

 


Название: Re: Перерасчет при подкючении
Отправлено: VitalVas от 07 Июля 2010, 12:13:34
Переход с 45 ветки на 48 длился почти 2 года
Переход с 48 ветки на 50 длился больше года
Переход с 50.32 .6 на 50.next  длится всего c марта месяца, при этом полностью переписывается вэб движок админки, переписываются и оптимизируются основные запросы к базе и учтено множество замечаний по улучшению работы программы.
Откуда такое нетерпение к дате релиза, чем текущий стейбл не устраивает ???
Нодени славится тем, что это очень проверенное решение, тщательное тестирование, которого проводится во внутренних сетях.
Заметьте, 49.33 была выпущена уже протестированной и рабочей. С момента выхода 49.33 никаких ошибок не замечено, ночь на первое число, я спецально сижу в инете что бы оперативно реагировать на проблемы пользователей. Так вот за 2 последних месяца вобще нет вопросов. Я с чистой совестью в 2 часа ночи иду спать.

Хотите ловить баги на своих сетях и быть тестерами новых версий на живых пользователях???
По мне так хоть и полгода и год пусть Стас делает релиз, лишь бы потом не обрывали у вас телефоны пользователи требуя компенсаций за проблемы с биллингом.

ЗЫ кому не терпится, записываемся в теме, основное требование работа на тестовой версии на не меньше чем  300 абонентов в течении 2-х месяцев, багрепорты и отчеты еженедельно. Доступ в админку и к ссш сервера приветствуется.
Как только поток проблем иссякнет, то сразу же выпускаем релиз.

я лутше подожду и откажуся от такого заманчевого предложения...
и другим так советую...


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 27 Августа 2010, 10:39:02
Так сложно сказать метод?
= сделай. Я же говорил, что сделаю. В новой версии.

в таком случае извиняюсь, я думал что метод уже известен


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 01 Сентября 2010, 15:37:40
Стас, а почему фактическое снятие средств со счета происходит не 1-го числа в 0:00 а минутой раньше? т.е. 31-го в 23:59  ??? ??? И каким это макаром выходит, если скрипт_новый_месяц запускается именно в 0:00 ??


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 01 Сентября 2010, 16:25:54
Понял, это фича такая...

Кстате, сокращалка %.2f в коэф-те перерасчета грабит честных юзеров на десятки копеек! :) Себе исправил на %.4f


Название: Re: Перерасчет при подкючении
Отправлено: blackjack от 01 Сентября 2010, 16:54:47
Цитировать
Ув. абонент, вы начали пользоваться услугой с 1 числа, т.е. не полный месяц. Мы уменьшили стоимость тарифного плана и предоплаченный трафик: данные тарифного плана умножены на коэффициент 1.00

Актуально ли такое сообщение? :)


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 01 Сентября 2010, 19:11:44
читсо в косметических интересах его легко убрать


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 01 Октября 2010, 09:24:35
Можно сделать минус 1 день. Но тогда 1 числа каждого месяца динамический баланс будет неверный.

А нафига высчитывать динамический баланс 1-го числа?  :) Коэфициент все равно будет равен 1!

Конечный вариант всего блока:

Код:
{
 $k=1;
 last if $start_day<=1;
 # не с начала месяца начал пользоваться услугами. Вычислим коэффициент понижения трафика и денег
 if (`date +%d` eq '01\n') {chomp($mounth_days=`date -v-1d +%d`);}
 else {chomp($mounth_days=`date -v1d -v\`date -v+1m +%m\`m -v-1d +%d`);}
 $k=sprintf("%.4f",($mounth_days-$start_day+1)/$mounth_days);
 $ret->{report}="<tr class=head><td colspan=5><br>Ув. абонент, вы начали пользоваться услугой с <b>$start_day</b> числа, ".
   " т.е. не полный месяц. Мы уменьшили стоимость тарифного плана и предоплаченный трафик: ".
   " данные тарифного плана умножены на коэффициент <b>$k</b><br><br>".$ret->{report} if $mode_report;
}


Название: Re: Перерасчет при подкючении
Отправлено: Aivanzipper от 01 Октября 2010, 09:44:46
Актуально ли такое сообщение? :)

Да, Вы правы, не так Вас раньше понял. Теперь все стало на свои места.


Название: Re: Перерасчет при подкючении
Отправлено: relikts от 04 Марта 2020, 10:16:13
Здравствуйте, как отключить перерасчет коэфициента вообще? Чтобы он все время был равен 1. Бухгалтерия требует ровных сумм в отчете без копеек. Нужно чтобы с клиента снималась полная сумма тарифа в не зависимости в какой день месяца он подключился или начал потреблять трафик.


Название: Re: Перерасчет при подкючении
Отправлено: WideAreaNetwork от 04 Марта 2020, 10:27:43
Здравствуйте, как отключить перерасчет коэфициента вообще? Чтобы он все время был равен 1. Бухгалтерия требует ровных сумм в отчете без копеек. Нужно чтобы с клиента снималась полная сумма тарифа в не зависимости в какой день месяца он подключился или начал потреблять трафик.
начать с того чтобы не плодить один и тот же вопрос в разных темах