Вопрос по Activation
Вопрос по Activation
Кто нибудь знает по какому принципу происходит начало работы пользователя? Например пользователь заходит, качает, выходит, но поле Activation остается 0000-00-00. Интересно почему оно не ставится в текущее время в момент первого захода? Вручную оператор должен что-ли вводить каждый раз? Тот же вопрос по полю Expire 0000-00-00. Для чего оно?
Насколько я знаю (да и пользуюсь им именно так) это опорная дата для снятия абонентской платы. Если дата активации 0000-00-00, то она снимается первого числа каждого месяца. если не нулевая, то съем происходит через 30 дней после этой даты и дата "сдвигается" на текущую дату. Еще одна особенность. Если установлена будущая дата, то клиент не может работать пока она не наступит, выдает ошибку авторизации.
30 дней не самая лучшая идеяесли не нулевая, то съем происходит через 30 дней после этой даты и дата "сдвигается" на текущую дату.

Ммм... а сколько снимется если Activation не вводить (оставить 0000-00-00), но клиент подключился например 26-го числа? До 1-го числа следующего месяца тоже снимется полная абонплата?
Удивительно. Столько разной функциональности и такое странное решение. Логичного поведения никак не добиться, кроме как самому переписать эту часть? В принципе проще найти где в коде обсчитывается дата следующего снятия, и прибавлять к началу использования не 30 дней, а 1 месяц по указанному выше алгоритму.
-
- Site Admin
- Сообщения: 5749
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
Некоторые люди перед тем ка писать систему почитали RFC, а некоторые дают утопичные советы даже не задумываясь над их последствиями.chtito2 писал(а):Удивительно. Столько разной функциональности и такое странное решение. Логичного поведения никак не добиться, кроме как самому переписать эту часть? В принципе проще найти где в коде обсчитывается дата следующего снятия, и прибавлять к началу использования не 30 дней, а 1 месяц по указанному выше алгоритму.
Вы видимо не связывались с базой в несколько тыщ абонентов, раз руками предлагаете
Автоматизировать хоцца, чтобы операторы не парились и свести к минимуму фактор человеческой ошибки. И продолжения своего поста от Асмодеуса я честно говоря не жду, т.к. боюсь что там уже все сказано 
Наиболее приемлемый вариант - найти где в коде прибавляется 31 день и прибавить 1 месяц... но для начала хотелось бы узнать у автора есть ли риск что в каком-то месте это изменение вызовет regressions.


Наиболее приемлемый вариант - найти где в коде прибавляется 31 день и прибавить 1 месяц... но для начала хотелось бы узнать у автора есть ли риск что в каком-то месте это изменение вызовет regressions.
У самого по себе 1-го числа проблем нет, а проблема у снятия при Activation date 0000-00-00: если клиент подключится например 26-го мая, то 1-го июня с него за эти 5 дней будет снята месячная абонплата? Я так понял что да. А это же полный ляпос. Поэтому и придется переделывать чтобы считалось с числа по число (с 26-го по 26-е, с 3-го по 3-е, и с 31-го по 1-е через 2 месяца). Скорее всего это в periodic daily, хотя пока не смотрел.
-
- Site Admin
- Сообщения: 5749
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
А у снятия полной абонплаты за несколько дней использования нет права на жизнь. Ну разве что в музееОбычно желается, чтобы учетный период считался с 2-го по 2-е, с 5-го по 5-е независимо от того, сколько дней в месяце. Ну и как частный случай: если сегодня 31-е, то переносилось бы на 1-е через два месяца.

Нашел Abills/modules/Dv/webinterface
Вот эту калькуляцию мы и помассируем! Ура?
Единственная просьба к автору прокомментировать вызовет ли изменение алгоритма вычисления ABON_DATE регрессию где-то в другом месте кода. Я поделюсь своими наработками если кому будет нужно.
Код: Выделить всё
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 регрессию где-то в другом месте кода. Я поделюсь своими наработками если кому будет нужно.