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

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

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

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

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.
Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.
Индивидуальная разработка магазина
от 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С-Битрикс