• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/recycling/leadcontroller.php
  • Класс: Bitrix\Crm\Recycling\LeadController
  • Вызов: LeadController::moveToBin
public function moveToBin($entityID, array $params = array())
{
	if(!Main\Loader::includeModule('recyclebin'))
	{
		throw new Main\InvalidOperationException("Could not load module RecycleBin.");
	}

	$fields = isset($params['FIELDS']) && is_array($params['FIELDS']) ? $params['FIELDS'] : null;
	if(empty($fields))
	{
		$fields = $params['FIELDS'] = $this->getEntityFields($entityID);
	}

	if(empty($fields))
	{
		throw new Main\ObjectNotFoundException("Could not find entity: #{$entityID}.");
	}

	$entityData = $this->prepareEntityData($entityID, $params);

	$recyclingEntity = Crm\Integration\Recyclebin\Lead::createRecycleBinEntity($entityID);
	$recyclingEntity->setTitle($entityData['TITLE']);

	$slots = isset($entityData['SLOTS']) && is_array($entityData['SLOTS']) ? $entityData['SLOTS'] : array();
	$relations = LeadRelationManager::getInstance()->buildCollection($entityID, $slots);
	foreach($slots as $slotKey => $slotData)
	{
		$recyclingEntity->add($slotKey, $slotData);
	}

	$result = $recyclingEntity->save();
	$errors = $result->getErrors();
	if(!empty($errors))
	{
		throw new Main\SystemException($errors[0]->getMessage(), $errors[0]->getCode());
	}

	$recyclingEntityID = $recyclingEntity->getId();

	//region Convert User Fields to Suspended Type
	$suspendedUserFields = $this->prepareSuspendedUserFields($entityID);
	if(!empty($suspendedUserFields))
	{
		$this->saveSuspendedUserFields($recyclingEntityID, $suspendedUserFields);
	}
	//endregion

	$this->suspendActivities($entityData, $entityID, $recyclingEntityID);
	$this->suspendMultiFields($entityID, $recyclingEntityID);
	$this->suspendAddresses($entityID, $recyclingEntityID);
	$this->suspendTimeline($entityID, $recyclingEntityID);
	$this->suspendDocuments($entityID, $recyclingEntityID);
	$this->suspendLiveFeed($entityID, $recyclingEntityID);
	$this->suspendUtm($entityID, $recyclingEntityID);
	$this->suspendTracing($entityID, $recyclingEntityID);
	$this->suspendObservers($entityID, $recyclingEntityID);
	$this->suspendWaitings($entityID, $recyclingEntityID);
	$this->suspendChats($entityID, $recyclingEntityID);
	$this->suspendProductRows($entityID, $recyclingEntityID);
	$this->suspendScoringHistory($entityID, $recyclingEntityID);
	$this->suspendCustomRelations((int)$entityID, (int)$recyclingEntityID);
	$this->suspendBadges((int)$entityID, (int)$recyclingEntityID);

	//region Relations
	foreach($relations as $relation)
	{
		/** @var Relation $relation */
		$relation->setRecycleBinID(\CCrmOwnerType::Lead, $entityID, $recyclingEntityID);
		$relation->save();
	}
	LeadRelationManager::getInstance()->registerRecycleBin($recyclingEntityID, $entityID, $slots);
	//endregion
}