• Модуль: salescenter
  • Путь к файлу: ~/bitrix/modules/salescenter/lib/integration/imopenlinesmanager.php
  • Класс: BitrixSalesCenterIntegrationImOpenLinesManager
  • Вызов: ImOpenLinesManager::updateDealAfterCreation
public function updateDealAfterCreation(int $dealId, int $sessionId): void
{
	$sessionInfo = $this->setSessionId($sessionId)->getSessionInfo();
	if (!$sessionInfo)
	{
		return;
	}

	$session = new ImOpenLinesSession();
	$sessionStart = $session->load([
		'USER_CODE' => $sessionInfo['USER_CODE'],
		'SKIP_CREATE' => 'Y',
	]);
	if (!$sessionStart)
	{
		return;
	}

	$dealContactData = CrmBindingDealContactTable::getList([
		'select' => ['CONTACT_ID'],
		'filter' => [
			'=DEAL_ID' => $dealId,
			'=IS_PRIMARY' => 'Y',
			'!=CONTACT_ID' => 0,
		],
	])->fetch();
	if ($dealContactData)
	{
		$contactId = $dealContactData['CONTACT_ID'];
	}

	$updateSession = [
		'CRM_CREATE_DEAL' => 'Y',
	];

	$updateChat = [
		'DEAL' => $dealId,
		'ENTITY_ID' => $dealId,
		'ENTITY_TYPE' => 'DEAL',
		'CRM' => 'Y',
	];

	$crmManager = new ImOpenLinesCrm($session);
	$selector = $crmManager->getEntityManageFacility()->getSelector();
	$registeredEntities = $crmManager->getEntityManageFacility()->getRegisteredEntities();

	if ($selector)
	{
		$entity = new CrmEntityIdentificatorComplex(CCrmOwnerType::Deal, $dealId);
		$selector->setEntity($entity->getTypeId(), $entity->getId());
		$registeredEntities->setComplex($entity, true);
	}

	if (isset($contactId))
	{
		$updateSession['CRM_CREATE_CONTACT'] = 'Y';
		$updateChat['CONTACT'] = $contactId;

		if ($selector)
		{
			$entity = new CrmEntityIdentificatorComplex(CCrmOwnerType::Contact, $contactId);
			$selector->setEntity($entity->getTypeId(), $entity->getId());
			$registeredEntities->setComplex($entity, true);
		}
	}

	$registerActivityResult = $crmManager->registrationChanges();
	if ($registerActivityResult->isSuccess())
	{
		$updateSession['CRM_ACTIVITY_ID'] = $registerActivityResult->getResult();
		$session->updateCrmFlags($updateSession);
		$chat = $session->getChat();
		if ($chat)
		{
			$chat->setCrmFlag($updateChat);
		}

		$trace = $crmManager->getEntityManageFacility()->getTrace();
		if ($trace && !$trace->getId())
		{
			$traceId = $trace->save();
			if ($traceId)
			{
				CrmTrackingTrace::appendEntity($traceId, CCrmOwnerType::Deal, $dealId);
			}
		}

		$crmManager->updateUserConnector();
	}


	$dealFields = [];
	if (isset($contactId))
	{
		$contactData = CrmEntityContact::getInstance()->getByID($contactId);
		if (!empty($contactData['LAST_NAME']))
		{
			$dealFields = [
				'TITLE' => $contactData['LAST_NAME'] . ' - ' . $session->getConfig('LINE_NAME')
			];
		}
	}

	if (!$dealFields && $session->getChat())
	{
		$dealFields = [
			'TITLE' => $session->getChat()->getData('TITLE')
		];
	}

	if ($dealFields)
	{
		$deal = new CCrmDeal(false);
		$deal->Update($dealId, $dealFields);
	}
}