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