Как вывести информацию по сгорающим баллам

Со сгоранием баллов можно работать двумя способами:

  • вывести информацию по конкретному начислению с помощью параметра CustomerBalanceChange - его можно использовать только в определённых сценариях;
  • вывести сгорающие за следующие N дней баллы с балльного счёта с помощью функции GetExpirationBalanceChanges - можно использовать и в массовых рассылках.

I. CustomerBalanceChange

Параметр доступен в письмах, отправляемых в сценариях по событию "изменение баланса" и "баланс клиента стал отрицательным".
Для нашей задачи важно первое событие.

Для вывода данных добавим к CustomerBalanceChange один из параметров:

  • ChangeAmount - сколько было начислено баллов изначально (часть из них может быть уже потрачена);
  • CustomerAction - открывает параметры по действию, с которым начислили баллы;
  • ExpirationDateTime - дата сгорания по московскому времени;
  • RemainingAmount - сколько осталось от начисления.

Для форматирования вывода данных даты и баллов можно воспользоваться функциями Formatdatetime (со стандартными или пользовательскими форматами) и FormatDecimal, для формы слова - функциями Forms или AppendForms.

Пример.

Настроен сценарий для отправки рассылки за семь дней до сгорания баллов.

Запускающее событие:

Снимок экрана 2021-10-12 в 15.04.42.png

Обратите внимание на то, что часть баллов уже потрачена.

Вёрстка письма:

${Formatdatetime(CustomerBalanceChange.CustomerAction.DateTime, "d")}
было начислено ${CustomerBalanceChange.ChangeAmount}приветственных 
${Forms(CustomerBalanceChange.ChangeAmount, "балл", "балла", "баллов")}.

${AppendForms(CustomerBalanceChange.RemainingAmount, "балл", "балла", "баллов")}из них сгорят 
${Formatdatetime(CustomerBalanceChange.ExpirationDateTime, "d.MM.yyyy")}

Клиент получает в письме:

12.10.2021 было начислено 100 приветственных баллов.
45 баллов из них сгорят 18.10.2021

II. GetExpirationBalanceChanges

Параметр доступен во всех письмах.

  • Вывод с помощью коллекции
    Recipient.GetBonusPointsAccount("Test").GetExpirationBalanceChanges(14), в которой:

    • GetBonusPointsAccount - функция, которая отбирает нужный балльный счёт;
    • Test - пример системного имени балльного счёта;
    • GetExpirationBalanceChanges - функция, которая принимает количество дней (N)
      и возвращает сгораемые в эти дни начисления баллов
  • С помощью функции Take можно ограничить количество начислений, которые выводим. Например, Recipient.GetBonusPointsAccount("Test").GetExpirationBalanceChanges(100).Take(1) вернёт коллекцию с самым "старым" начислением баллов.

  • Для вывода суммы сгорающих баллов используется set и параметр RemainingAmount.

Для этого задаём переменной значение 0, открываем цикл по коллекции начислений, в котором к этой же переменной прибавляем RemainigAmount, закрываем цикл и выводим сумму.

Например,

@{set sum=0}
@{for balanceChange in                    Recipient.GetBonusPointsAccount("Test").GetExpirationBalanceChanges(14)}
@{set sum = sum + balanceChange.RemainingAmount}
@{end for}
${sum}
  • Для вывода данных добавим к параметру:
    • ChangeAmount - количество баллов, которое изначально было начислено (часть из них может быть уже потрачена)
    • CustomerAction - открывает параметры по действию, с которым начислили баллы
    • ExpirationDateTime - дата сгорания по московскому времени
    • RemainingAmount - сколько осталось от начисления

Для форматирования вывода данных даты и баллов можно воспользоваться функциями Formatdatetime (с стандартными или пользовательскими форматами) и FormatDecimal, для формы слова - функциями Forms или AppendForms.

Пример.

Изменения баланса:

Снимок экрана 2021-10-12 в 15.22.24.png

Обратите внимание на даты сгорания и на то, что часть баллов уже потрачена.

Вёрстка письма:

За следующие две недели сгорят следующие начисления:
@{set sum=0}
@{for balanceChange in Recipient.GetBonusPointsAccount("Test").GetExpirationBalanceChanges(14)}
${AppendForms(balanceChange.RemainingAmount, "балл", "балла", "баллов")}
${Formatdatetime(balanceChange.ExpirationDateTime, "d")}
@{set sum = sum + balanceChange.RemainingAmount}
@{end for}
Сумма баллов: 
${sum}

Клиент получает в письме:

За следующие две недели сгорят следующие начисления:
20 баллов 06.11.2019
3 балла 02.11.2019
15 баллов 08.11.2019
60 баллов 09.11.2019
Сумма баллов: 98