CAllCrmActivity::ChangeOwner

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CAllCrmActivity
  4. ChangeOwner
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_activity.php
  • Класс: \CAllCrmActivity
  • Вызов: CAllCrmActivity::ChangeOwner
static function ChangeOwner($oldOwnerTypeID, $oldOwnerID, $newOwnerTypeID, $newOwnerID)
{
	global $DB;

	$oldOwnerTypeID = intval($oldOwnerTypeID);
	$oldOwnerID = intval($oldOwnerID);

	$newOwnerTypeID = intval($newOwnerTypeID);
	$newOwnerID = intval($newOwnerID);

	$tableName = CCrmActivity::TABLE_NAME;
	$bindingTableName = CCrmActivity::BINDING_TABLE_NAME;
	$communicationTableName = CCrmActivity::COMMUNICATION_TABLE_NAME;

	$sql= "SELECT ID FROM ".CCrmActivity::BINDING_TABLE_NAME." WHERE OWNER_TYPE_ID = {$oldOwnerTypeID} AND OWNER_ID = {$oldOwnerID}";
	CSqlUtil::PrepareSelectTop($sql, 1, CCrmActivity::DB_TYPE);
	$dbResult = $DB->Query($sql, false, 'File: '.__FILE__.'
Line: '.__LINE__); if(!(is_object($dbResult) && is_array($dbResult->Fetch()))) { return; } $responsibleIDs = []; $activityIDs = []; $sql = "SELECT B.ACTIVITY_ID, A.RESPONSIBLE_ID FROM {$bindingTableName} B INNER JOIN {$tableName} A ON A.ID = B.ACTIVITY_ID AND B.OWNER_TYPE_ID = {$oldOwnerTypeID} AND B.OWNER_ID = {$oldOwnerID}"; $dbResult = $DB->Query($sql, false, 'File: '.__FILE__.'
Line: '.__LINE__); if(is_object($dbResult)) { while($fields = $dbResult->Fetch()) { $singleResponsibleId = (int)$fields['RESPONSIBLE_ID']; if (!isset($responsibleIDs[$singleResponsibleId])) { $responsibleIDs[$singleResponsibleId] = $singleResponsibleId; } $singleActivityId = (int)$fields['ACTIVITY_ID']; if (!isset($activityIDs[$singleActivityId])) { $activityIDs[$singleActivityId] = $singleActivityId; } } } $comm = array('ENTITY_ID'=> $newOwnerID, 'ENTITY_TYPE_ID' => $newOwnerTypeID); self::PrepareCommunicationSettings($comm); $entityCommSettings = isset($comm['ENTITY_SETTINGS']) ? $DB->ForSql(serialize($comm['ENTITY_SETTINGS'])) : ''; $DB->Query( "UPDATE {$communicationTableName} SET ENTITY_TYPE_ID = {$newOwnerTypeID}, ENTITY_ID = {$newOwnerID}, ENTITY_SETTINGS = '{$entityCommSettings}' WHERE ENTITY_TYPE_ID = {$oldOwnerTypeID} AND ENTITY_ID = {$oldOwnerID}", false, 'File: '.__FILE__.'
Line: '.__LINE__ ); $DB->Query( "UPDATE {$communicationTableName} SET OWNER_TYPE_ID = {$newOwnerTypeID}, OWNER_ID = {$newOwnerID} WHERE OWNER_TYPE_ID = {$oldOwnerTypeID} AND OWNER_ID = {$oldOwnerID}", false, 'File: '.__FILE__.'
Line: '.__LINE__ ); $DB->Query( "UPDATE {$bindingTableName} SET OWNER_TYPE_ID = {$newOwnerTypeID}, OWNER_ID = {$newOwnerID} WHERE OWNER_TYPE_ID = {$oldOwnerTypeID} AND OWNER_ID = {$oldOwnerID}", false, 'File: '.__FILE__.'
Line: '.__LINE__ ); $DB->Query( "UPDATE {$tableName} SET OWNER_TYPE_ID = {$newOwnerTypeID}, OWNER_ID = {$newOwnerID} WHERE OWNER_TYPE_ID = {$oldOwnerTypeID} AND OWNER_ID = {$oldOwnerID}", false, 'File: '.__FILE__.'
Line: '.__LINE__ ); if(!empty($responsibleIDs)) { foreach($responsibleIDs as $responsibleID) { self::SynchronizeUserActivity($oldOwnerTypeID, $oldOwnerID, $responsibleID); self::SynchronizeUserActivity($newOwnerTypeID, $newOwnerID, $responsibleID); } } self::SynchronizeUserActivity($oldOwnerTypeID, $oldOwnerID, 0); self::SynchronizeUserActivity($newOwnerTypeID, $newOwnerID, 0); \Bitrix\Crm\Activity\CommunicationStatistics::rebuild($newOwnerTypeID, array($newOwnerID)); foreach ($activityIDs as $singleActivityId) { Crm\Activity\Provider\ProviderManager::syncBadgesOnBindingsChange( $singleActivityId, [ ['OWNER_TYPE_ID' => $newOwnerTypeID, 'OWNER_ID' => $newOwnerID], ], [ ['OWNER_TYPE_ID' => $oldOwnerTypeID, 'OWNER_ID' => $oldOwnerID], ], ); } $monitor = Crm\Service\Timeline\Monitor::getInstance(); if (\CCrmOwnerType::IsDefined($oldOwnerTypeID) && $oldOwnerID > 0) { $monitor->onActivityRemove(new Crm\ItemIdentifier($oldOwnerTypeID, $oldOwnerID)); } if (\CCrmOwnerType::IsDefined($newOwnerTypeID) && $newOwnerID > 0) { $monitor->onActivityAdd(new Crm\ItemIdentifier($newOwnerTypeID, $newOwnerID)); } }

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