Skip to content
  1. Компоненты
  2. msBonus2
  3. Кейсы
  4. Дополнительные бонусы за первый заказ на сайте

Дополнительные бонусы за первый заказ на сайте

Иногда нужно начислять юзеру баллы не за регистрацию (данный функционал есть в коробке), а за первый заказ на сайте. При чём, помимо основного начисления баллов за заказ (процент от стоимости) нужно начислить фиксированное количество баллов за первый заказ.

Данный кейс решает эту задачу.

Шаг 1

Создаём лексиконы:

  • msb2_logs_+first_order = Дополнительные баллы за первый заказ
  • msb2_logs_-first_order = Списание устаревших баллов за первый заказ

Второй лексикон нужен, если вы захотите добавить в системную настройку msb2_lifetime_for_bonus время жизни для бонусов типа first_order.

Шаг 2

Добавляем плагин и вешаем его на событие msOnChangeOrderStatus с приоритетом 99999997.

php
switch ($modx->event->name) {
  case 'msOnChangeOrderStatus':
    // Фиксированное количество баллов за первый заказ
    $additional_points = 2000;

    // Минимальная стоимость первого заказа
    $min_order_cost = 0;

    // Только заказы со статусом "Новый (1)"
    if ((int)$order->get('status') !== 1) {
      break;
    }

    // Its first order?
    $user_id = $order->get('user_id');
    if ($order->get('cost') < $min_order_cost || $modx->getCount('msOrder', ['user_id' => $user_id]) !== 1) {
      break;
    }
    $msb2 = $modx->getService('msbonus2', 'msBonus2',
        MODX_CORE_PATH . 'components/msbonus2/model/msbonus2/');
    $msb2->initialize($modx->context->key);
    $manager = $msb2->getManager();
    $manager->setPlus('first_order', $additional_points, $user_id, $order->get('id'), $user_id);

    break;
}