Caribasius
3/14/2018 - 4:43 PM

Bitrix API скидка в корзине

Подсчет скидки на товары в корзине через API. CSaleDiscount::DoProcessOrder не описана в документации

<?
$dbBasketItems = CSaleBasket::GetList(
  array("ID" => "ASC"), 
  array(
    'FUSER_ID' => CSaleBasket::GetBasketUserID(),
    'LID' => SITE_ID,
    'ORDER_ID' => 'NULL'
  ),
  false,
  false,
  array(
    'ID', 'PRODUCT_ID', 'QUANTITY', 'PRICE', 'DISCOUNT_PRICE', 'WEIGHT', 'PRODUCT_PRICE_ID', 'MODULE', 'BASE_PRICE', 'LID' //!!!!! чтобы посчиталась скидка нужно выбрать все эти поля
  )
);

$allSum = 0;
$allWeight = 0;
$arItems = array();

while ($arBasketItems = $dbBasketItems->Fetch())
{   
  $allSum += ($arItem["PRICE"] * $arItem["QUANTITY"]);
  $allWeight += ($arItem["WEIGHT"] * $arItem["QUANTITY"]);
  
  // $arBasketItems['LAST_DISCOUNT'] = 'Y';
  
  $arItems[] = $arBasketItems;
} 
global $USER;

$arOrder = array(
  'SITE_ID' => SITE_ID,
  'USER_ID' => $USER->GetID(),
  'ORDER_PRICE' => $allSum,
  'ORDER_WEIGHT' => $allWeight,
  'BASKET_ITEMS' => $arItems
);

$arOptions = array(
  'COUNT_DISCOUNT_4_ALL_QUANTITY' => 'Y',
);

$arErrors = array();

CSaleDiscount::DoProcessOrder($arOrder, $arOptions, $arErrors);

$PRICE_ALL = 0;
$DISCOUNT_PRICE_ALL = 0;
$QUANTITY_ALL = 0;

foreach ($arOrder["BASKET_ITEMS"] as $arOneItem)
{
  $PRICE_ALL += $arOneItem["PRICE"] * $arOneItem["QUANTITY"];
  $DISCOUNT_PRICE_ALL += $arOneItem["DISCOUNT_PRICE"] * $arOneItem["QUANTITY"];      
  $QUANTITY_ALL += $arOneItem['QUANTITY'];
}

$result['PRICE_ALL'] = $PRICE_ALL;
$result['DISCOUNT_PRICE_ALL'] = $DISCOUNT_PRICE_ALL;
$result['QUANTITY_ALL'] = $QUANTITY_ALL;