BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 23 июн 2025, 20:30

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Хитрый тарифный план
СообщениеДобавлено: 03 фев 2012, 11:32 
Не в сети

Зарегистрирован: 27 дек 2011, 07:28
Сообщения: 32
Карма: 0
Добрый день.
bgbilling v.5.1

Может кто подскажет, возможно ли сделать такое с тарифными планами:
Допустим имеются безлимитные тарифы, ТП1 (АП-500руб) ТП2 (АП-1000руб) ТП3 (АП-1500руб). Клиент подключается на ТП1, платит первоначальный взнос 5000 руб, и полгода может бесплатно пользоваться инетом.
Но надо дать ему возможность, в течении этого полугода, переходить на более дорогой тариф (ТП2 или ТП3) с ежемесячной доплатой разницы между АП. Т.е если он перейдет с ТП1 на ТП2 он ежемесячно будет доплачивать 500руб, а при переходе с ТП1 на ТП3 1000руб. С ТП2 он может переходить только на ТП3.
А после окончания полугодия, нужно оставить ему тот тарифный план на котором он находился в последнее время и снимать полную АП.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хитрый тарифный план
СообщениеДобавлено: 03 фев 2012, 11:49 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Только если через скрипты поведения на событии WEB смена тарифного плана

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хитрый тарифный план
СообщениеДобавлено: 03 фев 2012, 12:03 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Цитата:
Т.е если он перейдет с ТП1 на ТП2 он ежемесячно будет доплачивать 500руб, а при переходе с ТП1 на ТП3 1000руб. С ТП2 он может переходить только на ТП3.

Он в любом случае будет оплачивать эту разницу. Она же списывается как абонплата.

На вики есть пример http://wiki.bgbilling.ru/index.php/Смена_тарифного_плана_по_заданию_пользователя

У меня работает вот так вот, но в течении недели - двух буду переделывать, т.к. поменял логику.
Да и топорно у меня и было сработано на скорую руку
Код:
import bitel.billing.server.contract.bean.*;
import bitel.billing.common.TimeUtils.*;
import bitel.billing.server.tariff.bean.*;
import bitel.billing.server.script.event.*;
import bitel.billing.server.util.*;
import java.util.*;
import java.math.*;

cid = event.getContractId();
cm = new ContractManager( con );
contract = cm.getContractById( cid );
fromDate = event.getFromDate();
event.setProcessed( true );
 
ctm =  new ContractTariffManager(  con );
cgm = new ContractTariffGroupManager ( con );
chm = new ChargeManager( con );
csm = new ContractServiceManager( con );
bu = new BalanceUtils( con );
endDate = new GregorianCalendar();

int[] tparray = { 0 };
int[][] tpmatrix = { { 0,   0 }, };

if ( cgm.isExistsContractTariffGroup(cid, 6) == true)
   {
   tparray = new int[]{ 54, 58, 5, 101, 191, 192, 193, 59, 103, 6, 194, 104, 2, 60, 105, 195, 106, 61, 13, 196, 63, 127, 22, 197, 149, 198, 129 };
   tpmatrix = new int[][]{ { 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0},};
   }

else if ( cgm.isExistsContractTariffGroup(cid, 8) == true)
   {
   tparray = new int[]{ 76,   77,   130,   131,   79,   132,   133,   78,   134,   80,   135,   81,   136,   137 };
   tpmatrix = new int[][] { { 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0},
                       { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0},};
   }
else if ( cgm.isExistsContractTariffGroup(cid, 9) == true)
   {
   tparray = new int[]{ 76,   77,   139,   142,   79,   144,   145,   78,   138,   80,   140,   81,   141,   143 };
   tpmatrix = new int[][]{ {0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0},};
   }

else if ( cgm.isExistsContractTariffGroup(cid, 10) == true)
   {
   tparray = new int[]{ 76,   77,   139,   142,   79,   144,   145,   78,   138,   80,   140,   81,   141,   143 };
   tpmatrix = new int[][]{ {0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0},
                    { 1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0},};
   }

else if ( cgm.isExistsContractTariffGroup(cid, 11) == true)
   {
   tparray = new int[]{ 76,   58,   77,   191,   103,   108,   131,   194,   104,   237,   132,   110,   105,   195,   106,   134,   239,   196,   241,   243,   197 };
   tpmatrix = new int[][]{ {1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
                    { 1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},};
   }

// текущий тарифный план
currentTariff = event.getFromTariff();
if( currentTariff == null )
{
 error( "Current tariff not found" );
 return;
}
 
tpid = currentTariff.getTariffPlanId();
print( "Current tariff: " + tpid );
tpIndex = -1;
 
for ( i = 0; i < tparray.length; i++ ) {
    if ( tpid == tparray[i] ) {
        tpIndex = i;
        print( "index: " + tpIndex );
        break;
    }
}
if( tpIndex == -1 ) {
    error("Wrong current tariff!" );
print ("Тарифная группа = " + tarifgrp);
    return;
}
 
ntpid = event.getToTariff().getId();
print( "New tariff: " + ntpid );
ntpIndex = -1;
 
for ( i = 0; i < tparray.length; i++ ) {
    if ( ntpid == tparray[i] ) {
        ntpIndex = i;
        print( "index: " + ntpIndex );
        break;
    }
}
if( ntpIndex == -1 ) {
    error("Wrong new tariff!" );
   return;
}


//Подготавливаем дату
fromDate = event.getFromDate();
Calendar fromDateCal = new GregorianCalendar();
fromDateCal.setTime(fromDate);
int monthBegin = fromDateCal.get(GregorianCalendar.DATE);

// если переход на более дешевый тариф. проверяем дату
print("tpmatrix[" + tpIndex + "][" + ntpIndex + "]= " + tpmatrix[tpIndex][ntpIndex]);
if(contract.getFc() == 0)
{
   if( tpmatrix[tpIndex][ntpIndex] > 0 )
   {
         if (monthBegin != 01)
         {
            event.setError( "Переход на тарифный план с меньшей абонплатой возможен ТОЛЬКО с начала месяца" );
         }
         else if (monthBegin == 01 )
         {
            // закрываем старый тариф днем ранее
            endDate.setTime( fromDate);

            print( "endDate: " + TimeUtils.formatDate( endDate ) );
 
            endDate.add( Calendar.DAY_OF_MONTH, -1 );

            currentTariff.setDate2( endDate );
            ctm.updateContractTariff( currentTariff  );
 
            // устанавливаем новый тарифный план
            newPlan = new  ContractTariff();
            newPlan.setContractId( cid );
            newPlan.setTariffPlanId( ntpid );
            newPlan.setDate1( TimeUtils.convertDateToCalendar( fromDate ) );
            newPlan.setComment( "Смена тарифа через личный кабинет" );
 
            ctm.updateContractTariff( newPlan );

            event.setMessage( "Тарифный план был успешно изменен");
         }
   }

   //Если же tpmatrix возвращает 0
   else if( tpmatrix[tpIndex][ntpIndex] == 0 )
      {
         // закрываем старый тариф днем ранее
         endDate.setTime( fromDate);
 
         print( "endDate: " + TimeUtils.formatDate( endDate ) );
 
         endDate.add( Calendar.DAY_OF_MONTH, -1 );
 
         currentTariff.setDate2( endDate );
         ctm.updateContractTariff(currentTariff);
 
         // устанавливаем новый тарифный план
         newPlan = new  ContractTariff();
         newPlan.setContractId( cid );
         newPlan.setTariffPlanId( ntpid );
         newPlan.setDate1( TimeUtils.convertDateToCalendar( fromDate ) );
         newPlan.setComment( "Смена тарифа через личный кабинет" );
 
         ctm.updateContractTariff( newPlan );

         event.setMessage( "Тарифный план был успешно изменен");
      }
}
else if(contract.getFc() == 1)
   {
      event.setError( "Смена тарифного плана через личный кабинет доступна только для физических лиц" );
   }


У меня другая логика.
Запрещено переходить с более дорогого тарифного плана на более дешевый НЕ с начала месяца.
Но можете взять за основу. И полностью запрещать переход на более дешевый тариф

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хитрый тарифный план
СообщениеДобавлено: 03 фев 2012, 12:40 
Не в сети

Зарегистрирован: 27 дек 2011, 07:28
Сообщения: 32
Карма: 0
Спасибо, за оперативный ответ, буду смотреть.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.036s | 25 Queries | GZIP : On ]