Переинициализация тарифа в пределах сессии
Материал из BiTel WiKi
В данном случае используется для обновления параметров в пределах сессии после смены тарифа в скрипте.
В качестве стартового события используется запрос учетного периода модулем Dial-UP.
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.*; import java.lang.*; cm = new ContractManager( con ); ctm = new ContractTariffManager( con ); cid = event.getContractID(); chm = new ChargeManager( con ); date = (Calendar)event.getRequestDate(); contract = event.getContract(); event.setProcessed( true ); // ипользуется для корректной обработки события //подготавливаем вчера yesterday = (Calendar)date.clone(); yesterday.add( Calendar.DAY_OF_YEAR, -1 ); //получаем ID активного тарифного плана и его позицию tpid = ctm.getContractTariff( cid, date ).getTariffPlanID(); tpos = ctm.getContractTariff( cid, date ).getPos(); //подгатавливаем новые записи о тарифе на договоре... tar = new ContractTariff(); tar.setID(ctm.getContractTariff( cid, date ).getID()); tar.setContractID(cid); tar.setPos(ctm.getContractTariff( cid, date ).getPos()); tar.setTariffPlanID(tpid); tar.setDate1 (ctm.getContractTariff( cid, date ).getDate1()); //... закрываем его вчерашним числом... tar.setDate2 (yesterday); tar.setComment("Сюда забиваем коммент"); //... и обновляем на договоре ctm.updateContractTariff(tar); //подготавливаем новый тариф tar = new ContractTariff(); tar.setContractID( cid ); // открываем его сегодняшним числом... tar.setDate1( date ); tar.setPos(tpos + 1 ); //вместо 1 ставим нужный нам номер нового тарифа tar.setTariffPlanID(1); tar.setComment("сюда тоже можем забить коммент"); // обновляем тариф на договоре ctm.updateContractTariff(tar); // здесь собственно и происходит обновление атрибутов тарифа на новый, // вместо <mid> подставляем номер модуля dialup contract.setTts( new ContractManager( con ).getRealtimeTariffTreeSet( contract.getID(), new GregorianCalendar(), "dialup", <mid>, true ) ); // Дальше можно добавить любой соус по желанию.
В общем случае написан для 4.5, в 4.6 может давать deprecated сообщение про использование дат через Calendar