Тема поднималась не раз, поиском по форуму и гуглом пользоваться умею =)
Как изменить стоимость в тарифной связке я знаю, вопрос в другом, после ручного изменения стоимости в БД, после перезапуска ядра происходит доначисление абонплаты всем пользователям, как этого избежать? Т.е. нужно что бы новая стоимость тарифа снималась только в новом расчетно периоде. Версия ядра: 5.2.1-008.
Смена стоимости услуги
Re: Смена стоимости услуги
Без костылей никак, есть варианты:rem_lex писал(а):Тема поднималась не раз, поиском по форуму и гуглом пользоваться умею =)
Как изменить стоимость в тарифной связке я знаю, вопрос в другом, после ручного изменения стоимости в БД, после перезапуска ядра происходит доначисление абонплаты всем пользователям, как этого избежать? Т.е. нужно что бы новая стоимость тарифа снималась только в новом расчетно периоде. Версия ядра: 5.2.1-008.
1) Отключить услугу и заново ее подключить с датой начала последняя секунда текущего РП (или в тех версиях где возможно первая секунда нового РП)
2) Поставить коэффициент = 0 и потом поменять стоимость (для новых версий биллинга)
3) Дождаться начала нового РП и изменить стоимость.
Re: Смена стоимости услуги
если честно, чет я не понял смысла таких манипуляций
а нет по случаю какого-нибудь хака в ядре, отключающего этот перерасчет, судя по ченжлогу это появилось где-то в 5.2.1-006
может у кого есть опыть, есть идея попробовать заблокировать счета и перезапустить ядро, при какой блокировке не будет списываться?
отключение и повторное подключение услуги, даже тем же РП приведет к повторному снятию АП в любом случаи жеMagnum72 писал(а): 1) Отключить услугу и заново ее подключить с датой начала последняя секунда текущего РП (или в тех версиях где возможно первая секунда нового РП)
судя по тому что не нашел у себя никаких коэффициентов, версия не та, или не там смотрел, что за коэффициенты и где они находятся?Magnum72 писал(а):2) Поставить коэффициент = 0 и потом поменять стоимость (для новых версий биллинга)
не вариант, тариф подключен нескольким тысячам пользователей у каждого свой РП, т.е. они все равномерно размазаны по месяцуMagnum72 писал(а):3) Дождаться начала нового РП и изменить стоимость.
а нет по случаю какого-нибудь хака в ядре, отключающего этот перерасчет, судя по ченжлогу это появилось где-то в 5.2.1-006
может у кого есть опыть, есть идея попробовать заблокировать счета и перезапустить ядро, при какой блокировке не будет списываться?
Re: Смена стоимости услуги
rem_lex писал(а):если честно, чет я не понял смысла таких манипуляцийотключение и повторное подключение услуги, даже тем же РП приведет к повторному снятию АП в любом случаи жеMagnum72 писал(а): 1) Отключить услугу и заново ее подключить с датой начала последняя секунда текущего РП (или в тех версиях где возможно первая секунда нового РП)судя по тому что не нашел у себя никаких коэффициентов, версия не та, или не там смотрел, что за коэффициенты и где они находятся?Magnum72 писал(а):2) Поставить коэффициент = 0 и потом поменять стоимость (для новых версий биллинга)не вариант, тариф подключен нескольким тысячам пользователей у каждого свой РП, т.е. они все равномерно размазаны по месяцуMagnum72 писал(а):3) Дождаться начала нового РП и изменить стоимость.
а нет по случаю какого-нибудь хака в ядре, отключающего этот перерасчет, судя по ченжлогу это появилось где-то в 5.2.1-006
может у кого есть опыть, есть идея попробовать заблокировать счета и перезапустить ядро, при какой блокировке не будет списываться?
1) Если в момент подключения поставить галочку "Перерасчет АП то ничего не спишется"
2) Да появилось в следующей версии биллинга
3) У тя получается около 30 расчетных периодов? Каждый день править свой РП не вариант?
Есть вариант попробовать увеличить до ненормально большого значение в поле unabon_period у соответствующих услуг в таблице periodic_service_links, и потом поменять стоимость услуги в бд, тогда после перезапуска, по идее досписания не произойдет, но это такой грязный хак что я бы сначала проверил это на тестовом биллинге, и покрутил бы на тесте еще часы вперед чтобы убедится, что в следующем периоде будет все нормально.
Re: Смена стоимости услуги
В общем, решение вышло таким, выставить всем безлимитный режим, сменить стоимость услуги, перезапустить ядро, потом откатить состояние счетов с безлимитным режимом и еще раз перезагрузить ядро.
Создаем временную таблицу:
Копируем состоя аккаунтов:
выставляем всем или нужным пользователям безлимитный режим
или выборочно
меняем стоимость услуг и перезагружаем ядро
возвращаем состояния счетов для безлимитных пользователей:
перезагружаем еще раз ядро.
Создаем временную таблицу:
Код: Выделить всё
CREATE TABLE `accounts_unlimited` (
`id` int(11) NOT NULL auto_increment,
`unlimited` int(11) default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
Код: Выделить всё
TRUNCATE TABLE accounts_unlimited;
INSERT INTO
accounts_unlimited
SELECT
a.id,
a.unlimited
FROM
accounts AS a
WHERE
a.is_deleted = 0 AND
a.unlimited = 1;
Код: Выделить всё
UPDATE `accounts` AS a SET `unlimited`='1'
Код: Выделить всё
UPDATE
`accounts` AS a
INNER JOIN account_tariff_link AS atl ON atl.account_id = a.id
INNER JOIN discount_periods AS dp ON dp.id = atl.discount_period_id
SET a.`unlimited`='1'
WHERE
a.is_deleted = 0 AND
atl.is_deleted = 0 AND
dp.is_expired = 0 AND
dp.start_date < UNIX_TIMESTAMP('2016-02-15 00:00:00')
возвращаем состояния счетов для безлимитных пользователей:
Код: Выделить всё
UPDATE
`accounts` SET `unlimited`='0'
WHERE
is_deleted = 0
;
UPDATE `accounts` AS a SET `unlimited`='1' WHERE `id` IN
(
SELECT
id
FROM
accounts_unlimited
)
;