• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/compatible/basketcompatibility.php
  • Класс: BitrixSaleCompatibleBasketCompatibility
  • Вызов: BasketCompatibility::setChildBundleCollection
private function setChildBundleCollection(SaleBasket $basket, array $basketItemList, SaleBasketItem $externalParentBasketItem = null)
{
	$order = null;

	$isExternalBasketParent = false;

	if ($externalParentBasketItem !== null)
	{
		if (!$externalParentBasketItem->isBundleParent())
		{
			throw new MainObjectException('basketItem not parent');
		}
		$isExternalBasketParent = true;
	}

	/** @var SaleBasketItem $item */
	foreach ($basketItemList as $item)
	{
		if ($item->isBundleChild() || (!$item->isBundleParent() && $isExternalBasketParent && $externalParentBasketItem !== null))
		{
			/** @var SaleBasketItem $parentBasketItem */
			$parentBasketItem = $item->getParentBasketItem();

			if (!$parentBasketItem && $externalParentBasketItem !== null)
			{
				$parentBasketItem = $externalParentBasketItem;
			}

			if ($parentBasketItem)
			{
				/** @var SaleBasket $bundleCollection */
				$bundleCollection = $parentBasketItem->createBundleCollection();

				if ($basket->getItemByBasketCode($parentBasketItem->getBasketCode()))
				{
					$bundleCollection->addItem($item);
				}
				else
				{
					$basket->addItem($item);
				}

				if ($order === null)
				{
					/** @var SaleBasket $basket */
					if (!$basket = $parentBasketItem->getCollection())
					{
						throw new MainObjectNotFoundException('Entity "Basket" not found');
					}

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

				if ($bundleCollection->getOrder() === null && $order instanceof SaleOrderBase)
					$bundleCollection->setOrder($order);
			}
		}
	}
}