Определение размера абонентской платы

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

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

Фрагмент скрипта, для определения размера абонентской платы по определенной услуге. Работает при простых абонплатах.

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;
			}
		}
	}
}
Личные инструменты