• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/binding/dealcontact.php
  • Класс: Bitrix\Crm\Binding\DealContactTable
  • Вызов: DealContactTable::rebindAllDeals
static function rebindAllDeals($seedContactID, $targContactID)
{
	$seedContactID = (int)$seedContactID;
	if($seedContactID <= 0)
	{
		throw new Main\ArgumentException('Must be greater than zero', 'seedContactID');
	}

	$targContactID = (int)$targContactID;
	if($targContactID <= 0)
	{
		throw new Main\ArgumentException('Must be greater than zero', 'targContactID');
	}

	if($seedContactID === $targContactID)
	{
		return;
	}

	$connection = Main\Application::getConnection();
	$dbResult = $connection->query(
		/** @lang text */
		"SELECT DEAL_ID FROM b_crm_deal_contact WHERE CONTACT_ID = {$seedContactID}"
	);

	while($fields = $dbResult->fetch())
	{
		$dealID = (int)$fields['DEAL_ID'];
		$bindings = self::getDealBindings($dealID);
		$seedIndex = $targIndex = -1;
		for($i = 0, $l = count($bindings); $i < $l; $i++)
		{
			$binding = $bindings[$i];
			$contactID = (int)$binding['CONTACT_ID'];
			if($contactID === $seedContactID)
			{
				$seedIndex = $i;
			}
			elseif($contactID === $targContactID)
			{
				$targIndex = $i;
			}

			if($seedIndex >= 0 && $targIndex >= 0)
			{
				break;
			}
		}

		$seedBinding = $seedIndex >= 0 ? $bindings[$seedIndex] : null;
		$targBinding = $targIndex >= 0 ? $bindings[$targIndex] : null;

		if(!is_array($seedBinding))
		{
			continue;
		}

		self::unbindContactIDs($dealID, array($seedContactID));

		$isPrimary = isset($seedBinding['IS_PRIMARY']) && $seedBinding['IS_PRIMARY'] === 'Y';
		if(!is_array($targBinding))
		{
			$seedBinding['CONTACT_ID'] = $targContactID;
			self::bindContacts($dealID, array($seedBinding));
		}
		elseif($isPrimary)
		{
			$targBinding['IS_PRIMARY'] = 'Y';
			self::bindContacts($dealID, array($targBinding));
		}
	}
}