forum.bitel.ru http://forum.bitel.ru/ |
|
Хитрый тарифный план http://forum.bitel.ru/viewtopic.php?f=22&t=6410 |
Страница 1 из 1 |
Автор: | vadius [ 03 фев 2012, 11:32 ] |
Заголовок сообщения: | Хитрый тарифный план |
Добрый день. bgbilling v.5.1 Может кто подскажет, возможно ли сделать такое с тарифными планами: Допустим имеются безлимитные тарифы, ТП1 (АП-500руб) ТП2 (АП-1000руб) ТП3 (АП-1500руб). Клиент подключается на ТП1, платит первоначальный взнос 5000 руб, и полгода может бесплатно пользоваться инетом. Но надо дать ему возможность, в течении этого полугода, переходить на более дорогой тариф (ТП2 или ТП3) с ежемесячной доплатой разницы между АП. Т.е если он перейдет с ТП1 на ТП2 он ежемесячно будет доплачивать 500руб, а при переходе с ТП1 на ТП3 1000руб. С ТП2 он может переходить только на ТП3. А после окончания полугодия, нужно оставить ему тот тарифный план на котором он находился в последнее время и снимать полную АП. |
Автор: | Phricker [ 03 фев 2012, 11:49 ] |
Заголовок сообщения: | Re: Хитрый тарифный план |
Только если через скрипты поведения на событии WEB смена тарифного плана |
Автор: | Phricker [ 03 фев 2012, 12:03 ] |
Заголовок сообщения: | Re: Хитрый тарифный план |
Цитата: Т.е если он перейдет с ТП1 на ТП2 он ежемесячно будет доплачивать 500руб, а при переходе с ТП1 на ТП3 1000руб. С ТП2 он может переходить только на ТП3. Он в любом случае будет оплачивать эту разницу. Она же списывается как абонплата. На вики есть пример http://wiki.bgbilling.ru/index.php/Смена_тарифного_плана_по_заданию_пользователя У меня работает вот так вот, но в течении недели - двух буду переделывать, т.к. поменял логику. Да и топорно у меня и было сработано на скорую руку Код: import bitel.billing.server.contract.bean.*; import bitel.billing.common.TimeUtils.*; import bitel.billing.server.tariff.bean.*; import bitel.billing.server.script.event.*; import bitel.billing.server.util.*; import java.util.*; import java.math.*; cid = event.getContractId(); cm = new ContractManager( con ); contract = cm.getContractById( cid ); fromDate = event.getFromDate(); event.setProcessed( true ); ctm = new ContractTariffManager( con ); cgm = new ContractTariffGroupManager ( con ); chm = new ChargeManager( con ); csm = new ContractServiceManager( con ); bu = new BalanceUtils( con ); endDate = new GregorianCalendar(); int[] tparray = { 0 }; int[][] tpmatrix = { { 0, 0 }, }; if ( cgm.isExistsContractTariffGroup(cid, 6) == true) { tparray = new int[]{ 54, 58, 5, 101, 191, 192, 193, 59, 103, 6, 194, 104, 2, 60, 105, 195, 106, 61, 13, 196, 63, 127, 22, 197, 149, 198, 129 }; tpmatrix = new int[][]{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},}; } else if ( cgm.isExistsContractTariffGroup(cid, 8) == true) { tparray = new int[]{ 76, 77, 130, 131, 79, 132, 133, 78, 134, 80, 135, 81, 136, 137 }; tpmatrix = new int[][] { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},}; } else if ( cgm.isExistsContractTariffGroup(cid, 9) == true) { tparray = new int[]{ 76, 77, 139, 142, 79, 144, 145, 78, 138, 80, 140, 81, 141, 143 }; tpmatrix = new int[][]{ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},}; } else if ( cgm.isExistsContractTariffGroup(cid, 10) == true) { tparray = new int[]{ 76, 77, 139, 142, 79, 144, 145, 78, 138, 80, 140, 81, 141, 143 }; tpmatrix = new int[][]{ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},}; } else if ( cgm.isExistsContractTariffGroup(cid, 11) == true) { tparray = new int[]{ 76, 58, 77, 191, 103, 108, 131, 194, 104, 237, 132, 110, 105, 195, 106, 134, 239, 196, 241, 243, 197 }; tpmatrix = new int[][]{ {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},}; } // текущий тарифный план currentTariff = event.getFromTariff(); if( currentTariff == null ) { error( "Current tariff not found" ); return; } tpid = currentTariff.getTariffPlanId(); print( "Current tariff: " + tpid ); tpIndex = -1; for ( i = 0; i < tparray.length; i++ ) { if ( tpid == tparray[i] ) { tpIndex = i; print( "index: " + tpIndex ); break; } } if( tpIndex == -1 ) { error("Wrong current tariff!" ); print ("Тарифная группа = " + tarifgrp); return; } ntpid = event.getToTariff().getId(); print( "New tariff: " + ntpid ); ntpIndex = -1; for ( i = 0; i < tparray.length; i++ ) { if ( ntpid == tparray[i] ) { ntpIndex = i; print( "index: " + ntpIndex ); break; } } if( ntpIndex == -1 ) { error("Wrong new tariff!" ); return; } //Подготавливаем дату fromDate = event.getFromDate(); Calendar fromDateCal = new GregorianCalendar(); fromDateCal.setTime(fromDate); int monthBegin = fromDateCal.get(GregorianCalendar.DATE); // если переход на более дешевый тариф. проверяем дату print("tpmatrix[" + tpIndex + "][" + ntpIndex + "]= " + tpmatrix[tpIndex][ntpIndex]); if(contract.getFc() == 0) { if( tpmatrix[tpIndex][ntpIndex] > 0 ) { if (monthBegin != 01) { event.setError( "Переход на тарифный план с меньшей абонплатой возможен ТОЛЬКО с начала месяца" ); } else if (monthBegin == 01 ) { // закрываем старый тариф днем ранее endDate.setTime( fromDate); print( "endDate: " + TimeUtils.formatDate( endDate ) ); endDate.add( Calendar.DAY_OF_MONTH, -1 ); currentTariff.setDate2( endDate ); ctm.updateContractTariff( currentTariff ); // устанавливаем новый тарифный план newPlan = new ContractTariff(); newPlan.setContractId( cid ); newPlan.setTariffPlanId( ntpid ); newPlan.setDate1( TimeUtils.convertDateToCalendar( fromDate ) ); newPlan.setComment( "Смена тарифа через личный кабинет" ); ctm.updateContractTariff( newPlan ); event.setMessage( "Тарифный план был успешно изменен"); } } //Если же tpmatrix возвращает 0 else if( tpmatrix[tpIndex][ntpIndex] == 0 ) { // закрываем старый тариф днем ранее endDate.setTime( fromDate); print( "endDate: " + TimeUtils.formatDate( endDate ) ); endDate.add( Calendar.DAY_OF_MONTH, -1 ); currentTariff.setDate2( endDate ); ctm.updateContractTariff(currentTariff); // устанавливаем новый тарифный план newPlan = new ContractTariff(); newPlan.setContractId( cid ); newPlan.setTariffPlanId( ntpid ); newPlan.setDate1( TimeUtils.convertDateToCalendar( fromDate ) ); newPlan.setComment( "Смена тарифа через личный кабинет" ); ctm.updateContractTariff( newPlan ); event.setMessage( "Тарифный план был успешно изменен"); } } else if(contract.getFc() == 1) { event.setError( "Смена тарифного плана через личный кабинет доступна только для физических лиц" ); } У меня другая логика. Запрещено переходить с более дорогого тарифного плана на более дешевый НЕ с начала месяца. Но можете взять за основу. И полностью запрещать переход на более дешевый тариф |
Автор: | vadius [ 03 фев 2012, 12:40 ] |
Заголовок сообщения: | Re: Хитрый тарифный план |
Спасибо, за оперативный ответ, буду смотреть. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |