EntityAddressConvertAgent::getConverterInstance

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. EntityAddressConvertAgent
  4. getConverterInstance
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/agent/requisite/entityaddressconvertagent.php
  • Класс: Bitrix\Crm\Agent\Requisite\EntityAddressConvertAgent
  • Вызов: EntityAddressConvertAgent::getConverterInstance
function getConverterInstance();

public static function doRun()
{
	$instance = static::getInstance();
	if($instance === null)
	{
		return false;
	}

	if(!$instance->isEnabled())
	{
		return false;
	}

	$progressData = $instance->getProgressData();

	$isStart = false;

	// Prevent multiple steps
	$timestamp = time();
	if (isset($progressData['TIMESTAMP']))
	{
		$prevTimeStamp = (int)$progressData['TIMESTAMP'];
		if ($timestamp >= $prevTimeStamp && $timestamp - $prevTimeStamp < self::STEP_TTL)
		{
			return true;
		}
	}
	else
	{
		if (!isset($progressData['LAST_ITEM_ID']) || $progressData['LAST_ITEM_ID'] <= 0)
		{
			$isStart = true;
		}
	}
	$progressData['TIMESTAMP'] = $timestamp;
	$instance->setProgressData($progressData);

	$success = true;
	if ($isStart)
	{
		try
		{
			$instance->start();
		}
		catch (SystemException $e)
		{
			$success = false;
		}
	}

	if ($success)
	{
		$offsetId = isset($progressData['LAST_ITEM_ID']) ? (int)($progressData['LAST_ITEM_ID']) : 0;
		$processedItemQty = isset($progressData['PROCESSED_ITEMS']) ? (int)($progressData['PROCESSED_ITEMS']) : 0;
		$totalItemQty = isset($progressData['TOTAL_ITEMS']) ? (int)($progressData['TOTAL_ITEMS']) : 0;
		if($totalItemQty <= 0)
		{
			$totalItemQty = $instance->getTotalCount();
		}

		$limit = (int)Option::get('crm', '~CRM_ENTITY_ADDRESS_CONVERT_STEP_LIMIT',  self::ITEM_LIMIT);
		if($limit <= 0)
		{
			$instance->enable(false);
			return false;
		}

		$itemIds = $instance->prepareItemIds($offsetId, $limit);
		$itemQty = count($itemIds);

		if($itemQty === 0)
		{
			$instance->complete();
			$instance->enable(false);
			return false;
		}

		try
		{
			$instance->convert($itemIds);
		}
		catch(SystemException $e)
		{
			$success = false;
		}
	}

	if (!$success)
	{
		$instance->complete();
		$instance->enable(false);
		$instance->enableErrorFlag(true);
		return false;
	}

	$processedItemQty += $itemQty;
	if($totalItemQty < $processedItemQty)
	{
		$totalItemQty = $instance->getTotalCount();
	}

	unset($progressData['TIMESTAMP']);
	$progressData['LAST_ITEM_ID'] = $itemIds[$itemQty - 1];
	$progressData['PROCESSED_ITEMS'] = $processedItemQty;
	$progressData['TOTAL_ITEMS'] = $totalItemQty;

	$instance->setProgressData($progressData);
	return true;
}

Добавить комментарий