Применение купонов Bitrix

Применение купонов Bitrix

Ни для кого не секрет, что в обновлении 12.5.0 модуля Торговый каталог появился такой инструмент как "Правила работы с корзиной". Несмотря на некоторую схожесть с функционалом "Скидки на товар", это совершенно иной механизм, и пересчет цены запускается для них отдельно. Остановимся подробнее на применение купонов "Правил работы с корзиной" и "Скидок на товар" с помощью API.

Применяется купон через метод CCatalogDiscountCoupon::SetCoupon($sCode)

Для актуализации цены и доступности товара из торгового каталога с учетом "Скидок на товар" используется метод:
CSaleBasket::UpdateBasketPrices(CSaleBasket::GetBasketUserID(), SITE_ID);

То есть,код для получения актуальной цены с учетом скидки , введенного купона ($sCode-код купона) выглядит как то так:
if (CCatalogDiscountCoupon::SetCoupon($sCode)) {
   CSaleBasket::UpdateBasketPrices(CSaleBasket::GetBasketUserID(), SITE_ID);
   $dbBasketItems = CSaleBasket::GetList (..)
}
А вот купоны "правил работы с корзиной" применяются с помощью метода CSaleDiscount::DoProcessOrder($arOrder, $arOptions, $arErrors);
if (CCatalogDiscountCoupon::SetCoupon($sCode)) {
   $dbBasketItems = CSaleBasket::GetList (..);

   while ($arItems = $dbBasketItems->Fetch()) {
      $arOrder['BASKET_ITEMS'][] = $arItems;
   }

   $arOrder['SITE_ID'] = SITE_ID;
   $arOrder['USER_ID'] = $USER->GetID();
   CSaleDiscount::DoProcessOrder($arOrder,array(),$arErrors);
}

После чего можно получить выборку записей их корзины с учетом введенных купнов
CSaleBasket::GetList(...) ....

P.S> можно воспользоваться подходом из компонента одношагового оформления заказа и получить корзину с учетом купонов следующим образом:

CBitrixComponent::includeComponentClass('bitrix:sale.basket.basket');

$basket = new CBitrixBasketComponent();
$basket->onIncludeComponentLang();

$basket->columns = $arColumns;
$basket->offersProps = $strOffersProps;

$basket->quantityFloat = (isset($_POST['quantity_float']) && $_POST['quantity_float'] == 'Y') ? 'Y' : 'N';
$basket->countDiscount4AllQuantity = (isset($_POST['count_discount_4_all_quantity']) && $_POST['count_discount_4_all_quantity'] == 'Y') ? 'Y' : 'N';
$basket->priceVatShowValue = (isset($_POST['price_vat_show_value']) && $_POST['price_vat_show_value'] == 'Y') ? 'Y' : 'N';
$basket->hideCoupon = (isset($_POST['hide_coupon']) && $_POST['hide_coupon'] == 'Y') ? 'Y' : 'N';
$basket->usePrepayment = (isset($_POST['use_prepayment']) && $_POST['use_prepayment'] == 'Y') ? 'Y' : 'N';

$res = $basket->recalculateBasket($_POST);

foreach ($res as $key => $value)
{
   $arRes[$key] = $value;
}

$arRes['BASKET_DATA'] = $basket->getBasketItems();
Рейтинг

Возврат к списку

Раздел Bitrix
(Codeblog)