Смена тарифного плана по заданию пользователя

Материал из BiTel WiKi

Перейти к: навигация, поиск

Для версий от 4.5

Начиная с 4.5 версии для простой организации смены тарифа не обязательно писать скрипты. Однако, использование обработки событий позволяет выполнять некоторые нештатные функциии.

Например, снятие расхода за смену тарифного плана. При этом, тариф не меняется, если средств недостаточно. Если средств достаточно - заносится расход (скорректируйте код типа расхода с 40 на нужный вам!) и клиенту на странице статистики выводится уведомление о произведенном списании.

import bitel.billing.server.contract.bean.*;
import bitel.billing.server.tariff.bean.*;
import bitel.billing.server.script.event.*;
import bitel.billing.common.*;
import java.util.*;
import java.math.*;
 
cid = event.getContractID();
bu = new BalanceUtils( con );
chm = new ChargeManager( con );
 
// цена смены
changeCost = new BigDecimal( 10 );
 
// текущий баланс
balance = bu.getBalance( new Date(), cid );
if( balance.compareTo( changeCost ) < 0 )
{
  // установка флага обработанности скриптом прервет стандартную смне тарифа
  event.setProcessed( true );
  event.setError( "Недостаточно средств для смены тарифа" ); 
  return;
}
 
now = new GregorianCalendar();
 
// заносим расход
charge = new Charge();
charge.setContractID( cid );
charge.setDate( now );
charge.setChargeTypeID( 40 );
charge.setComment( "Смена тарифа через Web" );
charge.setSumma( changeCost );
 
chm.updateCharge( "new", charge );
 
// обновляем баланс 
bu.updateBalance( now, cid );
 
event.setMessage( "За смену тарифного плана с вас было удержано " + changeCost.toPlainString() + " руб." );

Для версий до 4.4 включительно

Для смены тарифного плана по заданию пользователя можно использовать следующий скрипт. Он заносит расход 50 рублей на баланс пользователя и сменяет тарифный план. Тип расхода необходимо подставить свой, в данном случае он равен 40. Скрипт подходит для односервисных договоров, в которых возможна смена тарифа только по одной услуге. В один момент времени на договоре может быть только один тариф, при наличии тарифов на доп. услуги или другием модули следует модифицировать скрипт.

import bitel.billing.server.contract.bean.*;
import bitel.billing.server.tariff.bean.*;
import bitel.billing.server.script.event.*;
import java.util.*;
 
cid = event.getContractID();
 
task = event.getTask();
 
ctm =  new ContractTariffManager(  con );
chm = new ChargeManager( con );
 
// текущий тарифный план
currentTariff = ctm.getContractTariff( cid, task.getFromDate() );
if( currentTariff == null )
{
 error( "Current tariff not found" );
 return;
}
 
// закрываем старый тариф днем ранее
endDate = (Calendar)task.getFromDate().clone();
endDate.add( Calendar.DAY_OF_YEAR, -1 );
 
currentTariff.setDate2( endDate );
ctm.updateContractTariff( String.valueOf( currentTariff.getID() ), currentTariff  );
 
// заносим расход  50 руб
charge = new Charge();
charge.setContractID( cid );
charge.setDate( task.getFromDate() );
charge.setChargeTypeID( 40 );
charge.setComment( "Смена тарифа через Web" );
charge.setSumma( 50f );
 
chm.updateCharge( "new", charge );
 
// обновляем баланс 
new BalanceUtils( con ).updateBalance( task.getFromDate(), cid );
 
// вносим новый тариф
newPlan = new  ContractTariff();
newPlan.setContractID( cid );
newPlan.setTariffPlanID( task.getTariffPlanID() );
newPlan.setDate1( task.getFromDate() );
newPlan.setComment( "Смена тарифа через Web" );
 
ctm.updateContractTariff( "new", newPlan );
 
// передача информации о смене тарифа, для возможности разрыва соединения RADIUS сервером
new ContractManager( con ).updateLastTariffChange( cid );
Личные инструменты