вот написал скрипт смены тарифа по заданию пользователя с изменением типа шлюза
Код:
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.*;
cid = event.getContractID();
task = event.getTask();
ctm = new ContractTariffManager( 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 );
// вносим новый тариф
newPlan = new ContractTariff();
newPlan.setContractID( cid );
newPlan.setTariffPlanID( task.getTariffPlanID());
newPlan.setDate1( task.getFromDate() );
newPlan.setComment( "Смена тарифа через Web" );
ctm.updateContractTariff( "new", newPlan );
// получаем ID нового тарифного плана - по нему будем определять правило шлюза
newPlanID=task.getTariffPlanID();
switch ( newPlanID ){
case 4:
// план тестовый 256кбит/с
ruleTypeID=11;
break;
case 3:
// план базовый 1 Мбит/с
ruleTypeID=1;
default:
// 64 кбит/с
ruleTypeID=14;
}
// выставляем тип правила шлюза для данного тарифа
// вместо mid поставьте код вашего модуля IPN
ugrm = new UserGateRuleManager( con, 3 )
rule = ugrm.getUserGateRules( cid ).get( 0 );
rule.setRuleTypeId(ruleTypeID);
ugrm.updateUserGateRule( String.valueOf( rule.getId() ), rule ) ;
// обновление правила на манаде
csm = new ContractStatusManager( con, 3 );
status = csm.getContractStatus( cid );
// открытие и закрытие шлюза
csm.changeStatus( cid, 1, userID.intValue(), true );
csm.changeStatus( cid, status, userID.intValue(), true );
возникли вследующие вопросы:
1)как проверить его работу не дожидаясь первого мая и не меняя время на сервере
2)зачем в последних 2х строчках скрипта (а они взяты из рекомендвции Администратора) сначала производится открытие шлюза а затем закрытие? по идее было бы логично наоборот
3)очень тяжко прописавать в скипте соответствие между ID тарифа и ID правила шлюза - может добавить возможность присваивать в тарифе свои параметры, а потом читать их в скрипте?