Михаил Базаров Разработка на 1С-Битрикс Михаил Базаров

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

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

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

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

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

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

Для этого воспользуемся 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 можно поиграться с данными и сделать например так (слайдер всех этапов скидки с показом текущей):

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

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

Услуги Стоимость разработки на 1С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.
Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.
Индивидуальная разработка магазина
от 300 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Подробнее
Сайт на готовом решении 1С-Битрикс
от 70 000 руб. от 5-ти дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Подробнее
Мобильное приложение
от 300 000 руб. от 4-х недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Подробнее
Сайт компании
от 150 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Подробнее
Инфоресурс
от 170 000 руб. от 3-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Подробнее
Поддержка и доработки проектов
от 3 000 руб. от 1 часа

Выполнение доработок любой сложности. Поддержка, модернизация и расширение функционала существующих проектов. Решение задач: от мелких правок вёрстки до разработки новых модулей.

Подробнее

Включено в стоимость разработки:

  • Лицензия на 1С-Битрикс необходимой редакции, дополнительные модули, для реализации функционала и видео-инструкции по работе с готовым проектом
  • Оптимизация программной части проекта и конфигурации сервера под максимальную скорость работы. Базовая СЕО оптимизация и добавление сайта в поисковые системы.

Блог-note Заметки по 1С-Битрикс