Всё те же грабли всё там же.
Давно уже написал пару скриптов через "Доп действия договора":
- отключить сервисы перед переоформлением
- включить сервисы после переоформления
Вот описание из кода:
Код:
/**
* Метод реализует 2 доп действия договора:
* - Закрываем логины указанных экземпляром модулей Inet и Dialup на договоре и субах
* - Открываем их
* Логика следующая:
* Когда мы хотим переоформить договор, запускаем первое действие на нём.
* Все сервисы/логины закрываются, текущие сессии гасятся.
* Переоформляем.
* На новом договоре запускаем второе доп действие.
* Все сервисы/логины открываются, постепенно восстанавливаются соединения.
* Сервисы и логины закрываются статусом.
* При этом закрытые до первого действия сервисы и логины так и остаются закрытыми после открытия остальных.
* Это достигается путём установки "левых" id статусов (SERV_STATUS_CLOSED для Inet и DIALUP_STATUS_CLOSED для Dialup)
* В случае с Inet, у сервиса есть 3 стандартных статуса: 0,1,2 - Открыт, Закрыт, Заблокирован.
* Для Dialup - 2 статуса: 0,1 - Разрешен, Запрещен.
* В обоих модулях статус, отличный от 0, запрещает соединение.
* Т.е. я могу использовать любые id статусов, отличные от нуля и уже существующих, для собственных целей.
* При отключении сервисы и логины закрываются специальными статусами, только если текущий статус=0.
* При включении обратно сервисы и логины возвращаются в статус 0 только если текущий статус = 'специальный статус'.
* (*В случае модуля Inet также после закрытия сервиса происходит сначала закрытие текущих сессий, а затем принудительный сброс их.*)
* (на самом деле нет, т.к. это нормально не работает)
*/
- всё равно не помогает для Inet.
1. Закрываю сессию без разрыва на устройстве.
2. Ставлю закрытый статус сервису, чтобы новые сессии не авторизовались
3. Но когда сессия поднимается не через авторизацию, а из аккаунтинга (radius/flow), ей пофигу на статус сервиса. Т.е. нет вообще никакого способа гарантировать, что в процессе переоформления/переноса сервиса не возникнет ошибки "Этот сервис не может быть перенесен, так как на нем есть активные сессии." (не в ActionWrapContract, а уже в inetServWrap)
4. Половина субдоговоров остаётся непереоформленными, приходится делать вручную.
5. Боль, бессилие, фрустрация.
Я не прошу разработчиков прикручивать сложную логику на переоформление - я сам прикручу её скриптами.
Просто дайте мне способ сказать аккаунтингу: "вот этот сервис залочен сейчас - не поднимай на нём никаких сессий вообще".
Сейчас могу только придумать загадить сервис так, чтобы он его даже не находил: поменять устройство, дату и т.п.
Но это же потом переносить и обратно восстанавливать нужно будет...