Переход на понижающий тариф только со следующего месяца
Материал из BiTel WiKi
Версия от 16:00, 31 марта 2012; Barguzin2 (Обсуждение | вклад)
Необходимо ограничить пользователей переходить на понижающий тарифный план (тариф с меньшей абон.платой) только с 1го числа следующего месяца. Для реализации данной задачи в договор цепляется Скрипт поведения, обрабатывающий событие "Запрос дат с которых разрешена смена тарифа через Web". В основу алгоритма заложено назначение каждому тарифу характеристики "Вес". Чем больше абонплата на тарифе - тем больше вес ему ставится. Заодно решается вторая задача - невозможность перехода на устаревшие тарифные планы (они еще есть у кого-то и с них разрешено переходить на новые, но клиентам, подключившимся на новые ТП на устаревшие переходить нельзя). Для устаревших тарифов ставится вес 0. В данном скрипте таких ТП нет.
Собственно, сам скрипт:
import bitel.billing.server.util.*; import java.util.*; public void onEvent( event, setup, con, conSlave ) { //Заполняем карту (Id Тарифа, Вес) Map tariffMap = new HashMap(); //Группа тарифов 1 tariffMap.put(1,0); tariffMap.put(6,20); tariffMap.put(2,30); tariffMap.put(9,40); //Группа тарифов 2 tariffMap.put(55,10); tariffMap.put(56,20); tariffMap.put(57,30); tariffMap.put(58,40); //Другие группы //... ArrayList dateList = new ArrayList(); Calendar calendar = Calendar.getInstance(); Date date = new Date(); int fromTariffId = event.getFromTariffId(); int toTariffId = event.getToTariffId(); //Если вес для какого-то ТП не установлен - выходим. Будет использоваться дефолтный список. if( !(tariffMap.containsKey(fromTariffId)&&tariffMap.containsKey(toTariffId)) ){ print("Undefined TariffId in Map !!!"); return; } //Вес ТП = 0 На этот ТП нельзя переходить. if( tariffMap.get(toTariffId) == 0 ){ event.setDateList(dateList); return; } //Если переход на понижающий ТП (вес меньше), то формируем свой список if( tariffMap.get(toTariffId) < tariffMap.get(fromTariffId) ){ //Ставим первое число следующего месяца calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.add(Calendar.MONTH, 1); date = calendar.getTime(); dateList.add(date); event.setDateList(dateList); } //Если список не задан в скрипте, то используется по умолчанию согласно настроек группы тарифов }