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