• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/provider/taskquerybuilder.php
  • Класс: BitrixTasksProviderTaskQueryBuilder
  • Вызов: TaskQueryBuilder::getStatusField
private function getStatusField(): ExpressionField
{
	$connection = BitrixMainApplication::getConnection();
	$helper = $connection->getSqlHelper();
	$this->joinByAlias(self::ALIAS_TASK_VIEW);

	return new ExpressionField(
		"COMPUTE_STATUS",
		'CASE
				WHEN
					%1$s < ' . $helper->addSecondsToDateTime(Deadline::getDeadlineTimeLimit()) . '
					AND %1$s >= NOW()
					AND %2$s != '. Status::SUPPOSEDLY_COMPLETED .'
					AND %2$s != '. Status::COMPLETED .'
					AND (
						%2$s != '. Status::DECLINED .'
						OR %3$s != '. $this->taskQuery->getBehalfUser() .'
					)
				THEN
					'. MetaStatus::EXPIRED_SOON .'
				WHEN
					%1$s < NOW() 
					AND %2$s != '. Status::SUPPOSEDLY_COMPLETED .'
					AND %2$s != '. Status::COMPLETED .'
					AND (%2$s != '. Status::DECLINED .' OR %3$s != '. $this->taskQuery->getBehalfUser() .')
				THEN
					'. MetaStatus::EXPIRED .'
				WHEN
					%5$s IS NULL
					AND %4$s != '. $this->taskQuery->getBehalfUser() .'
					AND (%2$s = '. Status::NEW .' OR %2$s = '. Status::PENDING .')
				THEN
					'. MetaStatus::UNSEEN .'
				ELSE
					%2$s
			END',
		["DEADLINE", "STATUS", "RESPONSIBLE_ID", "CREATED_BY", self::ALIAS_TASK_VIEW.".USER_ID"]
	);
}