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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Изменение API для версии 5.0)
Строка 40: Строка 40:
         break;
         break;
     }
     }
 +
}
 +
</source>
 +
 +
 +
 +
API тарифов значительно поменялось для Npay в версии 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>

Версия 05:21, 12 мая 2010

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

Работает при простых абонплатах.

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;
    }
}


API тарифов значительно поменялось для Npay в версии 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;
         }
      }
   }
}
Личные инструменты