|
|
Строка 40: |
Строка 40: |
| break; | | break; |
| } | | } |
- | }
| |
- | </source>
| |
- |
| |
- | Для 5.0
| |
- |
| |
- | <source lang="java">
| |
- | 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;
| |
- | }
| |
- | }
| |
- | }
| |
| } | | } |
| </source> | | </source> |
Фрагмент скрипта, для определения размера абонентской платы по определенной услуге.
Работает при простых абонплатах.
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;
}
}