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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Изменение API для версии 5.0)
Строка 1: Строка 1:
-
Фрагмент скрипта, для определения размера абонентской платы по определенной услуге.
+
Для версии 5.0, 5.1 Предтарификация с определением стоимости абонплат за будущий месяц.
-
 
+
-
Работает при простых абонплатах.
+
<source lang="java">
<source lang="java">
-
import java.sql.*;
+
import java.math.*;
-
import java.util.*;
+
import bitel.billing.server.npay.Calculator;
 +
import bitel.billing.common.TimeUtils;
-
import bitel.billing.server.contract.bean.*;
+
public void main(setup, con, conSlave)
-
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();
+
      Calendar dt = new GregorianCalendar();
-
    req.setRequestParam( "action", "calculate" );
+
      dt.set(Calendar.DAY_OF_MONTH ,31);
-
    req.setRequestParam( "sid", sid );
+
 
-
    // считаем как будто абонплата подключена весь месяц 
+
      Calculator calculator = new Calculator();
-
    req.setRequestParam( "month_days", 1 );          
+
      print(TimeUtils.convertCalendarToDateString(dt));
-
    req.setRequestParam( "period_days", 1 );
+
      calculator.setExecutingTime(dt);
-
             
+
      calculator.setPreCalc();
-
    tree.processRequest( req );
+
      calculator.initTask(setup, 0, "mid=16");
-
               
+
      calculator.setCids("12345");
-
    cost = (Float)req.getResponseParam( "cost" );              
+
      calculator.startTask();
-
    if( req.wasAccepted() &&
+
 
-
         cost != null )
+
      if (!calculator.isCalcErrors())
-
    {
+
      {
-
        print( cost );
+
        BigDecimal planAccount = BigDecimal.ZERO;
-
         break;
+
        Map planAccountMap = calculator.getCostCache().getContractAccounts();
-
    }
+
        for (Integer contractId : ru.bitel.common.Utils.stringToIntegerList("12345"))
 +
         {
 +
        if(planAccountMap.get(contractId)!=null){
 +
                    planAccount = planAccount.add((BigDecimal)planAccountMap.get(contractId));
 +
         }
 +
        }
 +
 
 +
      print(planAccount);
 +
      }
}
}
</source>
</source>
 +
http://forum.bgbilling.ru/viewtopic.php?f=16&t=4076
-
+
 
 +
Фрагмент скрипта, для определения размера абонентской платы по определенной услуге.
API тарифов значительно поменялось для Npay в версии 5.0
API тарифов значительно поменялось для Npay в версии 5.0
рабочий вариант
рабочий вариант
Строка 107: Строка 101:
       }
       }
   }
   }
 +
}
 +
</source>
 +
 +
 +
Для версии 4.6. Работает при простых абонплатах.
 +
 +
<source lang="java">
 +
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;
 +
    }
}
}
</source>
</source>

Версия 10:51, 29 июля 2010

Для версии 5.0, 5.1 Предтарификация с определением стоимости абонплат за будущий месяц.

import java.math.*;
import bitel.billing.server.npay.Calculator;
import bitel.billing.common.TimeUtils;
 
public void main(setup, con, conSlave)
{
      Calendar dt = new GregorianCalendar();
      dt.set(Calendar.DAY_OF_MONTH ,31);
 
      Calculator calculator = new Calculator();
      print(TimeUtils.convertCalendarToDateString(dt));
      calculator.setExecutingTime(dt);
      calculator.setPreCalc();
      calculator.initTask(setup, 0, "mid=16");
      calculator.setCids("12345");
      calculator.startTask();
 
      if (!calculator.isCalcErrors())
      {
        BigDecimal planAccount = BigDecimal.ZERO;
        Map planAccountMap = calculator.getCostCache().getContractAccounts();
        for (Integer contractId : ru.bitel.common.Utils.stringToIntegerList("12345"))
        {
        if(planAccountMap.get(contractId)!=null){
                     planAccount = planAccount.add((BigDecimal)planAccountMap.get(contractId));
        }
        }
 
      print(planAccount);
      }
}

http://forum.bgbilling.ru/viewtopic.php?f=16&t=4076


Фрагмент скрипта, для определения размера абонентской платы по определенной услуге. 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;
         }
      }
   }
}


Для версии 4.6. Работает при простых абонплатах.

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