также, выдернул скрипт где то на вики. (спасибо автору, если кто узнает свое творение). уже точно не помню что и где допиливал. но в таком виде у меня работает норм. в тарифе стоит подневная абонка до текущего дня. стоимость указана за один день. скрипт выдергивает стоимость за один день и потом уже умножаю на 30. (мне было нужно, было именно так). скрипт рабоает уже около года.
держи, под себя думаю переделаешь.
Код:
// функция получения стоимости абонплаты за 30 дней.
private TarifNpayCost(int CID, String NPayMID, String npaysid, java.sql.Connection con, setup)
{
Calendar dt = new GregorianCalendar();
Calculator calculator = new Calculator();
calculator.setExecutingTime(dt);
calculator.setPreCalc();
calculator.initTask(setup, 0, "mid="+NPayMID);
String cid = Integer.toString(CID);
calculator.setCids(cid);
calculator.startTask();
if (!calculator.isCalcErrors())
{
BigDecimal planAccount = BigDecimal.ZERO;
Map planAccountMap = calculator.getCostCache().getContractAccounts();
for (Integer contractId : ru.bitel.common.Utils.stringToIntegerList(cid))
{
if(planAccountMap.get(contractId)!=null)
{
planAccount = planAccount.add((BigDecimal)planAccountMap.get(contractId));
}
}
CConstr = new Contract();
BUConstr = new BalanceUtils(con);
CConstr.setID(CID);
planAccountSumma = BUConstr.getAccountSumma(CConstr, dt, npaysid);
//print(planAccountSumma);
//print(planAccount);
cost = planAccount.subtract(planAccountSumma);
//print(cost);
npaycost = cost.multiply(new BigDecimal("30.00"));
//print(npaycost);
npaycost = npaycost.toBigInteger();
//print(npaycost);
return npaycost;
}
}