• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/compatible/basketcompatibility.php
  • Класс: BitrixSaleCompatibleBasketCompatibility
  • Вызов: BasketCompatibility::fillBasket
public function fillBasket(SaleBasket $basket, array $requestFields)
{
	$orderCompatibility = $this->getOrderCompatibility();

	/** @var SaleOrder $order */
	$order = $orderCompatibility->getOrder();

	$result = new SaleResult();

	if (empty($requestFields['BASKET_ITEMS']))
		return $result;

	$isStartField = $order->isStartField();

	$basketCodeList = array();

	$r = $this->parseBasketItems($basket, $requestFields['BASKET_ITEMS']);
	if (!$r->isSuccess())
	{
		$result->addErrors($r->getErrors());
		return $result;
	}

	$resultData = $r->getData();

	if (isset($resultData['BASKET']))
	{
		$basket = $resultData['BASKET'];
	}

	if (isset($resultData['BASKET_CODE_LIST']))
	{
		$basketCodeList = $resultData['BASKET_CODE_LIST'];
	}

	if (isset($resultData['BASKET_CHANGED']) && $resultData['BASKET_CHANGED'] === true)
	{
		$order->refreshVat();
	}

	if (!empty($basketCodeList) && is_array($basketCodeList))
	{
		foreach ($basketCodeList as $index => $basketCode)
		{
			DiscountCompatibility::setBasketCode($index, $basketCode);
		}
	}

	if ($isStartField)
	{
		/** @var SaleResult $r */
		$r = $order->doFinalAction(true);
		if (!$r->isSuccess())
		{
			$result->addErrors($r->getErrors());
		}
		else
		{
			if (($data = $r->getData())
				&& !empty($data) && is_array($data))
			{
				$result->setData($result->getData() + $data);
			}
		}
	}

	return $result;
}