• Модуль: salescenter
  • Путь к файлу: ~/bitrix/modules/salescenter/lib/controller/order.php
  • Класс: BitrixSalesCenterControllerOrder
  • Вызов: Order::convertionLeadWithExistDeal
private function convertionLeadWithExistDeal(int $leadId, int $dealId): void
{
	$fields = [
		'STATUS_ID' => 'CONVERTED',
	];

	$lead = new CCrmLead(false);
	$lead->Update($leadId, $fields);
	if ($lead->LAST_ERROR)
	{
		// as can't change status, that no point in converting.
		return;
	}

	$converter = new LeadConverter();
	$converter->setEntityID($leadId);

	$contextData = [
		CCrmOwnerType::DealName => $dealId,
	];

	// load deal relations
	$dealIdentifier = new ItemIdentifier(CCrmOwnerType::Deal, $dealId);
	$dealRelations = Container::getInstance()->getRelationManager()->getParentRelations($dealIdentifier->getEntityTypeId());
	foreach ($dealRelations as $relation)
	{
		if (isset($contextData[$relation->getParentEntityTypeId()]))
		{
			continue;
		}

		$parentIds = $relation->getParentElements($dealIdentifier);
		foreach ($parentIds as $parentId)
		{
			$entityTypeName = CCrmOwnerType::ResolveName($parentId->getEntityTypeId());
			if ($entityTypeName)
			{
				$contextData[$entityTypeName] = $parentId->getEntityId();
			}
		}
	}
	unset($contextData[CCrmOwnerType::LeadName]);

	$converter->setContextData($contextData);
	foreach ($contextData as $entityTypeName => $entityId)
	{
		$entityTypeId = CCrmOwnerType::ResolveID($entityTypeName);
		$item = $converter->getConfig()->getItem($entityTypeId);
		if ($item)
		{
			$item->setActive(true);
			$item->enableSynchronization(false);
		}
	}

	$converter->convert();
}