• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/archive/process/orderarchiveitem.php
  • Класс: BitrixSaleArchiveProcessOrderArchiveItem
  • Вызов: OrderArchiveItem::archive
public function archive()
{
	$r = $this->callEventOnBeforeOrderArchived($this->order);
	if (!$r->isSuccess())
	{
		return $r;
	}

	$result = $this->saveOrderArchive();
	if ($result->isSuccess())
	{
		$archivedOrderId = $result->getId();
		$basketItemIdList = array();
		foreach ($this->basketDataFields as $basketItem)
		{
			$additionBasketResult = $this->saveBasketItemArchive($basketItem, $archivedOrderId);
			if ($additionBasketResult->isSuccess())
			{
				$basketItemIdList[] = $additionBasketResult->getId();
			}
			else
			{
				$result->addErrors($additionBasketResult->getErrors());
				break;
			}
		}
	}

	if ($result->isSuccess())
	{
		$this->tryUnreserveShipments();

		$registry = SaleRegistry::getInstance(SaleRegistry::REGISTRY_TYPE_ORDER);
		/** @var SaleOrder $orderClass */
		$orderClass = $registry->getOrderClassName();

		$orderClass::deleteNoDemand($this->getId());
	}
	else
	{
		if (!empty($archivedOrderId))
		{
			InternalsOrderArchiveTable::delete($archivedOrderId);
		}

		if (!empty($basketItemIdList) && is_array($basketItemIdList))
		{
			foreach ($basketItemIdList as $archivedBasketItemId)
			{
				InternalsBasketArchiveTable::delete($archivedBasketItemId);
			}
		}
	}

	return $result;
}