Переход на понижающий тариф только со следующего месяца
Материал из BiTel WiKi
(Различия между версиями)
Barguzin2 (Обсуждение | вклад) (→Переход на понижающий тарифный план только со следующего месяца) |
Barguzin2 (Обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
- | Необходимо ограничить пользователей переходить на понижающий тарифный план (тариф с меньшей абон.платой) только с 1го числа следующего месяца. Для реализации данной задачи в договор цепляется Скрипт поведения, обрабатывающий событие "Запрос дат с которых разрешена смена тарифа через Web". В основу алгоритма заложено назначение каждому тарифу характеристики "Вес". Чем больше абонплата на тарифе - тем больше вес ему ставится. Заодно решается вторая задача - невозможность перехода на устаревшие тарифные планы (они еще есть у кого-то и с них разрешено переходить на новые, но клиентам, подключившимся на новые ТП на устаревшие переходить нельзя). Для устаревших тарифов ставится вес 0. | + | Необходимо ограничить пользователей переходить на понижающий тарифный план (тариф с меньшей абон.платой) только с 1го числа следующего месяца. Для реализации данной задачи в договор цепляется Скрипт поведения, обрабатывающий событие "Запрос дат с которых разрешена смена тарифа через Web". В основу алгоритма заложено назначение каждому тарифу характеристики "Вес". Чем больше абонплата на тарифе - тем больше вес ему ставится. Заодно решается вторая задача - невозможность перехода на устаревшие тарифные планы (они еще есть у кого-то и с них разрешено переходить на новые, но клиентам, подключившимся на новые ТП на устаревшие переходить нельзя). Для устаревших тарифов ставится вес 0. В данном скрипте таких ТП нет. |
Собственно, сам скрипт: | Собственно, сам скрипт: | ||
Строка 12: | Строка 12: | ||
Map tariffMap = new HashMap(); | Map tariffMap = new HashMap(); | ||
//Группа тарифов 1 | //Группа тарифов 1 | ||
- | tariffMap.put(1, | + | tariffMap.put(1,0); |
tariffMap.put(6,20); | tariffMap.put(6,20); | ||
tariffMap.put(2,30); | tariffMap.put(2,30); | ||
+ | tariffMap.put(9,40); | ||
//Группа тарифов 2 | //Группа тарифов 2 | ||
tariffMap.put(55,10); | tariffMap.put(55,10); |
Версия 16:00, 31 марта 2012
Необходимо ограничить пользователей переходить на понижающий тарифный план (тариф с меньшей абон.платой) только с 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); } //Если список не задан в скрипте, то используется по умолчанию согласно настроек группы тарифов }