BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 21 июн 2025, 23:16

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
СообщениеДобавлено: 18 фев 2013, 12:09 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
Есть скрипт, мне его кто то дал, или я его на форме нашел, не помню. Он нормально почти выдирает абонплату тарифа, но только тогда когда я ставлю следующий месяц, и соответственно если с нового месяца ставить другой тариф, то он уже будет по нему считать а не по действующиму. в явадок нет таких класов, помогите поправить скрипт чтоб он считал абонку по текущему месяцу.

Код:
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()) )  );
}

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2013, 15:31 
Не в сети

Зарегистрирован: 05 окт 2007, 13:36
Сообщения: 1073
Карма: 46
убери dt.add(Calendar.MONTH,1);
не помню точно, он тогда будет учитывать фактически начисленную абоненту. если да, то учитываешь ее тоже

_________________
интеграция биллинга с 1с http://bgbilling-1c.ru/


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2013, 17:11 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
тада получается сумма вместо 700 больше 12килорублей

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2013, 17:35 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
Это твой календарь:
Код:
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);


Короче - скорми калькулятору _правильную_ дату исходя из задачи и все начнет считаться.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2013, 18:08 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
исходя из задачи необходимо убрать dt.add(Calendar.MONTH, 1); но убирая это сумма увеличивается в разы

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2013, 18:12 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
Про дни месяца ты так и не прочитал :(


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2013, 18:56 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
а я так и не понял, что не так то?

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 фев 2013, 16:45 
Не в сети

Зарегистрирован: 08 окт 2009, 16:06
Сообщения: 186
Карма: 20
также, выдернул скрипт где то на вики. (спасибо автору, если кто узнает свое творение). уже точно не помню что и где допиливал. но в таком виде у меня работает норм. в тарифе стоит подневная абонка до текущего дня. стоимость указана за один день. скрипт выдергивает стоимость за один день и потом уже умножаю на 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;
    }

}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 фев 2013, 18:27 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
а с февралем как? =)

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 фев 2013, 18:36 
Не в сети

Зарегистрирован: 08 окт 2009, 16:06
Сообщения: 186
Карма: 20
у меня при активации учетный период создается равный 30 дням, не зависимо от того сколько дней в месяце. поэтому и сумму вычисляю за тридцать дней.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.042s | 36 Queries | GZIP : On ]