• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/archive/recovery/firstschemebuilder.php
  • Класс: BitrixSaleArchiveRecoveryFirstSchemeBuilder
  • Вызов: FirstSchemeBuilder::buildOrder
public function buildOrder()
{
	$archivedOrderData = [];
	$orderFields = $this->entitiesFields['ORDER'];
	if (!empty($this->packedOrder))
	{
		$archivedOrderData = $this->packedOrder->unpack();
		if (is_array($archivedOrderData['ORDER']))
		{
			$orderFields = array_merge($archivedOrderData['ORDER'], $orderFields);
		}
	}

	$this->order = ArchiveOrder::create($orderFields['LID'], $orderFields['USER_ID'], $orderFields['CURRENCY']);
	$this->order->setPersonTypeId($orderFields['PERSON_TYPE_ID']);

	$registry = SaleRegistry::getInstance(SaleRegistry::REGISTRY_TYPE_ORDER);

	/** @var SaleBasket $basketClassName */
	$basketClassName = $registry->getBasketClassName();

	$basket = $basketClassName::create($orderFields['LID']);
	$this->order->setBasket($basket);
	$basketItemsFields = $this->entitiesFields['BASKET'];
	if (!empty($this->packedBasketItems))
	{
		foreach ($this->packedBasketItems as $basketArchiveId => $basketItem)
		{
			/** @var PackedField $basketItem*/
			$basketItemData = $basketItem->unpack();
			if (is_array($basketItemData))
			{
				$basketItemsFields[$basketArchiveId] = array_merge($basketItemsFields[$basketArchiveId], $basketItemData);
			}
		}
	}
	$basketItemsMap = $this->riseBasket($basketItemsFields);

	$this->order->initFields($orderFields);
	if (is_array($archivedOrderData['PAYMENT']) && !empty($archivedOrderData['PAYMENT']))
	{
		$this->risePayment($archivedOrderData['PAYMENT']);
	}
	if (is_array($archivedOrderData['SHIPMENT']) && !empty($archivedOrderData['SHIPMENT']))
	{
		$basketItemStoreMap = [];
		if (is_array($basketItemsFields))
		{
			foreach ($basketItemsFields as $item)
			{
				$basketItemStoreMap[$item['ID']] = $item['SHIPMENT_BARCODE_ITEMS'];
			}
		}

		$this->riseShipment($archivedOrderData['SHIPMENT'], $basketItemsMap, $basketItemStoreMap);
	}

	if (is_array($archivedOrderData['PROPERTIES']))
	{
		$this->riseOrderProperties($archivedOrderData['PROPERTIES']);
	}
	if (is_array($archivedOrderData['DISCOUNT']))
	{
		$this->riseDiscount($archivedOrderData['DISCOUNT']);
	}
	return $this->order;
}