Есть тариф со снятием абонплаты по тарифной опции:
Вложение:
abon_option.png [ 4.39 КБ | Просмотров: 3190 ]
В тарифе используются учётные периоды (учётный период может начинаться в любом дне месяца и длится не более 30 дней).
Тарифная опция привязана к началу учётного периода и она может быть деактивирована счётчиком (узлом диапазон трафика) ранее 30 дней.
По условиям тарифа, абонплата снимается в полном объеме один раз в течение учётного периода и именно в момент активации тарифной опции.
Проблема в том, что если период действия тарифной опции пересекает границу месяца, то абонплата снимается два раза, первая в месяце начала действия тарифной опции, вторая 1-го числа месяца завершения её действия.
Режим подневного снятия не подходит по условию единовременного снятия абонплаты. Да и всё-равно режим этот тоже к месяцам привязан.
Нельзя-ли ввести новый режим снятия абонплаты - "поучётнопериодный"?
Сейчас приходится лепить костыль в классе OptionTariffTreeNode, исключая использование метода ContractTariffOptionList.count из AbstractPeriodItemSet, в котором проверяется пересечение двух временных отрезков, а именно время опции и время месяца.
Второй вариант решения проблемы еще более универсальный на мой взгляд: добавить узел обработчика в тарифное дерево NPay (ну хотя-бы в 6.0 версии)!