• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/entitymarker.php
  • Класс: BitrixSaleEntityMarker
  • Вызов: EntityMarker::tryFixErrors
static function tryFixErrors()
{
	static $orderList = array();
	$orderSaveList = array();
	$lastOrderId = null;

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

	$result = new Result();
	$res = static::getList(array(
		'filter' => array(
			'=TYPE' => static::ENTITY_MARKED_TYPE_AUTO,
			'!=SUCCESS' => static::ENTITY_SUCCESS_CODE_DONE
		),
		'select' => array('ID', 'ENTITY_TYPE', 'ENTITY_ID', 'CODE', 'ORDER_ID'),
		'order' => array('ORDER_ID' => 'ASC', 'ID' => 'DESC')
	));
	while($data = $res->fetch())
	{
		if (array_key_exists($data['ORDER_ID'], $orderList))
		{
			$order = $orderList[$data['ORDER_ID']];
		}
		else
		{
			$order = $orderClass::load($data['ORDER_ID']);
			$orderList[$data['ORDER_ID']] = $order;
		}

		if (!$entity = static::getEntity($order, $data['ENTITY_TYPE'], $data['ENTITY_ID']))
		{
			continue;
		}

		if ($lastOrderId !== null && $lastOrderId !== $order->getId())
		{
			if (isset($orderSaveList[$lastOrderId]))
			{
				$r = $orderSaveList[$lastOrderId]->save();
				unset($orderSaveList[$lastOrderId]);
			}
		}

		if (!($entity instanceof IEntityMarker))
		{
			continue;
		}

		$r = $entity->tryFixError($data['CODE']);
		if ($r->isSuccess())
		{
			$data['SUCCESS'] = static::ENTITY_SUCCESS_CODE_DONE;

			if (!array_key_exists($data['ORDER_ID'], $orderSaveList))
			{
				$orderSaveList[$order->getId()] = $order;
			}
		}
		else
		{
			$data['SUCCESS'] = static::ENTITY_SUCCESS_CODE_FAIL;
		}

		static::updateMarker($data['ID'], $data, $order, $entity);

		$lastOrderId = $order->getId();
	}

	if (!empty($orderSaveList))
	{
		foreach ($orderSaveList as $order)
		{
			$order->save();
		}
	}

	foreach ($orderList as $order)
	{
		static::saveMarkers($order);
	}

	return $result;
}