• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/rest/controllers/task.php
  • Класс: BitrixTasksRestControllersTask
  • Вызов: Task::fillResultInfo
private function fillResultInfo(array $tasks): array
{
	if (empty($tasks))
	{
		return [];
	}

	$taskIds = [];
	foreach ($tasks as $key => $task)
	{
		$taskIds[(int)$task['ID']] = $key;

		$tasks[$key]['TASK_REQUIRE_RESULT'] = 'N';
		$tasks[$key]['TASK_HAS_OPEN_RESULT'] = 'N';
		$tasks[$key]['TASK_HAS_RESULT'] = 'N';
	}

	$query = (new MainORMQueryQuery(ResultTable::getEntity()))
		->addSelect('TASK_ID')
		->addSelect(new MainEntityExpressionField(
			'RES_ID',
			'MAX(%s)',
			'ID'
		))
		->whereIn('TASK_ID', array_keys($taskIds))
		->addGroup('TASK_ID');

	$lastResults = $query->fetchAll();

	if (!empty($lastResults))
	{
		$lastResults = array_column($lastResults, 'RES_ID');
		$results = ResultTable::GetList([
			'select' => ['TASK_ID', 'STATUS'],
			'filter' => [
				'@ID' => $lastResults,
			],
		])->fetchAll();

		foreach ($results as $row)
		{
			$taskId = $row['TASK_ID'];
			$tasks[$taskIds[$taskId]]['TASK_HAS_RESULT'] = 'Y';

			if ((int)$row['STATUS'] === ResultTable::STATUS_OPENED)
			{
				$tasks[$taskIds[$taskId]]['TASK_HAS_OPEN_RESULT'] = 'Y';
			}
		}
	}

	$requireResults = ParameterTable::getList([
		'select' => ['TASK_ID'],
		'filter' => [
			'@TASK_ID' => array_keys($taskIds),
			'=CODE' => ParameterTable::PARAM_RESULT_REQUIRED,
			'=VALUE' => 'Y',
		],
	])->fetchAll();

	foreach ($requireResults as $row)
	{
		$taskId = $row['TASK_ID'];
		$tasks[$taskIds[$taskId]]['TASK_REQUIRE_RESULT'] = 'Y';
	}

	return $tasks;
}