Телеграм: @bazarow_ru Почта: mihail@bazarow.ru

Показать пользователю накопительную скидку за все сделанные заказы, из модуля маркетинга

Просмотров: 2622

Задача: показать, текущему авторизованному, пользователю сумму всех выполненных заказов и процент накопительной скидки- доступной на данный момент.

В модуле маркетинга создана вот такая накопительная скидка:

Накопительная скидка

В целом, задача решается легко: нам нужно получить все заказы текущего пользоватетеля и сопоставить попадание их суммы в диапазон накопительной скидки:

Получить сумму всех выполненных заказов пользователя

Для этого воспользуемся API методом Order::getList класса \Bitrix\Sale\Order, который дастн нам всю информацию обо всех заказах (вообще всех).

С помощью select отбираем, только, стоимость заказа (PRICE), так как вся остальная информация нам не нужна. И с помощью фильтра отбираем заказы текущего пользователя, которые находятся в статусе N (Выполнен)


use Bitrix\Main\Loader;
Loader::includeModule("sale");
Loader::includeModule("catalog");

$bunusPrice = 0;
$dbRes = \Bitrix\Sale\Order::getList([
    'select' => [
        'PRICE'
    ],
    'filter' => [
        '=USER_ID' => $USER->GetID(),
        '=STATUS_ID' => 'N',
    ]
]);
while ($item = $dbRes->fetch()) {
    $bunusPrice += (int)$item['PRICE'];
}
echo $bunusPrice; 

Таким образом, в переменной $bunusPrice, получаем сумму всех выполненных заказов текущего пользователя

Получить данные о накопительной скидке через API

Теперь, получим все параметры накопительной скидки c ID=1, методом CCatalogDiscountSave::GetList


$arProductDiscounts = CCatalogDiscountSave::GetList(
     array("SORT" => "ASC"),
     array(
        "ACTIVE" => "Y",
        'ID' => "1"
    ),
    false,
    false,
    array("ID", "NAME", "VALUE", "RANGE_FROM")
);
while ($Discounts = $arProductDiscounts->Fetch()) {
    $arResult['ALL_DISCOUNTS'][] = $Discounts;
}

Теперь, в массиве $arResult['ALL_DISCOUNTS'] все параметры накопительной скидки, самое главное диапазоны применения скидок, в VALUE и RANGE_FROM.

Выводим текущую скидку и потраченную сумму

Осталось самое простое, найти в массиве $arResult['ALL_DISCOUNTS'] конкретную скидку для переменной $bunusPrice

Просто, прогоняем массив через foreach с индексом и внутри него находим текущий диапазон, смещаясь по индексу.


foreach ($arResult['ALL_DISCOUNTS'] as $k => $discount) {
    if (
        ($arResult['USER_ODREDS_SUM'] >= $discount['RANGE_FROM']) &&
        ($arResult['USER_ODREDS_SUM'] < $arResult['ALL_DISCOUNTS'][$k - 1]) &&
        ($arResult['USER_ODREDS_SUM'] < $arResult['ALL_DISCOUNTS'][$k + 1])
    ) {
    echo 'Ваша скидка:' . $discount['VALUE'];
    echo 'Вы потратили:' . $bunusPrice;
    }
}
Да можно было воспользоваться более простым вариантом for или while для поиска диапазона в массиве. Но, решил оставить больше гибкости для компонента. Если понадобится, допишу в комментарии.

В общем-то и все. Проверка на статус заказа вполне надежна, так как сюда не попадут отмененные заказ. Если нужна сверх надежность (хотя избыточна), можно получить сумму из оплаченных заказов (которые в статусе "Оплачен" и не "Возврат") классом \Bitrix\Sale\PaymentCollection

Компонент: вывод текущей скидки пользователю

На базе написанного выше, сделал набросок-компонент "Бонусная система" - название не очень удачное, но переименовать можете сами. Языковые файлы не создавал, названия параметров прямо в .parameters.php

Скачать архив с компонентом

После добавления, компонент попадет в "Служебные -> Пользователь -> Бонусная система" (хотя, не плохо переместить его в "магазин")))

Компонент накопительная скидка битрикс

Параметров у компонента всего 3:

  • Выбор шаблона. Работает как и все, можно копировать
  • Выбор скидки. Если у вас их несколько сюда подтянутся все
  • Выбор статуса заказа. Не очень нужно, так как компонент имеет смысл только на выполненных заказах. Но, если захотите его расширить, может пригодиться.
Компонент накопительная скидка битрикс

Сам шаблон просто, без верстки. Но распечатав массив $arResult можно поиграться с данными и сделать например так (слайдер всех этапов скидки с показом текущей):

Компонент накопительная скидка битрикс

Далее можно развивать компонент как угодно, добавлять новые данные в массив и .... в общем фантазировать как угодно

Написать первый комментарий:

Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
Нажимая кнопку "Отправить" вы соглашаетесь
с политикой конфиденциальности и обработки персональных данных.

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Вывести все разделы в которых находится элемент инфоблока Просмотров: 14937 Если нужно вывести все разделы, со всей доступной информацией о них, внутри элемента инфоб... Свойство: привязка к Яндекс:Картам - вывести из нескольких элементов ... Просмотров: 18667 Предположим, что у вас есть инфоблок со свойством "Привязка к яндекс картам". В этом инфоб... Запретить указание количества товаров, добавляемого в корзину, в опре... Просмотров: 83 Задача состоит в том, чтобы запретить указание количества товара, добавляемого в корзину, ... Добавление своих полей в почтовые шаблоны Битрикс Просмотров: 45782 Иногда нужно внести свои поля в почтовые шаблоны битрикс. Например: добавить имя и номе... Заполнить поля пользователя из свойства заказа, на примере ФИО Просмотров: 1984 При создании заказа покупатель заполняет поле "ФИО". Необходимо скопировать эти данные в п... Заполнить картинки разделов каталога из картинок товаров Просмотров: 944 Задача: в каталоге, разделы и подразделы выводятся в виде плитки над товарами, с картинкам... Вывести разделы инфоблока по первым буквам не меняя структуру каталог... Просмотров: 2503 Например: у нас есть инфоблок с большим количеством разделов. И мы хотим, на сайте разбить... Рассылка новинок каталога в автоматическом режиме Просмотров: 1868 Что бы реализовать рассылку новинок каталога на email-ы пользователей, можно воспользовать... Базовая защита "Битрикс виртуальная машина" от DDoS атак. Просмотров: 5856 Данный способ защиты не панацея, и скорее всего не спасет от профессиональной DDoS атаки, ... Индивидуальные цены в 1С-Битрикс: в каталоге и при оформлении заказа Просмотров: 6057 В этой заметке постараюсь описать процесс реализации индивидуальных цен, для пользователей... Отфильтровать новости в Битрикс за заданный период Просмотров: 16692 Иногда, нужно отфильтровать элементы (новости например) по дате в Битрикс, с помощью компо... Сортировать товары по названию, цене и дате поступления в каталоге Би... Просмотров: 41067 Достаточно часто заказчик просит вывести сортировку по цене, новым поступлениям и названию... Бонус за выполненный заказ на внутренний счет пользователя Просмотров: 5077 Задача: после того как заказ, в интернет-магазине, перешел в статус "Выполнен" начислить п... Умный фильтр только на последнем уровне разделов каталога. Просмотров: 11682 Если в разработаываемом магазине или в принципе в каталоге на Битрикс, вы выводите умный ф... Установка вебсервера на Apple M1 (нативный ARM стек), оптимизированны... Просмотров: 7405 Появилась задачка, установить стек MAMP (macOS, Apache, MYSQL, PHP) на рабочий ноутбук с п... Получение местоположений через API Битрикс c поиском по select. Просмотров: 23193 Если нужно получить список городов из модуля "Местоположения" можно воспользоваться API Би... Настройка выгрузки товаров в Яндекс Маркет с сайта Битрикс Просмотров: 37972 Настройка выгрузки в Яндекс маркет в формате yml, выполняется достаточно просто, кроме одн... Автоматическая загрузка каталогов из csv файлов в Битрикс Просмотров: 11797 Если требуется настроить автоматический импорт каталогов из csv файлов, от поставщиков. В... Валидация пароля и подтверждения при регистрации в битрикс Просмотров: 15267 Встала задачка сделать валидацию пароля и его подтверждения в стандартной форме регистраци... Многосайтовость битрикс на разных доменах и поддоменах Просмотров: 63137 Часто спрашивают "как настроить многосайтовость Битрикс на разных доменах", решил записать...