Cromeshnic писал(а):
Видимо TODO очень длинный

У меня кажется есть простое решение этой проблемы:
нужно просто
при формировании xml добавлять параметр group не только для активных тарифов, но и для будущих уже запланированных смен. Тогда напротив них появится форма для смены тарифа. Отменить смену будет нельзя, но можно будет перетереть будущую смену тарифа.
Проведем эксперимент (с)

v 4.6
Пусть есть группа тарифов с еженедельной сменой: Тариф1, Тариф2, Тариф3.
В текущий момент стоит Тариф1 с открытым периодом действия
1) Заходим в web-статистику, открываем страницу смены тарифов - видим форму выбора тарифов для смены. Даты: 01.02.10, 08.02.10 и т.д.
2) Заходим в клиент биллинга, открываем тот же договор, закрываем Тариф1 датой 07.02.10, добавляем Тариф2 датой 08.02.10 и открытой второй датой. Т.е. делаем всё так, как если бы мы сейчас сменили тариф на Тариф2 из web-статистики с 08.02.10.
3) В веб статистике не обновляя страницы меняем тариф на Тариф3 с даты 08.02.10.
4) Работает!
При этом сменить тариф таким образом можно только с даты не раньше последнего открытого тарифа из этой группы.
Т.о. нужно всего лишь выводить пользователям форму для смены напротив запланированных заданий - можно будет перетереть это задание. Если мы передумали менять тариф, то просто выставляем старый ещё раз.
Можете это добавить?
Опять же главный вопрос: что делать с теми действиями, которые мы сделали в скрипте на событии при переходе с тарифа на тариф. Вот мы сменили тариф, скрипт обработался. А потом, при смене тарифа который ещё не начинал действовать что делать?
1) игнорировать и не генерировать событие? неправильно - скрипт обработался для одного тарифа, а в итоге вскоре начнёт действовать совсем другой.
2) генерировать событие смены тарифа? но ведь оно не начало ещё действовать? И если мы натыкаем туда-сюда тарифы, и остановимся пусть даже на том же самом, то что в скриптах делать будем? Навыполняем действия, как узнать где была на самом деле не новая смена тарифа, а отмена?