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

	$qty = count($bindings);
	if($qty === 0)
	{
		return;
	}

	$affectedIDs = array();
	for($i = 0; $i < $qty; $i++)
	{
		$binding = $bindings[$i];

		$contactID = isset($binding['CONTACT_ID']) ? (int)$binding['CONTACT_ID'] : 0;
		if($contactID <= 0)
		{
			continue;
		}

		self::upsert(
			array(
				'CONTACT_ID' => $contactID,
				'COMPANY_ID' => $companyID,
				'SORT' => isset($binding['SORT']) ? (int)$binding['SORT'] : (10 * ($i + 1)),
				'ROLE_ID' => isset($binding['ROLE_ID']) ? (int)$binding['ROLE_ID'] : EntityBinding::ROLE_UNDEFINED,
				'IS_PRIMARY' => isset($binding['IS_PRIMARY']) ? $binding['IS_PRIMARY'] : ''
			)
		);
		$affectedIDs[] = $contactID;
	}

	if(!empty($affectedIDs))
	{
		$values = implode(',', $affectedIDs);

		Main\Application::getConnection()->queryExecute(
		/** @lang text*/
			"UPDATE b_crm_contact_company SET IS_PRIMARY =
			(CASE WHEN COMPANY_ID = {$companyID} THEN 'Y' ELSE 'N' END)
			WHERE CONTACT_ID IN({$values})"
		);

		Main\Application::getConnection()->queryExecute(
			/** @lang text*/
			"UPDATE b_crm_contact SET COMPANY_ID =
			(SELECT MIN(COMPANY_ID) FROM b_crm_contact_company t WHERE t.IS_PRIMARY = 'Y' AND t.CONTACT_ID = b_crm_contact.ID)
			WHERE ID IN({$values})"
		);
	}
}