forum.bitel.ru
http://forum.bitel.ru/

Абонентская плата на счет с отрицательным балансом...
http://forum.bitel.ru/viewtopic.php?f=16&t=130
Страница 1 из 1

Автор:  ITT [ 07 мар 2007, 17:01 ]
Заголовок сообщения:  Абонентская плата на счет с отрицательным балансом...

Можно ли сделать так, чтобы на счета с отрицательным балансом - абонентская плата не начислялась? А то бывает так, что клиент не работает уже давно, а договор еще не расторгли - при этом абон. плата исправно начисляется, но оплачивать ее вряд ли когда-нибудь уже будут .

Автор:  Администратор [ 07 мар 2007, 17:21 ]
Заголовок сообщения: 

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

Автор:  Akhmat [ 23 ноя 2007, 15:13 ]
Заголовок сообщения: 

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

Автор:  Lavrenov_Sergey [ 24 янв 2008, 20:25 ]
Заголовок сообщения:  Re: Абонентская плата на счет с отрицательным балансом...

Прошел уже почти год. Есть какие-нибудь изменения по данной теме.
ITT писал(а):
Можно ли сделать так, чтобы на счета с отрицательным балансом - абонентская плата не начислялась? А то бывает так, что клиент не работает уже давно, а договор еще не расторгли - при этом абон. плата исправно начисляется, но оплачивать ее вряд ли когда-нибудь уже будут .

Автор:  Администратор [ 25 янв 2008, 15:41 ]
Заголовок сообщения: 

В 4.4 версии будет понятие приостановки договора. Такие договора нужно будет приостанавливать и абонку снимать не будет за период приостановки. А в дальнейшем может автоприостановку сделаем тогда на основании баланса.

Автор:  blib [ 27 янв 2008, 01:23 ]
Заголовок сообщения: 

tottaly cool

а можно на время приостановки с них еще брать 200р/мес?
что бы приостановка не была совсем бесплатной?

Автор:  msh [ 01 сен 2008, 00:06 ]
Заголовок сообщения: 

Администратор писал(а):
В 4.4 версии будет понятие приостановки договора. Такие договора нужно будет приостанавливать и абонку снимать не будет за период приостановки. А в дальнейшем может автоприостановку сделаем тогда на основании баланса.


а можно делать приостановку задним числом?
т.е если у абонента в течении месяца не было траффика то абонплату за этот месяц не снимать? (а узнать это можно только в конце месяца, когда абонплата уже списана)

Автор:  Администратор [ 02 сен 2008, 16:21 ]
Заголовок сообщения: 

Можно, сделать переначисление и все.

Автор:  msh [ 04 сен 2008, 01:28 ]
Заголовок сообщения: 

Администратор писал(а):
Можно, сделать переначисление и все.


имеется ввиду задача планировщика "начисление NPay абонплат" ?

Автор:  stark [ 04 сен 2008, 20:33 ]
Заголовок сообщения: 

Модули->Абонплата->Начисление

Автор:  msh [ 06 сен 2008, 19:27 ]
Заголовок сообщения: 

stark писал(а):
Модули->Абонплата->Начисление


в документации (глава18 п6 ) пишут что то же самое делает задача планировщика "Начисление npay абонплат" и если мы поменяем статус договора задним числом, например в 23.30 последнего дня текущего месяца, а замем в 0.10 запустится пересчет абонплат то все абонплаты пересчитаются
я прав?

Автор:  Администратор [ 08 сен 2008, 15:58 ]
Заголовок сообщения: 

Да

Автор:  msh [ 27 окт 2008, 00:26 ]
Заголовок сообщения: 

а как правильно сделать запуск задачи планировщика в 23.30 последнего дня месяца. как узнать какое это число - оно же постоянно меняется :(
фокус как в екселе с нулевым днем месяца пройдет? (что нулевой день месяца трактуется как последний день предыдущего месяца?)

или надо запускать скрипт каждый день и внутри с помошью класса calendar разбираться?

Автор:  Администратор [ 27 окт 2008, 14:29 ]
Заголовок сообщения: 

В документации:
Цитата:
Необходимо учитывать что при отработке задачи начисления берется час предшествующий текущему. Это дает возможность снимать абонплату в конце месяца, установив запуск задачи на 0 часов последующего месяца.

http://bgbilling.ru/v4.5/doc/ch18s06.html

Это стандартная схема для всех начислений. Т.е. ставите задачу на 0 часов 55 минут например каждого месяца, и она обсчитвает предыдущий.

Автор:  msh [ 05 ноя 2008, 03:06 ]
Заголовок сообщения: 

вот написал тестовый скриптик
Код:
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.tariff.bean.*;
import bitel.billing.server.script.event.*;
import bitel.billing.server.ipn.bean.*;
import java.util.*;
import java.text.*;

private long gettraff(sid){
   //sid=1 -входящий
   //sid=2 исходящий

   //получение названия нужной таблици с траффиком
   evdate=event.getGenerateTime().clone();

   //обсчитаваем предыдущий месяц
   evdate.add(Calendar.MONTH,-1);

   datefrm = new SimpleDateFormat("yyyyMM");   
   evyear=datefrm.format(evdate.getTime()).toString();
   print("working date "+evyear);
   //запрос из базы траффика
   ps = con.prepareStatement("SELECT SUM(amount) FROM ipn_contract_data_3_"+evyear+" WHERE cid=? AND sid=? AND dt>'"+evyear+"01'");
   ps.setInt( 1, cid);
   ps.setInt( 2, sid);
   rs = ps.executeQuery();
   rs.first();
   return rs.getLong(1)/1048576; //в мегабайтах
}

STATUS_ACTIV=0;
STATUS_STOPPED=4;

if( event.flag == 2 && event.getContractID() == 18){
 //наш таймер
 //этот скрип надо запускать в первый час начала месяца, до начисления абонплат

   cid = event.getContractID();
   input_traff=gettraff(1);
   output_traff=gettraff(2);


   print("traffic input "+input_traff);
   print("traffic output "+output_traff);

   //определяем пользовался ли пользователь инетом в этом месяце
   //для этого смотрим его исходящий и входящий траффик со 2го числа до конца месяца
   //исходящий должен быть 0, входящий < 1Гб

   //if ( ! (input_traff > 1024 || output_traf > 0)) {
    if (true){
      //не было пользования услугой - ставим на этот месяц договору статус "приостановлен"
      //c начала прошлого месяца до конца прошлого месяца

      end_date=event.getGenerateTime().clone();
      start_date=event.getGenerateTime().clone();
      end_date.add( Calendar.DAY_OF_YEAR, -1 );
      start_date.add(Calendar.MONTH,-1);

      //проверяем текущий статус
      csm=new ContractStatusManager(con);
      print("status"+csm.getStatus(cid,start_date).getStatus());
      if (csm.getStatus(cid,start_date).getStatus() == STATUS_ACTIV){
         //если статус договора был активным
         cstat = new ContractStatus();
         cstat.setStatus(STATUS_STOPPED); //приостановлен
         cstat.setDate1(start_date);
         cstat.setDate2(end_date);
         cstat.setComment("автоматическая блокировка");
         cstat.setContractId(cid);
         csm.updateStatus(cstat);   
      }   
   }


}


запускать его надо в 0.20 в первый день месяца до начисления абонплат.
писалось под BGBiliing 4.4

есть некоторые вопросы
1)почему csm.getStatus(cid,start_date) возвращает null если у договора ни разу не менялся статус?
2)правильно я понимаю что csm.updateStatus(cstat) заносит запись в таблицу смены статусов (с даты по дату), а setContractStatus просто глобально меняет статус договора и остался от старых версий
3) какой будет статус договора в том случае если я поставлю что он пристановлен с 1.11 до 30.11 по истечении этого срока?
4) надо ли добавлять запись "активен" после истечения срока приостановки?
5) откуда брать коды статусов договоров? (я их определил эспериментально)

Автор:  Администратор [ 10 ноя 2008, 12:44 ]
Заголовок сообщения: 

1 - если нет записи, значит статус "активен".
2 - я исправил API доку, смотрите
3 - по-умолчанию, т.е. активен
4 - не обязательно, см. 1,3
5 - KernelConst, смотрите поправеленную javadoc

Автор:  msh [ 09 янв 2009, 04:06 ]
Заголовок сообщения: 

Цитата:
5 - KernelConst

а как им пользоваться?
пишу:
Код:
import bitel.billing.common.KernelConst.*;
import java.util.*;
import java.text.*;

print("test stat="+KernelConst.CONTRACT_STATUS_SUSPENDED);

а получаю void :(
версия bgbilling 4.5

Автор:  stark [ 11 янв 2009, 14:25 ]
Заголовок сообщения: 

msh писал(а):
Цитата:
5 - KernelConst

а как им пользоваться?
пишу:
Код:
import bitel.billing.common.KernelConst.*;
import java.util.*;
import java.text.*;

print("test stat="+KernelConst.CONTRACT_STATUS_SUSPENDED);

а получаю void :(
версия bgbilling 4.5


измените строчку :
Код:
import bitel.billing.common.KernelConst.*;

на
Код:
import bitel.billing.common.KernelConst;

Автор:  msh [ 01 фев 2009, 20:53 ]
Заголовок сообщения: 

Почему приведенный ниже код печатет status: 4 (CONTRACT_STATUS_SUSPENDED), хотя в клиенте пишется что статус активен? Месяц назад договор существовал, его статус не менялся никогда.
Код:
start_date=event.getGenerateTime().clone();
start_date.add(Calendar.MONTH,-1);
csm=new ContractStatusManager(con);
print("status: "+ csm.getStatus(cid,start_date).getStatus());

Автор:  stark [ 03 фев 2009, 19:04 ]
Заголовок сообщения: 

msh писал(а):
Почему приведенный ниже код печатет status: 4 (CONTRACT_STATUS_SUSPENDED), хотя в клиенте пишется что статус активен? Месяц назад договор существовал, его статус не менялся никогда.
Код:
start_date=event.getGenerateTime().clone();
start_date.add(Calendar.MONTH,-1);
csm=new ContractStatusManager(con);
print("status: "+ csm.getStatus(cid,start_date).getStatus());


сделайте запрос :
select * from contract_status
where cid = xxx

Автор:  msh [ 05 фев 2009, 00:37 ]
Заголовок сообщения: 

stark писал(а):
сделайте запрос :
select * from contract_status
where cid = xxx

пусто там
если убрать where то там в таблице несколько строчек, относящихся к cid'ам которым я менял статус вручную

Автор:  msh [ 11 фев 2009, 01:21 ]
Заголовок сообщения: 

up
у вас проблема не повторяется?

Автор:  stark [ 11 фев 2009, 13:22 ]
Заголовок сообщения: 

msh писал(а):
up
у вас проблема не повторяется?


Да, действительно была ошибка при получении статуса. Исправили. обновитесь.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/