Переход на понижающий тариф только со следующего месяца

Материал из BiTel WiKi

Перейти к: навигация, поиск

Необходимо ограничить пользователей переходить на понижающий тарифный план (тариф с меньшей абон.платой) только с 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);
	} 
 
	//Если список не задан в скрипте, то используется по умолчанию согласно настроек группы тарифов
}
Личные инструменты