BiTel

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

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: 08 авг 2012, 09:57 
Не в сети

Зарегистрирован: 30 июл 2012, 07:55
Сообщения: 20
Карма: 0
Я что-то роюсь в поиске и никак не могу однозначно понять как решить стандартную проблему:

Есть зависимые субдоговора,некоторые с арендной платой.
По запросу абонента приостанавливаем отдельные субдоговора на разные периоды - на неделю в будущем например или прямо сейчас до запроса на включение и так далее. Абонплата корректно не снимается в период приостановки. Все работает.

Есть должники, которые отключаются по балансу супердоговора вручную через монитор или скриптом по расписанию.
Есть скрипт на приход платежа, который включает супердоговор если соответствующий баланс положительный.

Все работает, но проблема в том что перетирается статус субдоговора "приостановлен" при выключении и включении супердоговора. Надо что бы установленный период статуса "приостановлен" при всех изменения супердоговора оставался неизменным. Как это сделать в 5.1 ?

Нагородить скриптов с отменой дефолтной логики, разделяя периоды и статусы, что бы "приостановлен" остался неизменным ?
проверять наследуется ли статус от супера, например смотреть есть ли пришедший статус на супере плюсминус минута ?

Или приоритеты для статусов работают в новых версиях ?

Или еще как ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 авг 2012, 11:31 
Не в сети
Клиент

Зарегистрирован: 30 мар 2009, 17:51
Сообщения: 431
Карма: 23
Wott писал(а):
Я что-то роюсь в поиске и никак не могу однозначно понять как решить стандартную проблему:

Есть зависимые субдоговора,некоторые с арендной платой.
По запросу абонента приостанавливаем отдельные субдоговора на разные периоды - на неделю в будущем например или прямо сейчас до запроса на включение и так далее. Абонплата корректно не снимается в период приостановки. Все работает.

Есть должники, которые отключаются по балансу супердоговора вручную через монитор или скриптом по расписанию.
Есть скрипт на приход платежа, который включает супердоговор если соответствующий баланс положительный.

Все работает, но проблема в том что перетирается статус субдоговора "приостановлен" при выключении и включении супердоговора. Надо что бы установленный период статуса "приостановлен" при всех изменения супердоговора оставался неизменным. Как это сделать в 5.1 ?

Нагородить скриптов с отменой дефолтной логики, разделяя периоды и статусы, что бы "приостановлен" остался неизменным ?
проверять наследуется ли статус от супера, например смотреть есть ли пришедший статус на супере плюсминус минута ?

Или приоритеты для статусов работают в новых версиях ?

Или еще как ?


у меня сделано вот так (отключаются супердоговор установкой статуса отключен). Статус отключен на субдоговор опр типа (где висит этот скрипт поведения) не проходит. Можно сделать так чтобы проверял не newStatus как у меня а originalStatus...

Код:
import bitel.billing.server.util.*;
import java.sql.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.script.bean.event.*;
import bitel.billing.server.contract.bean.ContractStatusManager.ContractStatusManager4Script;
 
public void onEvent( event1, setup, con, conSlave )
{
   ContractSetStatusLogicEvent event = (ContractSetStatusLogicEvent)event1;
   print( "do change status!" );
 
   // старый статус
   ContractStatus status = event.getStatus1();
   // Приходящий статус
   ContractStatus newStatus = event.getStatus2();
   // Самый что ни на есть оригинальный статус
   ContractStatus originalStatus = event.getOriginalStatus();
    if(newStatus.getStatus()==2)
   {
      print ("Disable overwrite");
      newStatus.setDateTo(TimeUtils.getPrevDay(newStatus.getDateFrom()));
      event.setProcessed( true );
      return;
   }
   return;
}


ну и плюс в конфиге

Код:
use.event.set.status.logic=1


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13 авг 2012, 15:03 
Не в сети

Зарегистрирован: 30 июл 2012, 07:55
Сообщения: 20
Карма: 0
Если кому интересно

ставим опцию depend.subcontract.status.change=0, при этом автоматически статус субдоговоров не трогается при изменении статуса супер-договоров. поэтому нужен скрипт на "Статус договора изменен", который проверяет супердоговр ли, берет список субдоговоров и по ним проверяет и обновляет статус, при этом не трогает ( с учетом статусов в будущем ) если "приостановлен"

Субдоговора со статусом приостановлен включаются ручками ( или другим скриптом :) )

Код:
import bitel.billing.server.contract.bean.*;
import java.util.*;
import ru.bitel.billing.server.util.*;
import java.math.BigDecimal;
import bitel.billing.common.KernelConst;
import bitel.billing.common.TimeUtils.*;
import java.text.SimpleDateFormat;
 
public void onEvent( event, setup, con, conSlave ) {
   print( "Событие изменения статуса договора" );
   int cid = event.getContractId();

   Calendar now = Calendar.getInstance();
 
   cm = new ContractManager( con );
   cstm = new ContractStatusManager( con );
   c = cm.getContractById( cid );
 
   int newStatus = event.getStatus().getStatus();

   print("Текущий статус: " + c.getStatus());
   print("Новый статус: " + newStatus+"\n");

   if (!c.isSuper()){
      print("Договор является субдоговором => ничего не делаем");
      return;
   }
 
 
//Все тесты прошли - можно открывать клиента:

// По всем субдоговорам:
   String contracts = c.getDependSubList();
   print ("Субдоговора: "+c.getDependSubList());
   List cid_list = Arrays.asList(contracts.split(","));

   List statusList,newstatusList;
   dateFormat = new SimpleDateFormat("dd.MM.yyyy");

for(String current_cid : cid_list) {

   c = cm.getContractById( Integer.parseInt(current_cid) );
   print("\nПроверям контракт "+c.getTitle());

   if (c.isIndependSub()) {
      print("Договор с независимым балансом - пропускаем");
      continue;
   }

   statusList =  cstm.getStatusList(Integer.parseInt(current_cid));

// Если последний и единственный на текущее время статус договора - "приостановить".
// пропускаем выполнение.
   if(statusList.size() == 1 && ((ContractStatus)statusList.get(0)).getStatus() == 4){
      print("Договору имеет статус = Приостановить. Оставляем его как есть.\n");
      continue;
   }
//----------------------------------------------------------------------//
//Строим список будущих статусов договоора.
//Тут будем менять текущий и будущие статусы на активен, а период оставляем тот же.
//Не будем изменять статус в этом листе, если статус=приостановлен
   newstatusList = new ArrayList();
   for (ContractStatus s : statusList) {
      cStatus=s.getStatus();
      // Если будущйи статус не Приостановить - обновляем статус
      if( cStatus != 4 ){
         s.setStatus(newStatus);

         Date date = bitel.billing.common.TimeUtils.convertCalendarToDate(now);
         if(s.getDateFrom().before(date)){s.setDateFrom(date);}
         s.setComment("Статус изменен скриптом 'Изменение статуса договора'");
         newstatusList.add(s);
      }
       print("Статус: "+cStatus+" Будущий статус: "+s.getStatus()+" "+((s.getDateFrom()==null)?' ':dateFormat.format(s.getDateFrom()))+"-"+((s.getDateTo()==null)?' ':dateFormat.format(s.getDateTo())) );
   }

   print("Меняем статусы в соответствии с новым списком статусов");
   for (ContractStatus s2 : newstatusList){
      cstm.changeStatus(s2,0,true);
   }
}
   print("Done");
}


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

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


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

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


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

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