forum.bitel.ru http://forum.bitel.ru/ |
|
[5.1] Защитить статус субдоговора от изменения супердоговора http://forum.bitel.ru/viewtopic.php?f=22&t=7059 |
Страница 1 из 1 |
Автор: | Wott [ 08 авг 2012, 09:57 ] |
Заголовок сообщения: | [5.1] Защитить статус субдоговора от изменения супердоговора |
Я что-то роюсь в поиске и никак не могу однозначно понять как решить стандартную проблему: Есть зависимые субдоговора,некоторые с арендной платой. По запросу абонента приостанавливаем отдельные субдоговора на разные периоды - на неделю в будущем например или прямо сейчас до запроса на включение и так далее. Абонплата корректно не снимается в период приостановки. Все работает. Есть должники, которые отключаются по балансу супердоговора вручную через монитор или скриптом по расписанию. Есть скрипт на приход платежа, который включает супердоговор если соответствующий баланс положительный. Все работает, но проблема в том что перетирается статус субдоговора "приостановлен" при выключении и включении супердоговора. Надо что бы установленный период статуса "приостановлен" при всех изменения супердоговора оставался неизменным. Как это сделать в 5.1 ? Нагородить скриптов с отменой дефолтной логики, разделяя периоды и статусы, что бы "приостановлен" остался неизменным ? проверять наследуется ли статус от супера, например смотреть есть ли пришедший статус на супере плюсминус минута ? Или приоритеты для статусов работают в новых версиях ? Или еще как ? |
Автор: | Феанор [ 08 авг 2012, 11:31 ] |
Заголовок сообщения: | Re: [5.1] Защитить статус субдоговора от изменения супердого |
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
|
Автор: | Wott [ 13 авг 2012, 15:03 ] |
Заголовок сообщения: | Re: [5.1] Защитить статус субдоговора от изменения супердого |
Если кому интересно ставим опцию 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"); } |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |