- Модуль: 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})"
);
}
}