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/