Администратор писал(а):
никак не сделать
ну почему же?
чтобы и снимать абонентку и предоставлять включенный в нее траффик "пропорционально периоду" достаточно повесить на событие "запрос учетного периода" скрипт вида:
Код:
import bitel.billing.server.contract.bean.*;
import bitel.billing.common.*;
import java.util.*;
contractServiceManager = new ContractServiceManager(con);
cid = event.getContractID();
date = (Calendar)event.getRequestDate();
dateStart = (Calendar)date.clone();
dateEnd = (Calendar)date.clone();
// дата окончания расчетного периода = последнее число текущего месяца, 23:59:0.0
// след. 2 строчки - то же что и: TimeUtils.moveToEndOfMonth(dateEnd)
dateEnd.set(Calendar.DAY_OF_MONTH, 1);
dateEnd.set(Calendar.DAY_OF_MONTH, dateEnd.getActualMaximum(Calendar.DAY_OF_MONTH));
dateEnd.set(Calendar.HOUR_OF_DAY, 23);
dateEnd.set(Calendar.MINUTE, 59);
dateEnd.set(Calendar.SECOND, 0);
dateEnd.set(Calendar.MILLISECOND, 0);
// дата начала расчетного периода
event.setPeriodStart(dateStart);
// дата окончания расчетного периода
event.setPeriodEnd(dateEnd);
print("RADIUS Period Request:");
print("Contract ID: " + cid);
print("Period Start: " + TimeUtils.format(dateStart, "dd.MM.yyyy HH:mm:ss.SSS"));
print("Period End: " + TimeUtils.format(dateEnd, "dd.MM.yyyy HH:mm:ss.SSS"));
serviceList = contractServiceManager.getContractServiceList(cid, date);
serviceDate = TimeUtils.convertCalendarToDate(dateStart);
for (ContractService service : serviceList) {
// подключение услуг датой начала расчетного периода
service.setDateFrom(serviceDate);
contractServiceManager.updateContractService(service.getID().toString(), service);
print("Service ID: " + service.getServiceID() + " start: " + TimeUtils.formatDate(dateStart));
}
event.setProcessed(true);
который проставит услугам даты:
Код:
дата начала действия услуги = дата начала учетного периода = дата 1-го подключения в текущем месяце
и все будет прекрасно работать (у меня уже оч. давно так работает), при этом рулить всем можно прямо в дереве тарифов
проще говоря - подключился в текущем месяце - получи _все_ "пропорционально периоду" ...
но это верно только если тариф действет в рамках одного месяца, если же происходит его смена, то тут надо писать скрипт на смену тарифа в котром можно пойти, двумя путями:
- удалить учетный период за текущий месяц что приведет, при 1-м подключении на новом тарифе, к повторному срабатыванию скрипта запроса учетного периода
- изменить даты услуг в договоре на даты действия тарифа
правда тут, из за изменения дат, есть вариант отката абон. платы, если она начисляется модулем, а не скриптом (прежняя наработка будет удалена и начислена новая)
так что я полагаю Ваше утверждение "никак не сделать" не верно
поправьте меня если я не прав
Администратор писал(а):
проще разрещать смену раз в месяц только, а то головняка много.
полностью согласен!
P.S. я не стал делать конструкцию вида:
- получить список услуг
- проставить как даты как начала так и даты окончания действия всем услугам
хотя идеологичсеки это верно (позволит удобно производить перерасчет), но не хотелось создавать в новом учетном периоде список тех же самых услуг, опять проставлять им даты, опять создавать список услуг ... в общем - не хотелось плодить простыню одних и тех же услуг которые различаются только датой
P.P.S. все это верно для 4.5 где и работает