Запретить оплату с внутреннего счета, если в корзине есть определенный товар

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

Задача: пользователи могут оплачивать заказы с бонусного счета (штатный внутренний счет), но если в корзине  есть определенные товары - то в этом заказе нужно запретить оплату бонусами.

Запретить оплату с внутреннего счета, если в корзине е сть определенный товар

В моем случае, товары которые запрещены к оплате бонусами имеют свойство "ZAPRESHCHENO_OPLACHIVAT_BONUSAMI" со значением "Да". Если такой товар есть в корзине, на странице оформления заказа, в компоненте "bitrix:sale.order.ajax" нужно изменять параметр:
"PAY_FROM_ACCOUNT" c "Y" на "N"
таким образом оплата с внутреннего счета отключится для всего заказа.

Получаем корзину пользователя на API

На странице оформления заказа, до вызова компонента bitrix:sale.order.ajax нужно получить всю корзину пользователя и в найденных товарах найти свойство ZAPRESHCHENO_OPLACHIVAT_BONUSAMI

Если такой товар есть, просто переключаем параметр "Разрешить оплату с внутреннего счета:" на N

CModule::IncludeModule("sale");
$dbBasketItems = CSaleBasket::GetList(
    array("NAME" => "ASC", "ID" => "ASC"),
    array(
        "FUSER_ID" => CSaleBasket::GetBasketUserID(),
        "LID" => SITE_ID,
        "ORDER_ID" => "NULL"
    ),
    false,
    false,
    array(
        "PRODUCT_ID"
    )
);
while ($basketItem = $dbBasketItems->Fetch()) {
    $rsPropertyValues = \CIBlockElement::getProperty(
        4, // Инфоблок
        $basketItem['PRODUCT_ID'],
        false,
        false,
        array(
                'CODE' => 'ZAPRESHCHENO_OPLACHIVAT_BONUSAMI'
        )
    );
    // Товары в корзине c запретом оплаты бонусами
    while ($arPropertyValue = $rsPropertyValues->Fetch()) {
        if ($arPropertyValue['VALUE'] === 'Да') {
            $hidePayBounus = 'Y';
        }
    }
}
if ($hidePayBounus == 'Y') {
    $PAY_FROM_ACCOUNT = 'N';// Если такие есть прячем оплату бонусами
} else {
    $PAY_FROM_ACCOUNT = 'Y'; // Если такие есть прячем оплату бонусами
}
 $APPLICATION->IncludeComponent(
    "bitrix:sale.order.ajax",
    "new_order",
    array(
       ... параметры компонента ...
        "PAY_FROM_ACCOUNT" => $PAY_FROM_ACCOUNT,
        ... параметры компонента ...
    ),
    false
);
  • С помощью CSaleBasket::GetList получили текущую корзину. Из данных нам нужен только ID товара.
  • С помощью CIBlockElement::getPropert получили свойство "ZAPRESHCHENO_OPLACHIVAT_BONUSAMI"
  • Если найден товар со значением "Да", полностью отключили параметр "PAY_FROM_ACCOUNT"

Вывести оповещение в корзине

На всякий случай, что бы у пользователя не было вопросов, в корзине выведем оповещение. Проделываем тоже самое в файле mutator.php шаблона корзины:

foreach ($this->basketItems as $basketItem) {
    $rsPropertyValues = \CIBlockElement::getProperty(
        4, // Инфоблок
        $basketItem['PRODUCT_ID'],
        false,
        false,
        array('CODE' => 'ZAPRESHCHENO_OPLACHIVAT_BONUSAMI')
    );

    while ($arPropertyValue = $rsPropertyValues->Fetch()) {
        if ($arPropertyValue['VALUE'] === 'Да') {
            $totalData['BASKET_ITEM_NO_BONUS_SHOW'] = 'Y';
        }
    }
}

Если такой тавар найден будет существовать переменная BASKET_ITEM_NO_BONUS_SHOW. Воводим ее в файле basket-total.php:

{{#BASKET_ITEM_NO_BONUS_SHOW}}
Обратите внимание: в заказе присутствут товары на которые не действует оплата бонусами.
Вы можете оформить такие товары отдельным заказом, что бы применить бонусы к остальным
{{/BASKET_ITEM_NO_BONUS_SHOW}}

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 5-ти недель

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

Запуск сайта на готовом решении

от 100 000 руб. от 7-ми дней

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

Мобильное приложение

от 500 000 руб. от 1-го месяца

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

Сайт компании

от 350 000 руб. от 1-го месяца

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

Инфресурс

от 400 000 руб. от 5-ти недель

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

Лечение сайтов от вирусов

от 40 000 руб. от 2-х дней

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