forum.bitel.ru http://forum.bitel.ru/ |
|
Разблокировка по достаточному платежу http://forum.bitel.ru/viewtopic.php?f=19&t=7742 |
Страница 1 из 1 |
Автор: | skyb [ 18 фев 2013, 12:09 ] |
Заголовок сообщения: | Разблокировка по достаточному платежу |
Есть скрипт, мне его кто то дал, или я его на форме нашел, не помню. Он нормально почти выдирает абонплату тарифа, но только тогда когда я ставлю следующий месяц, и соответственно если с нового месяца ставить другой тариф, то он уже будет по нему считать а не по действующиму. в явадок нет таких класов, помогите поправить скрипт чтоб он считал абонку по текущему месяцу. Код: import java.math.*;
import bitel.billing.server.contract.bean.*; import bitel.billing.server.tariff.bean.*; import bitel.billing.server.script.event.*; import bitel.billing.server.ipn.bean.*; import bitel.billing.common.KernelConst; import java.util.*; import java.text.*; import java.math.BigDecimal; import java.math.RoundingMode; import bitel.billing.server.util.*; import ru.bitel.bgbilling.server.util.*; import java.sql.*; import bitel.billing.server.admin.eventbus.*; import bitel.billing.server.dialup.bean.busevent.*; import java.math.*; import bitel.billing.server.npay.Calculator; import bitel.billing.common.TimeUtils; private double getCost(int cid) { Calendar dt = new GregorianCalendar(); dt.add(Calendar.MONTH,1); dt.set(Calendar.DAY_OF_MONTH ,dt.getActualMaximum(Calendar.DAY_OF_MONTH)); Calculator calculator = new Calculator(); print(TimeUtils.convertCalendarToDateString(dt)); calculator.setExecutingTime(dt); calculator.setPreCalc(); calculator.setActiveFromDate( dt ); setup = ru.bitel.bgbilling.server.util.Setup.getSetup(); calculator.initTask(setup, 0, "mid=4"); calculator.setCids(""+cid); print(""+cid); calculator.startTask(); print (calculator.isCalcErrors()); BigDecimal planAccount = BigDecimal.ZERO; if (!calculator.isCalcErrors()) { Map planAccountMap = calculator.getCostCache().getContractAccounts(); planAccount = ru.bitel.common.Utils.maskNull((BigDecimal)planAccountMap.get(cid)); } res =planAccount.doubleValue()*(dt.getActualMaximum(Calendar.DAY_OF_MONTH)-1.3); return res; } public void onEvent( event, setup, con, conSlave ) { print("cost =" +getCost(event.getContractId())); event.setSumma( new BigDecimal( getCost(event.getContractId()) ) ); } |
Автор: | Akhmat [ 18 фев 2013, 15:31 ] |
Заголовок сообщения: | Re: Разблокировка по достаточному платежу |
убери dt.add(Calendar.MONTH,1); не помню точно, он тогда будет учитывать фактически начисленную абоненту. если да, то учитываешь ее тоже |
Автор: | skyb [ 18 фев 2013, 17:11 ] |
Заголовок сообщения: | Re: Разблокировка по достаточному платежу |
тада получается сумма вместо 700 больше 12килорублей |
Автор: | snark [ 18 фев 2013, 17:35 ] |
Заголовок сообщения: | Re: Разблокировка по достаточному платежу |
Это твой календарь: Код: Calendar dt = new GregorianCalendar(); Тут ты к календарю добавляешь 1 месяц (чтобы считало следующий): Код: dt.add(Calendar.MONTH, 1); Тут ты устанавливаешь текущий день месяца в последний день месяца: Код: dt.set(Calendar.DAY_OF_MONTH ,dt.getActualMaximum(Calendar.DAY_OF_MONTH)); Тут уже считаешь на основе своего календаря: Код: calculator.setExecutingTime(dt); ... calculator.setActiveFromDate(dt); Короче - скорми калькулятору _правильную_ дату исходя из задачи и все начнет считаться. |
Автор: | skyb [ 18 фев 2013, 18:08 ] |
Заголовок сообщения: | Re: Разблокировка по достаточному платежу |
исходя из задачи необходимо убрать dt.add(Calendar.MONTH, 1); но убирая это сумма увеличивается в разы |
Автор: | snark [ 18 фев 2013, 18:12 ] |
Заголовок сообщения: | Re: Разблокировка по достаточному платежу |
Про дни месяца ты так и не прочитал ![]() |
Автор: | skyb [ 18 фев 2013, 18:56 ] |
Заголовок сообщения: | Re: Разблокировка по достаточному платежу |
а я так и не понял, что не так то? |
Автор: | braek-neck [ 28 фев 2013, 16:45 ] |
Заголовок сообщения: | Re: Разблокировка по достаточному платежу |
также, выдернул скрипт где то на вики. (спасибо автору, если кто узнает свое творение). уже точно не помню что и где допиливал. но в таком виде у меня работает норм. в тарифе стоит подневная абонка до текущего дня. стоимость указана за один день. скрипт выдергивает стоимость за один день и потом уже умножаю на 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; } } |
Автор: | skyb [ 28 фев 2013, 18:27 ] |
Заголовок сообщения: | Re: Разблокировка по достаточному платежу |
а с февралем как? =) |
Автор: | braek-neck [ 28 фев 2013, 18:36 ] |
Заголовок сообщения: | Re: Разблокировка по достаточному платежу |
у меня при активации учетный период создается равный 30 дням, не зависимо от того сколько дней в месяце. поэтому и сумму вычисляю за тридцать дней. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |