- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_activity.php
- Класс: \CAllCrmActivity
- Вызов: CAllCrmActivity::GetNearest
static function GetNearest($ownerTypeID, $ownerID, $userID)
{
global $DB;
$userID = (int)$userID;
if (\Bitrix\Main\Config\Option::get('crm', 'enable_any_incoming_act', 'Y') === 'Y')
{
$query = Crm\Activity\Entity\EntityUncompletedActivityTable::query()
->where('ENTITY_TYPE_ID', (int)$ownerTypeID)
->where('ENTITY_ID', (int)$ownerID)
->setOrder(['MIN_DEADLINE' => 'ASC'])
->setLimit(1)
->setSelect(['ACTIVITY_ID', 'MIN_DEADLINE'])
;
if($userID > 0)
{
$query->where('RESPONSIBLE_ID', $userID);
}
if ($result = $query->fetch())
{
return [
'ID' => $result['ACTIVITY_ID'],
'DEADLINE' => $result['MIN_DEADLINE'] instanceof DateTime ? $result['MIN_DEADLINE']->toString() : false,
];
}
return false;
}
$tableName = CCrmActivity::TABLE_NAME;
$bindingTableName = CCrmActivity::BINDING_TABLE_NAME;
$deadline = $DB->DateToCharFunction('a.DEADLINE', 'FULL');
if($userID > 0)
{
$sql = "SELECT a.ID, {$deadline} AS DEADLINE_FORMATTED, a.DEADLINE FROM {$tableName} a INNER JOIN {$bindingTableName} b ON a.ID = b.ACTIVITY_ID AND a.COMPLETED = 'N' AND a.RESPONSIBLE_ID = {$userID} AND a.DEADLINE IS NOT NULL AND b.OWNER_TYPE_ID = {$ownerTypeID} AND b.OWNER_ID = {$ownerID} ORDER BY a.DEADLINE ASC";
}
else
{
$sql = "SELECT a.ID, {$deadline} AS DEADLINE_FORMATTED, a.DEADLINE FROM {$tableName} a INNER JOIN {$bindingTableName} b ON a.ID = b.ACTIVITY_ID AND a.COMPLETED = 'N' AND a.DEADLINE IS NOT NULL AND b.OWNER_TYPE_ID = {$ownerTypeID} AND b.OWNER_ID = {$ownerID} ORDER BY a.DEADLINE ASC";
}
$dbResult = $DB->Query(
$DB->TopSql($sql, 1),
false,
'File: '.__FILE__.'
Line: '.__LINE__
);
$arResult = $dbResult ? $dbResult->Fetch() : null;
if($arResult)
{
$arResult['DEADLINE'] = $arResult['DEADLINE_FORMATTED'];
unset($arResult['DEADLINE_FORMATTED']);
}
return $arResult;
}