Определение размера абонентской платы
Материал из BiTel WiKi
Версия от 11:01, 11 мая 2010; Amir (Обсуждение | вклад)
Фрагмент скрипта, для определения размера абонентской платы по определенной услуге.
Работает при простых абонплатах.
import java.sql.*; import java.util.*; import bitel.billing.server.contract.bean.*; import bitel.billing.server.tariff.*; import bitel.billing.server.util.*; // код договора cid = 455; // на какой момент смотреть тариф time = new GregorianCalendar(); // код услуги sid = 79; // код экземпляра модуля mid = 66; tts = new ContractManager( con ).getRealtimeTariffTreeSet( cid, time, "npay", mid, true ); // перебор тарифов в порядке позиций сначала персональных, потом глобальных for( TariffModuleTree tree : tts.getTreeList( time ) ) { req = new TariffRequest(); req.setRequestParam( "action", "calculate" ); req.setRequestParam( "sid", sid ); // считаем как будто абонплата подключена весь месяц req.setRequestParam( "month_days", 1 ); req.setRequestParam( "period_days", 1 ); tree.processRequest( req ); cost = (Float)req.getResponseParam( "cost" ); if( req.wasAccepted() && cost != null ) { print( cost ); break; } }
Для 5.0
import java.sql.Connection; import java.util.Calendar; import java.util.Collections; import java.util.GregorianCalendar; import bitel.billing.common.TimeUtils; import ru.bitel.bgbilling.kernel.tariff.tree.server.TariffModuleTree; import ru.bitel.bgbilling.kernel.tariff.tree.server.TariffTreeBuilder; import ru.bitel.bgbilling.kernel.tariff.tree.server.TariffTreeSet; import ru.bitel.bgbilling.modules.npay.tariff.server.NPayTariffContext; import ru.bitel.bgbilling.modules.npay.tariff.server.NPayTariffRequest; import ru.bitel.bgbilling.modules.npay.tariff.server.NPayTariffRequest.NPayServiceCost; import ru.bitel.bgbilling.server.util.Setup; // код договора cid = 455; // на какой момент смотреть тариф time = new GregorianCalendar(); // код услуги sid = 79; // код экземпляра модуля mid = 66; Calendar startMonth = TimeUtils.getStartMonth( time ); Calendar endMonth = TimeUtils.getEndMonth( time ); int daysInMonth = startMonth.getActualMaximum( Calendar.DAY_OF_MONTH ); NPayTariffContext ctx = new NPayTariffContext( Setup.getSetup().getModuleSetup( mid ), con, mid, startMonth, endMonth, String.valueOf( cid ), null ); TariffTreeSet result = TariffTreeBuilder.getInstance().getRealtimeTariffTreeSet( con, cid, startMonth, "npay", mid, 0, 0 ); for( TariffModuleTree tariffPeriod : result.getTreeList( time ) ) { NPayTariffRequest req = new NPayTariffRequest( mid, cid, sid ); req.setInfoEnable( true ); req.setConnection( con ); req.setAccountingMonthDays( daysInMonth ); // эта дата нужна, если режимы тарификации помещены в период req.setTime( startMonth ); req.setServiceCost( sid, Collections.singletonList( new NPayServiceCost( sid, startMonth, endMonth, startMonth, endMonth, 1 ) ) ); tariffPeriod.execute( req, ctx ); if( req.isAccepted() ) { for( NPayServiceCost cost : req.getServiceCost().get( sid ) ) { if( cost.cost != null ) { print( cost ); break; } } } }