- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/crm/common.php
- Класс: BitrixImOpenLinesCrmCommon
- Вызов: Common::getLastChatIdByCrmEntity
static function getLastChatIdByCrmEntity($crmEntityType, $crmEntityId): int
{
$result = 0;
if (Loader::includeModule('im') && Loader::includeModule('crm'))
{
$crmEntityIdByTypeCode = self::getCrmEntityIdByTypeCode($crmEntityType);
$crmEntityId = (int)$crmEntityId;
if($crmEntityIdByTypeCode && $crmEntityId > 0)
{
$filter = [
'PROVIDER_ID' => BitrixCrmActivityProviderOpenLine::ACTIVITY_PROVIDER_ID,
'BINDINGS' => [
0 => [
'OWNER_TYPE_ID' => $crmEntityIdByTypeCode,
'OWNER_ID' => $crmEntityId,
],
],
];
$activity = CCrmActivity::GetList(
['LAST_UPDATED' => 'DESC'],
$filter,
false,
false,
[
'ID', 'OWNER_ID', 'OWNER_TYPE_ID',
'TYPE_ID', 'PROVIDER_ID', 'PROVIDER_TYPE_ID', 'ASSOCIATED_ENTITY_ID', 'DIRECTION',
'SUBJECT', 'STATUS', 'DESCRIPTION', 'DESCRIPTION_TYPE',
'DEADLINE', 'RESPONSIBLE_ID'
],
['QUERY_OPTIONS' => ['LIMIT' => 1, 'OFFSET' => 0]]
)->fetch();
}
if (!empty($activity))
{
$activity = BitrixCrmTimelineActivityController::prepareScheduleDataModel($activity);
if (
!empty($activity['ASSOCIATED_ENTITY']['COMMUNICATION']['VALUE'])
&& mb_strpos($activity['ASSOCIATED_ENTITY']['COMMUNICATION']['VALUE'], 'imol|') === 0
)
{
$entityId = str_replace('imol|', '', $activity['ASSOCIATED_ENTITY']['COMMUNICATION']['VALUE']);
$filter = [
'=ENTITY_TYPE' => 'LINES',
'=ENTITY_ID' => $entityId
];
$chatData = BitrixImModelChatTable::getList(['select' => ['ID'], 'filter' => $filter])->fetch();
$chatData['ID'] = (int)$chatData['ID'];
$result = $chatData['ID'] > 0 ? $chatData['ID'] : 0;
}
}
}
return $result;
}