forum.bitel.ru http://forum.bitel.ru/ |
|
Смена тарифа через веб. С учётным периодом. http://forum.bitel.ru/viewtopic.php?f=19&t=3314 |
Страница 1 из 1 |
Автор: | aardvark [ 11 дек 2009, 17:01 ] |
Заголовок сообщения: | Смена тарифа через веб. С учётным периодом. |
Итак простая задача смены тарифа через веб, моментально превратилась для меня в tarpit, когда стало необходимо применять новый тариф со дня +1 конец существующего учётного периода модуля Dialup. Казалось бы всё просто. Перехватываем из ChangeTariffByTaskEvent FromDate меняем её на день +1 конец учётного периода и всё шоколадно. Так? Оказалось всё не так просто. Последний день учётного периода можно получить (другого метода я просто не нашёл) из OpenPeriodRequestEvent getPeriodEnd... Возникает вопрос, какую сущность надо дёргать чтобы в переменной получить этот самый день конца учётного периода? Что читать куды бечь... паника-паника-паника. Можно конечно еще через GetChangeTariffDatesEvent setDateList поставить нужные нам даты учётного периода, но вот вопрос блин где ж и как ж их таки взять. |
Автор: | Администратор [ 11 дек 2009, 17:48 ] |
Заголовок сообщения: | Re: Смена тарифа через веб. С учётным периодом. |
http://dbinfo.bitel.ru/ Как минимум дату окончания последнего периода можно взять в таблице calculate_period_{mid} |
Автор: | aardvark [ 14 дек 2009, 13:21 ] |
Заголовок сообщения: | Re: Смена тарифа через веб. С учётным периодом. |
Проблема решилась через CalculatePeriodManager и GetChangeTariffDatesEvent следующим образом: Код: import bitel.billing.server.dialup.bean.event.*; import bitel.billing.server.dialup.bean.*; import bitel.billing.common.*; import java.util.*; cid = event.getContractID(); cpm = new CalculatePeriodManager(con, 3); num = cpm.getPeriodList(cid); numsize = num.size() - 1; date = cpm.getPeriodList(cid).get(numsize).getEnd().getTime(); date = (Date)date.clone(); date.setDate(date.getDate()+1 ); list = new ArrayList(); list.add(date); event.setDateList(list); Единственное, что напрягает в данном случае это deprecated методы setDate и getDate. Но GetChangeTariffDatesEvent.setDateList(), работает с java.util.Date, поэтому от этого пока никуда не уйти, пока не перепишут метод или моё ява-фу не наберет еще пару уровней. Администратор, спасибо, но брать для скрипта параметр из sql запроса это по-моему слегка громоздко. |
Автор: | aardvark [ 15 дек 2009, 17:32 ] |
Заголовок сообщения: | Re: Смена тарифа через веб. С учётным периодом. |
Код: import bitel.billing.server.dialup.bean.event.*; import bitel.billing.server.dialup.bean.*; import bitel.billing.common.*; import java.util.*; tu = new TimeUtils(); cid = event.getContractID(); cpm = new CalculatePeriodManager(con, 3); num = cpm.getPeriodList(cid); numsize = num.size() - 1; print("Size:"+ numsize); print("End period:"+cpm.getPeriodList(cid).get(numsize).getEnd().getTime()); date = cpm.getPeriodList(cid).get(numsize).getEnd().getTime(); date = (Date)date.clone(); date = tu.convertDateToCalendar(date); date = tu.getNextDay(date); date = tu.convertCalendarToDate(date); list = new ArrayList(); list.add(date); event.setDateList(list); Благодаря множественным подсказкам таки ушел от неправильных переменных. |
Автор: | snark [ 15 дек 2009, 18:11 ] |
Заголовок сообщения: | Re: Смена тарифа через веб. С учётным периодом. |
aardvark писал(а): Код: cid = event.getContractID(); cpm = new CalculatePeriodManager(con, 3); num = cpm.getPeriodList(cid); numsize = num.size() - 1; а м.б. стоит добавить что-то в духе этого: Код: if (num.size() =< 0) { weDontHaveRadiusPeriod(); } else { numsize = num.size() - 1; // берем последний элемент списка } а то ведь у клиента может и не быть периодов вообще |
Автор: | aardvark [ 17 дек 2009, 12:37 ] |
Заголовок сообщения: | Re: Смена тарифа через веб. С учётным периодом. |
snark угу надо. Пока такие скрипты(где нет учетного периода) вышибает эксепшенами. И в принципе обычного ретурна после сравнения должно хватить в этом случае. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |