Модуль "Бонусный счет": відмінності між версіями

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
(Новая страница: «Модуль добавляет в биллинг 2 фичи (могут быть задействованы как обе, так и только одна): *…»)
 
м (Защищена страница «Модуль "Бонусный счет"» ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено то…)
(Немає відмінностей)

Версія за 09:47, 6 липня 2019

Модуль добавляет в биллинг 2 фичи (могут быть задействованы как обе, так и только одна):

  • Услуга, которая при завершении пополняет счет бонусным платежом
  • Отдельный бонусный счет. При пополнении основного счета, с бонусного, если на нем достаточно финансов, на основной счет будет переведена сумма, эквивалентная пополнению.

Бонусная услуга

Может быть применена в акциях «Пополни счет на 100$ и через 3 месяца на счет будет зачислено 110 $»: абонент пополняет счет на 100$. Баланс увеличивается на 100. Подключает услугу «Пополни счет на 100$ и через 3 месяца на счет будет зачислено 110 $». В результате со счета списывается 100$. Услуга через 3 месяца завершается и счет пополняется на 110$. Естественно, все параметры (деньги, время, комментарий) настраиваемы. При настройке услуги поставьте галку «Запретить клиентам продлевать эту услугу»

Бонусный счет

Создайте дополнительное поле:

Имя поля: Бонусный баланс
Имя поля в бд: _bonus_balance
Тип поля: деньги

Создайте услугу типа «Бонус при завершении»:

Имя услуги: С бонусного на основной
Стоимость: неважно (использоваться не будет)
Описание, которое будут видеть клиенты: Перевод с бонусного счета на основной (это будет в комментарии бонусного платежа)
Автопродление: не ставим галку
Запрет продления: ставим галку
Группы: не ставим ни одной галки!
Сумма: неважно (использоваться не будет)
Режим: неважно (использоваться не будет)
Срок действия: неважно (использоваться не будет)

В mysql:

DROP TRIGGER IF EXISTS `tr_bb_pays_insert`;

DELIMITER $$
CREATE TRIGGER tr_bb_pays_insert AFTER INSERT ON pays
    FOR EACH ROW
    IF NEW.mid > 0 AND NEW.cash > 0 AND NEW.category <> 2 THEN
    BEGIN
        DECLARE money FLOAT;
        SELECT IF(_bonus_balance >= NEW.cash, NEW.cash, _bonus_balance) INTO money
            FROM data0 WHERE uid = NEW.mid LIMIT 1;
        IF money > 0 THEN
            BEGIN
                UPDATE data0 SET _bonus_balance = _bonus_balance - money WHERE uid = NEW.mid LIMIT 1;
                INSERT INTO users_services SET uid=NEW.mid, service_id=98, next_service_id=0,
                    pay_id=0, tm_start=UNIX_TIMESTAMP(), tm_end=UNIX_TIMESTAMP()+2,
                    tags=CONCAT(',bonus_money=', money, ',');
            END;
        END IF;
    END;
    END IF;
$$
DELIMITER ;

Тестирование

  • В настройках абонента устанавливаем поле «Бонусный баланс», например, в 10$
  • Пополняем счет любым небонусным платежом на 2$
  • Основной баланс увеличится на 2$
  • Бонусный счет уменьшится на 2$
  • Через несколько секунд основной баланс увеличится еще на 2$
  • Появится бонусный платеж на 2$ с комментарием про перевод денег с бонусного на основной счет

Проверка, что с бонусного не спишется больше чем на нем есть:

  • Создаем платеж на 10$
  • Баланс увеличится на 10 + 8, а на бонусном счете станет 0$