Тот скрипт будет работать только при простых тарифах. И вообще довольно низкоуровневая штука получается. Если знаете, что делаете, то для 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;
}
}
}
}
Цитата:
/**
* @param serviceId Код услуги
* @param serviceStart Начало услуги
* @param serviceEnd Конец услуги
* @param date1 Начало услуги начиная от тарифицируемого месяца, т.е минимум - первое число этого месяца
* @param date2 Конец услуги заканчивая тарифицируемого месяца, т.е максимум - последнее число этого месяца
* @param amount Количество
*/
public NPayServiceCost( final int serviceId, final Calendar serviceStart, final Calendar serviceEnd,
final Calendar date1, final Calendar date2, final long amount )
{
API тарифов значительно поменялось для Npay (и поменяется для Phone в 5.1).