Страница 1 из 3
Вопрос по Activation
Добавлено: Чт май 01, 2008 5:09 am
chtito2
Кто нибудь знает по какому принципу происходит начало работы пользователя? Например пользователь заходит, качает, выходит, но поле Activation остается 0000-00-00. Интересно почему оно не ставится в текущее время в момент первого захода? Вручную оператор должен что-ли вводить каждый раз? Тот же вопрос по полю Expire 0000-00-00. Для чего оно?
Добавлено: Чт май 01, 2008 6:57 am
ppe
Насколько я знаю (да и пользуюсь им именно так) это опорная дата для снятия абонентской платы. Если дата активации 0000-00-00, то она снимается первого числа каждого месяца. если не нулевая, то съем происходит через 30 дней после этой даты и дата "сдвигается" на текущую дату. Еще одна особенность. Если установлена будущая дата, то клиент не может работать пока она не наступит, выдает ошибку авторизации.
Добавлено: Чт май 01, 2008 7:48 am
chtito2
если не нулевая, то съем происходит через 30 дней после этой даты и дата "сдвигается" на текущую дату.
30 дней не самая лучшая идея

Обычно желается, чтобы учетный период считался с 2-го по 2-е, с 5-го по 5-е независимо от того, сколько дней в месяце. Ну и как частный случай: если сегодня 31-е, то переносилось бы на 1-е через два месяца.
Ммм... а сколько снимется если Activation не вводить (оставить 0000-00-00), но клиент подключился например 26-го числа? До 1-го числа следующего месяца тоже снимется полная абонплата?
Добавлено: Чт май 01, 2008 9:13 am
ran
1-го числа следующего месяца тоже снимется полная абонплата?
да
Добавлено: Чт май 01, 2008 9:49 am
chtito2
Удивительно. Столько разной функциональности и такое странное решение. Логичного поведения никак не добиться, кроме как самому переписать эту часть? В принципе проще найти где в коде обсчитывается дата следующего снятия, и прибавлять к началу использования не 30 дней, а 1 месяц по указанному выше алгоритму.
Добавлено: Пт май 02, 2008 5:12 pm
~AsmodeuS~
chtito2 писал(а):Удивительно. Столько разной функциональности и такое странное решение. Логичного поведения никак не добиться, кроме как самому переписать эту часть? В принципе проще найти где в коде обсчитывается дата следующего снятия, и прибавлять к началу использования не 30 дней, а 1 месяц по указанному выше алгоритму.
Некоторые люди перед тем ка писать систему почитали RFC, а некоторые дают утопичные советы даже не задумываясь над их последствиями.
Добавлено: Пт май 02, 2008 5:20 pm
chtito2
Подскажите номер RFC и что именно прочитанное в нем побудило вас решить считать месяц с 2 февраля по 5 марта, или со 2 апреля по 3 мая. Ведь как я понял прибавив 31 день именно это и произойдет?
Добавлено: Сб май 03, 2008 2:39 pm
ran
та шо ты потеешь? проблема яйца выеденного не стоит... хочешь чтоб снималась ежемесячно 1 числа не заполняй активацию, а один раз за оставшиеся дни месяца и руцями снять можно...
Добавлено: Сб май 03, 2008 3:44 pm
chtito2
Вы видимо не связывались с базой в несколько тыщ абонентов, раз руками предлагаете

Автоматизировать хоцца, чтобы операторы не парились и свести к минимуму фактор человеческой ошибки. И продолжения своего поста от Асмодеуса я честно говоря не жду, т.к. боюсь что там уже все сказано
Наиболее приемлемый вариант - найти где в коде прибавляется 31 день и прибавить 1 месяц... но для начала хотелось бы узнать у автора есть ли риск что в каком-то месте это изменение вызовет regressions.
Добавлено: Сб май 03, 2008 3:56 pm
ran
причём тут твои тыщи... я имел ввиду при подключении - сам же писал:
но клиент подключился например 26-го числа?
или у тебя ежедневно тыщи подключаются?

А 1 число тебе чем не нравится? ну какая в ж разница - 1 или 10 снимать??? сдвинь календарь на биллинге на 10 дней - и будет тебе 10-е

Добавлено: Сб май 03, 2008 4:12 pm
chtito2
У самого по себе 1-го числа проблем нет, а проблема у снятия при Activation date 0000-00-00: если клиент подключится например 26-го мая, то 1-го июня с него за эти 5 дней будет снята месячная абонплата? Я так понял что да. А это же полный ляпос. Поэтому и придется переделывать чтобы считалось с числа по число (с 26-го по 26-е, с 3-го по 3-е, и с 31-го по 1-е через 2 месяца). Скорее всего это в periodic daily, хотя пока не смотрел.
Добавлено: Сб май 03, 2008 5:31 pm
~AsmodeuS~
ага и с 30 января по 30 февраля

Добавлено: Сб май 03, 2008 5:51 pm
chtito2
Обычно желается, чтобы учетный период считался с 2-го по 2-е, с 5-го по 5-е независимо от того, сколько дней в месяце. Ну и как частный случай: если сегодня 31-е, то переносилось бы на 1-е через два месяца.
А у снятия полной абонплаты за несколько дней использования нет права на жизнь. Ну разве что в музее

Добавлено: Сб май 03, 2008 6:25 pm
chtito2
Abills/modules/Abon/webinterface
sub abon_periodic {
что в ней нужно поменять чтобы месяц считался с числа по число?
Заранее спасибо.
Добавлено: Сб май 03, 2008 6:44 pm
chtito2
Нашел Abills/modules/Dv/webinterface
Код: Выделить всё
if ($users->{ACTIVATE} ne '0000-00-00') {
my ($Y, $M, $D)=split(/-/, $users->{ACTIVATE}, 3);
$M--;
$Dv->{ABON_DATE} = strftime "%Y-%m-%d", localtime( (mktime(0, 0, 0, $D, $M, ($Y-1900), 0, 0, 0) + 31 * 86400) );
}
Вот эту калькуляцию мы и помассируем! Ура?
Единственная просьба к автору прокомментировать вызовет ли изменение алгоритма вычисления ABON_DATE регрессию где-то в другом месте кода. Я поделюсь своими наработками если кому будет нужно.