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

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

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

В моем случае, товары которые запрещены к оплате бонусами имеют свойство "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С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.

Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.

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

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

  • Лицензия и модули

    Лицензия на «1С-Битрикс» нужной редакции, дополнительные модули и видео-инструкции по работе с готовым проектом.

  • Скорость и SEO

    Оптимизация кода и сервера под быструю загрузку, базовая SEO-оптимизация и добавление сайта в поисковые системы.

Блог-note

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