LeadMerger::mergeBoundEntitiesBatch

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. LeadMerger
  4. mergeBoundEntitiesBatch
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/merger/leadmerger.php
  • Класс: Bitrix\Crm\Merger\LeadMerger
  • Вызов: LeadMerger::mergeBoundEntitiesBatch
protected function mergeBoundEntitiesBatch(array &$seeds, array &$targ, $skipEmpty = false, array $options = array())
{
	$contactMerger = new LeadContactBindingMerger();
	$contactMerger->merge($seeds, $targ, $skipEmpty, $options);

	$resultSeedObserverIDs = array();
	$resultSeedProductRows = array();

	foreach($seeds as $seed)
	{
		$seedID = isset($seed['ID']) ? (int)$seed['ID'] : 0;

		//region Observers
		$seedObserverIDs = null;
		if(isset($seed['OBSERVER_IDS']) && is_array($seed['OBSERVER_IDS']))
		{
			$seedObserverIDs = $seed['OBSERVER_IDS'];
		}
		elseif($seedID > 0)
		{
			$seedObserverIDs = Crm\Observer\ObserverManager::getEntityObserverIDs(\CCrmOwnerType::Lead, $seedID);
		}

		if($seedObserverIDs !== null)
		{
			$addedObserverIDs = array_diff($seedObserverIDs, $resultSeedObserverIDs);
			if(!empty($addedObserverIDs))
			{
				$resultSeedObserverIDs = array_merge($resultSeedObserverIDs, $addedObserverIDs);
			}
		}
		//endregion

		//region Product Rows
		$seedProductRows = null;
		if(isset($seed['PRODUCT_ROWS']) && is_array($seed['PRODUCT_ROWS']))
		{
			$seedProductRows = $seed['PRODUCT_ROWS'];
		}
		elseif($seedID > 0)
		{
			$seedProductRows = \CCrmLead::LoadProductRows($seedID);
		}

		if($seedProductRows !== null)
		{
			\CCrmProductRow::Merge($seedProductRows, $resultSeedProductRows);
		}
		//endregion
	}

	//TODO: Rename SKIP_MULTIPLE_USER_FIELDS -> ENABLE_MULTIPLE_FIELDS_ENRICHMENT
	$skipMultipleFields = isset($options['SKIP_MULTIPLE_USER_FIELDS']) && $options['SKIP_MULTIPLE_USER_FIELDS'];

	$targID = isset($targ['ID']) ? (int)$targ['ID'] : 0;

	//region Merge Observers bindings
	if(!empty($resultSeedObserverIDs))
	{
		$targObserverIDs = null;
		if(isset($targ['OBSERVER_IDS']) && is_array($targ['OBSERVER_IDS']))
		{
			$targObserverIDs = $targ['OBSERVER_IDS'];
		}
		elseif($targID > 0)
		{
			$targObserverIDs = Crm\Observer\ObserverManager::getEntityObserverIDs(\CCrmOwnerType::Lead, $targID);
		}

		if(!$skipMultipleFields)
		{
			if($targObserverIDs === null || count($targObserverIDs) === 0)
			{
				$targObserverIDs = $resultSeedObserverIDs;
			}
			else
			{
				$addedObserverIDs = array_diff($resultSeedObserverIDs, $targObserverIDs);
				if(!empty($addedObserverIDs))
				{
					$targObserverIDs = array_merge($targObserverIDs, $addedObserverIDs);
				}
			}

			$targ['OBSERVER_IDS'] = $targObserverIDs;
		}
		elseif($targObserverIDs === null || (count($targObserverIDs) === 0 && !$skipEmpty))
		{
			$targ['OBSERVER_IDS'] = $resultSeedObserverIDs;
		}
	}
	//endregion

	//region Merge Product Rows
	$targProductRows = null;
	if(isset($targ['PRODUCT_ROWS']) && is_array($targ['PRODUCT_ROWS']))
	{
		$targProductRows = $targ['PRODUCT_ROWS'];
	}
	elseif($targID > 0)
	{
		$targProductRows = \CCrmLead::LoadProductRows($targID);
	}

	if(!empty($resultSeedProductRows))
	{
		if(!$skipMultipleFields)
		{
			if($targProductRows === null || count($targProductRows) === 0)
			{
				$targ['PRODUCT_ROWS'] = $resultSeedProductRows;
			}
			else
			{
				\CCrmProductRow::Merge($resultSeedProductRows, $targProductRows);
				$targ['PRODUCT_ROWS'] = $targProductRows;
			}
		}
		elseif($targProductRows === null || (count($targProductRows) === 0 && !$skipEmpty))
		{
			$targ['PRODUCT_ROWS'] = $resultSeedProductRows;
		}
	}
	//endregion

	parent::mergeBoundEntitiesBatch($seeds, $targ, $skipEmpty, $options);
}

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