• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/compatible/basketcompatibility.php
  • Класс: BitrixSaleCompatibleBasketCompatibility
  • Вызов: BasketCompatibility::appendBasketToOrder
static function appendBasketToOrder(SaleOrder $order, SaleBasket $basket)
{
	$result = new SaleResult();

	$orderBasketCollection = $order->getBasket();

	$shipmentCollection = $order->getShipmentCollection();
	$systemShipment = $shipmentCollection->getSystemShipment();
	$systemShipmentItemCollection = $systemShipment->getShipmentItemCollection();

	/** @var SaleBasketItem $basketItem */
	foreach ($basket as $basketItem)
	{
		$basketProperty = array();
		if ($basketPropertyCollection = $basketItem->getPropertyCollection())
		{
			$basketProperty = $basketPropertyCollection->getPropertyValues();
		}

		if ($orderBasketItem = $orderBasketCollection->getExistsItem($basketItem->getField('MODULE'), $basketItem->getField('PRODUCT_ID'), $basketProperty))
		{
			$fields = $basketItem->getFieldValues();
			$orderBasketItem->setFields(static::clearFields($fields));
		}
		else
		{
			/** @var SaleBasketItem $orderBasketItem */
			$orderBasketCollection->addItem($basketItem);
			$basketItem->setCollection($orderBasketCollection);


			$systemShipmentItemCollection->resetCollection($orderBasketCollection);
		}
	}

	/** @var SaleBasketItem $basketItem */
	foreach ($basket as $basketItem)
	{
		if ($systemShipment->getDeliveryId() > 0)
		{
			/** @var OrderCompatibility $orderCompatibilityClassName */
			$orderCompatibilityClassName = static::getOrderCompatibilityClassName();

			/** @var SaleShipment $shipment */
			$shipment = $orderCompatibilityClassName::getShipmentByDeliveryId($shipmentCollection, $systemShipment->getDeliveryId());

			if (!$shipment)
			{
				if ($service = SaleDeliveryServicesManager::getObjectById($systemShipment->getDeliveryId()))
				{
					/** @var SaleShipment $shipment */
					$shipment = $shipmentCollection->createItem($service);
				}
			}


			if ($shipment)
			{
				$shipmentItemCollection = $shipment->getShipmentItemCollection();

				if (!$shipmentItem = $shipmentItemCollection->getItemByBasketCode($basketItem->getBasketCode()))
				{
					$shipmentItem = $shipmentItemCollection->createItem($basketItem);
				}

				/** @var SaleResult $r */
				$r = $shipmentItem->setQuantity($basketItem->getQuantity());
				if (!$r->isSuccess())
				{
					$result->addErrors($r->getErrors());
				}
			}
		}
	}

	return $result;

}