forum.bitel.ru
http://forum.bitel.ru/

Определить режим списания АП [5.1]
http://forum.bitel.ru/viewtopic.php?f=16&t=4524
Страница 1 из 1

Автор:  mikos [ 07 сен 2010, 22:09 ]
Заголовок сообщения:  Определить режим списания АП [5.1]

Добрый день.
Подскажите пожалуйста, как в 5.1 определить, какой режим списания АП (подневной или помесячный) у абонента?
Спасибо.

Автор:  Cromeshnic [ 08 сен 2010, 07:26 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

Посмотреть в дереве его тарифного плана?

Автор:  mikos [ 08 сен 2010, 12:57 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

Cromeshnic писал(а):
Посмотреть в дереве его тарифного плана?

Как я это делал в 4.6 - не получается, null там. А как это делается правильно в 5.1?

Автор:  skyb [ 08 сен 2010, 13:06 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

а можно скрины?

Автор:  mikos [ 08 сен 2010, 14:20 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

skyb писал(а):
а можно скрины?

Какие скрины? Код? В 4.6 этой функцией доставал,а тут нет.

Код:
public String getTarifCalcMode( cid, Calendar date )
{
   SID = 1;
   MID = 2;

   cost_month = null;
   cost_day = null;
   cost_type = null;
   calc_mode = null;
   calc_type = null;

   // поиск параметров абонплаты
   tts = new ContractManager( con ).getRealtimeTariffTreeSet( cid, date, "npay", MID, true );

   print("DEBUG: cid="+cid+" tts="+tts);

   for( TariffModuleTree tree : tts.getTreeList( date ) )
   {
      req_cost = new TariffRequest();
      req_cost.setRequestParam( "action", "calculate" );
      req_cost.setRequestParam( "sid", SID );
      req_cost.setRequestParam( "month_days", 1 );
      req_cost.setRequestParam( "period_days", 1 );
      req_cost.setRequestParam( "time",  date );
      tree.processRequest( req_cost );
      cost_month = (Double)req_cost.getResponseParam( "cost" );
      cost_type = req_cost.getResponseParam( "cost_type" );
 
      req_calc_mode = new TariffRequest();
      req_calc_mode.setRequestParam( "action", "reset" );
      req_calc_mode.setRequestParam( "sid", SID );
      req_calc_mode.setRequestParam( "time",  date );
      tree.processRequest( req_calc_mode );
      calc_mode = (String)req_calc_mode.getResponseParam( "calc_mode" );
      calc_type = req_calc_mode.getResponseParam( "calc_type" );
   };

   print("DEBUG: cid="+cid);
   print("DEBUG: cost_month="+cost_month);
   print("DEBUG: calc_mode="+calc_mode);
 
   if (cost_month == null || calc_mode == null)
   {
      error ("Параметры абонплаты не найдены");
      return "";
   };

   return calc_mode;

}

Автор:  skyb [ 08 сен 2010, 14:46 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

тьфу блин, запутали, вы бы написали что как это скриптом вытянуть, а то как посмотреть...в тарифе в дереве, а скриптом я хз

Автор:  Cromeshnic [ 08 сен 2010, 14:55 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

+1, я тоже думал глазами посмотреть.

В 5.0 к запросу на тарификацию добавились ещё тарифные опции. Посмотрите декомпилером в коде.

Автор:  mikos [ 08 сен 2010, 15:00 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

Cromeshnic писал(а):
+1, я тоже думал глазами посмотреть.

В 5.0 к запросу на тарификацию добавились ещё тарифные опции. Посмотрите декомпилером в коде.


Может сотрудники компании лучше скажут как :) Декомпилер, код - как-то уж серьезно больно :)

Автор:  mikos [ 08 сен 2010, 19:32 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

Ну ответьте плиз кто нибудь? Второй день абонентов не можем отключить - скрипты не работают. Обновились называется... :(
Сумму абонплаты как получить понятно. Сейчас это стало удобнее. Но вот каким образом посмотреть какой именно тариф у абонента - с подневным или помесячным снятием -- не понятно. Это нужно для того, чтобы одним скриптом, делать проверку как тех, так и других абонентов, запуская скрипт каждый день, а не раз в месяц.
Может конечно можно сделать два скрипта, но все равно абонентов надо как-то идентифицировать. Хоть по группам раскидывай...

Автор:  mikos [ 08 сен 2010, 19:55 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

Похоже я отстал от жизни и не научился читать доки...

http://bgbilling.ru/v5.1/doc/ch16s07.html

Т.е. никаких скриптов не надо? Биллинг сам этой задачей будет проверять порог и в случае нехватки средств для снития АП, отключать договор?

Автор:  skyb [ 09 сен 2010, 03:50 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

О_о вы бы вначале научились задавать вопросы, а потом получали бы на них правельные ответы. :) а то только через несколько постов только стало понятно что вам нужно.
Да, нечего больше не нужно, функционал дебитовых абонплат работает замечательно, сам использую и доволен/
http://wiki.bgbilling.ru/index.php/%D0% ... 1%81%D0%B0
вот в догонку, мне было нужно, мож и вам понадобиться :)

Автор:  mikos [ 09 сен 2010, 12:30 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

skyb писал(а):
О_о вы бы вначале научились задавать вопросы, а потом получали бы на них правельные ответы. :) а то только через несколько постов только стало понятно что вам нужно.
Да, нечего больше не нужно, функционал дебитовых абонплат работает замечательно, сам использую и доволен/
http://wiki.bgbilling.ru/index.php/%D0% ... 1%81%D0%B0
вот в догонку, мне было нужно, мож и вам понадобиться :)


Согласен - какой вопрос, такой и ответ :D

Судя по выдержке из той же документации

Цитата:
При приходе платежа и открытии договора производится переначисление абонентских плат до текущей даты с учётом нового статуса.


Теперь биллинг и договора сам после внесения платежа открывает?

PS: За ссылочку спасибо - пригодиться. Правда раньше статуст "приостановлен" не обязательно должен был быть из-за нехватки средств. Но по сути пойдет и такая схема.

Автор:  Cromeshnic [ 09 сен 2010, 12:51 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

mikos писал(а):
Теперь биллинг и договора сам после внесения платежа открывает?

Да. У меня тоже работает - нареканий нет.

mikos писал(а):
Правда раньше статуст "приостановлен" не обязательно должен был быть из-за нехватки средств.

В дебетовых абонплатах договор закрывается статусом "закрыт".

Автор:  skyb [ 09 сен 2010, 12:52 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

да, биллинг по приходу будет сам разблокировать. Статус там закрыт, а не приостановлен :)
опередил ))))

Автор:  mikos [ 09 сен 2010, 12:59 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

Отлично. Спасибо ребят!

Автор:  restart [ 17 сен 2010, 17:50 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

Cromeshnic писал(а):
В 5.0 к запросу на тарификацию добавились ещё тарифные опции. Посмотрите декомпилером в коде.

Ай-яй-яй :)

Автор:  skyb [ 17 сен 2010, 18:23 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

Наоборот для развития биллинга помогаем вам! зы я недекомпилю

Автор:  dimOn [ 20 сен 2010, 12:39 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

а ну не разводить тут опенсорс :facepalm:

Автор:  Cromeshnic [ 20 сен 2010, 13:20 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

Ну, а что делать, если в документации нет, а хочется "определить режим списания АП"? :)

Автор:  Phricker [ 20 сен 2010, 13:42 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

Cromeshnic писал(а):
Ну, а что делать, если в документации нет, а хочется "определить режим списания АП"? :)

задать вопрос на форуме? :D

Автор:  mikos [ 27 дек 2010, 01:17 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

И все таки - как из скрипта узнать какой режим АП стоит - помесячный или подневной?

Автор:  mikos [ 27 апр 2011, 20:29 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

UP - снова актуально.

Есть абонент. У него тариф. Надо в скрипте узнать какой тип списания у этого тарифа - подневной или помесячный?

Автор:  Cromeshnic [ 28 апр 2011, 07:11 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

Попробуйте так:

Код:
      ContractManager contractManager = new ContractManager(con);
      TariffTreeSet tts = contractManager.getRealtimeTariffTreeSet(cid, Calendar.getInstance(), "npay", mid, true);
      if(null==tts){
         return result;
      }
      TariffSetEntry tse = tts.getTreeEntry(Calendar.getInstance());
      if(null==tse){
         return result;
      }
      TariffModuleTree mtree = tse.getTreeForDate(Calendar.getInstance());
      if(null==mtree){
         return result;
      }

      //Получаем id дерева
      int treeid = mtree.getTreeId();      //tariff_tree.id
      int mtree_id=0;      //module_tariff_tree.id
      int mtree_parent_id=0; //module_tariff_tree.id
      PreparedStatement ps;
      ResultSet rs;
      
      String query = "select id, parent_tree from module_tariff_tree where tree_id=? and mid=?";
      try {
         ps = con.prepareStatement(query);
         ps.setInt(1,treeid);
         ps.setInt(2,mid);
         rs = ps.executeQuery();
         if(rs.next()){
            mtree_id = rs.getInt(1);
            int tmp_parent_tree_id = rs.getInt(2); //tariff_tree.id
            rs.close();
            //получаем по tmp_parent_tree_id -> mtree_parent_id
            if(tmp_parent_tree_id>0){
               ps.setInt(1,tmp_parent_tree_id);
               ps.setInt(2,mid);
               rs = ps.executeQuery();
               if(rs.next()){
                  mtree_parent_id = rs.getInt(1);
               }
               rs.close();
            }
         }
         ps.close();
      } catch (SQLException e) {
         log.error(e.getMessage(), e);
      }


      //Выгребаем нужные узлы дерева модуля с кодом mid (включая унаследованные)
      // - Ищем узел услуги с кодом sid
      int service_node_id = 0;
      query = "select id, type from mtree_node where (type=\"day_mode\" or type=\"month_mode\" or type=\"year_mode\") and (mtree_id = ? or mtree_id = ?) and instr(data,\"sid&"+sid+"\")>0";
      try {
         ps = con.prepareStatement(query);
         ps.setInt(1, mtree_id);
         ps.setInt(2, mtree_parent_id);
         rs = ps.executeQuery();
         if(rs.next()){
            service_node_id = rs.getInt(1);
            type = rs.getString(2);
         }
         rs.close();
      } catch (SQLException e) {
         log.error(e.getMessage(), e);
      }


Ну только instr(data,\"sid&"+sid+"\") надо переделать, чтобы при поиске, скажем, услуги 44 не попадалась услуга 444.

Автор:  mikos [ 29 апр 2011, 21:53 ]
Заголовок сообщения:  Re: Определить режим списания АП [5.1]

Спасибо, примерно понял как выковырнуть.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/