• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/orderbase.php
  • Класс: BitrixSaleOrderBase
  • Вызов: OrderBase::delete
static function delete($id)
{
	$result = new Result();

	$registry = Registry::getInstance(static::getRegistryType());
	/** @var OrderBase $orderClassName */
	$orderClassName = $registry->getOrderClassName();

	if (!$order = $orderClassName::load($id))
	{
		$result->addError(new ResultError(Loc::getMessage('SALE_ORDER_ENTITY_NOT_FOUND'), 'SALE_ORDER_ENTITY_NOT_FOUND'));
		return $result;
	}

	/** @var Notify $notifyClassName */
	$notifyClassName = $registry->getNotifyClassName();
	$notifyClassName::setNotifyDisable(true);

	/** @var Result $r */
	$r = $order->setField('CANCELED', 'Y');
	if (!$r->isSuccess())
	{
		$result->addErrors($r->getErrors());
		return $result;
	}

	$r = $order->save();
	if (!$r->isSuccess())
	{
		$result->addErrors($r->getErrors());
		return $result;
	}

	static::deleteEntities($order);

	$event = new MainEvent(
		'sale',
		EventActions::EVENT_ON_BEFORE_ORDER_DELETE,
		array('ENTITY' => $order)
	);
	$event->send();

	foreach ($event->getResults() as $eventResult)
	{
		$return = null;
		if ($eventResult->getType() == MainEventResult::ERROR)
		{
			if ($eventResultData = $eventResult->getParameters())
			{
				if (isset($eventResultData) && $eventResultData instanceof ResultError)
				{
					/** @var ResultError $errorMsg */
					$errorMsg = $eventResultData;
				}
			}

			if (!isset($errorMsg))
				$errorMsg = new ResultError('EVENT_ORDER_DELETE_ERROR');

			$result->addError($errorMsg);
			return $result;
		}
	}

	/** @var Result $r */
	$r = $order->save();
	if ($r->isSuccess())
	{
		/** @var MainEntityDeleteResult $r */
		$r = static::deleteInternal($id);
		if ($r->isSuccess())
			static::deleteExternalEntities($id);
	}
	else
	{
		$result->addErrors($r->getErrors());
	}

	$notifyClassName::setNotifyDisable(false);

	$event = new MainEvent(
		'sale',
		EventActions::EVENT_ON_ORDER_DELETED,
		array('ENTITY' => $order, 'VALUE' => $r->isSuccess())
	);
	$event->send();

	$result->addData(array('ORDER' => $order));

	return $result;
}