• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/provider/taskquerybuilder.php
  • Класс: BitrixTasksProviderTaskQueryBuilder
  • Вызов: TaskQueryBuilder::getFieldMap
private function getFieldMap(): array
{
	return [
		"ID" => "ID",
		"TITLE" => "TITLE",
		"DESCRIPTION" => "DESCRIPTION",
		"DESCRIPTION_IN_BBCODE" => "DESCRIPTION_IN_BBCODE",
		"DECLINE_REASON" => "DECLINE_REASON",
		"PRIORITY" => "PRIORITY",
		"STATUS_COMPLETE" => new ExpressionField(
			"STATUS_COMPLETE",
			"CASE
				WHEN
					%s = '".Status::COMPLETED."'
				THEN
					'".Status::PENDING."'
				ELSE
					'".Status::NEW."'
				END",
			["STATUS"]
		),
		"COMPUTE_STATUS" => function() {
			return $this->getStatusField();
		},
		"REAL_STATUS" => "STATUS",
		"MULTITASK" => "MULTITASK",
		"STAGE_ID" => "STAGE_ID",
		"RESPONSIBLE_ID" => "RESPONSIBLE_ID",
		"RESPONSIBLE_NAME" => self::ALIAS_USER_RESPONSIBLE.".NAME",
		"RESPONSIBLE_LAST_NAME" => self::ALIAS_USER_RESPONSIBLE.".LAST_NAME",
		"RESPONSIBLE_SECOND_NAME" => self::ALIAS_USER_RESPONSIBLE.".SECOND_NAME",
		"RESPONSIBLE_LOGIN" => self::ALIAS_USER_RESPONSIBLE.".LOGIN",
		"RESPONSIBLE_WORK_POSITION" => self::ALIAS_USER_RESPONSIBLE.".WORK_POSITION",
		"RESPONSIBLE_PHOTO" => self::ALIAS_USER_RESPONSIBLE.".PERSONAL_PHOTO",
		"DATE_START" => "DATE_START",
		"TIME_ESTIMATE" => "TIME_ESTIMATE",
		"REPLICATE" => "REPLICATE",
		"DEADLINE" => "DEADLINE",
		"DEADLINE_ORIG" => "DEADLINE",
		"START_DATE_PLAN" => "START_DATE_PLAN",
		"END_DATE_PLAN" => "END_DATE_PLAN",
		"CREATED_BY" => "CREATED_BY",
		"CREATED_BY_NAME" => self::ALIAS_USER_CREATE.".NAME",
		"CREATED_BY_LAST_NAME" => self::ALIAS_USER_CREATE.".LAST_NAME",
		"CREATED_BY_SECOND_NAME" => self::ALIAS_USER_CREATE.".SECOND_NAME",
		"CREATED_BY_LOGIN" => self::ALIAS_USER_CREATE.".LOGIN",
		"CREATED_BY_WORK_POSITION" => self::ALIAS_USER_CREATE.".WORK_POSITION",
		"CREATED_BY_PHOTO" => self::ALIAS_USER_CREATE.".PERSONAL_PHOTO",
		"CREATED_DATE" => "CREATED_DATE",
		"CHANGED_BY" => "CHANGED_BY",
		"CHANGED_DATE" => "CHANGED_DATE",
		"STATUS_CHANGED_BY" => "STATUS_CHANGED_BY",
		"CLOSED_BY" => "CLOSED_BY",
		"CLOSED_DATE" => "CLOSED_DATE",
		"ACTIVITY_DATE" => "ACTIVITY_DATE",
		"GUID" => "GUID",
		"XML_ID" => "XML_ID",
		"MARK" => "MARK",
		"ALLOW_CHANGE_DEADLINE" => "ALLOW_CHANGE_DEADLINE",
		"ALLOW_TIME_TRACKING" => "ALLOW_TIME_TRACKING",
		"MATCH_WORK_TIME" => "MATCH_WORK_TIME",
		"TASK_CONTROL" => "TASK_CONTROL",
		"ADD_IN_REPORT" => "ADD_IN_REPORT",
		"COMPUTE_GROUP_ID" => new ExpressionField(
			'COMPUTE_GROUP_ID',
			'CASE WHEN %1$s IS NULL THEN 0 ELSE %1$s END',
			['GROUP_ID']
		),
		"FORUM_TOPIC_ID" => "FORUM_TOPIC_ID",
		"PARENT_ID" => "PARENT_ID",
		"COMMENTS_COUNT" => self::ALIAS_FORUM_TOPIC.".POSTS",
		"SERVICE_COMMENTS_COUNT" => self::ALIAS_FORUM_TOPIC.".POSTS_SERVICE",
		"FORUM_ID" => self::ALIAS_FORUM_TOPIC.".FORUM_ID",
		"MESSAGE_ID" => function () {
			return $this->getMessageIdField();
		},
		"SITE_ID" => "SITE_ID",
		"EXCHANGE_MODIFIED" => "EXCHANGE_MODIFIED",
		"EXCHANGE_ID" => "EXCHANGE_ID",
		"OUTLOOK_VERSION" => "OUTLOOK_VERSION",
		"VIEWED_DATE" => self::ALIAS_TASK_VIEW.".VIEWED_DATE",
		"DEADLINE_COUNTED" => "DEADLINE_COUNTED",
		"FORKED_BY_TEMPLATE_ID" => "FORKED_BY_TEMPLATE_ID",
		"NOT_VIEWED" => function () {
			return $this->getNotViewedField();
		},
		"COMPUTE_FAVORITE" => function () {
			return $this->getFavoriteField();
		},
		"SORTING" => self::ALIAS_TASK_SORT.".SORT",
		"IM_CHAT_ID" => self::ALIAS_CHAT_TASK.".ID",
		"IM_CHAT_MESSAGE_ID" => self::ALIAS_CHAT_TASK.".MESSAGE_ID",
		"IM_CHAT_CHAT_ID" => self::ALIAS_CHAT_TASK.".CHAT_ID",
		"IM_CHAT_AUTHOR_ID" => self::ALIAS_CHAT_TASK.".AUTHOR_ID",

		"DURATION_PLAN_SECONDS" => "DURATION_PLAN",
		"DURATION_TYPE_ALL" => "DURATION_TYPE",

		"COMPUTE_DURATION_PLAN" => new ExpressionField(
			'COMPUTE_DURATION_PLAN',
			'case
				when
					%1$s = ''. TimeUnitType::MINUTE .'' or %1$s = ''. TimeUnitType::HOUR .''
				then
					ROUND(%2$s / 3600, 0)
				when
					%1$s = ''. TimeUnitType::DAY .'' or %1$s = '' or %1$s is null
				then
					ROUND(%2$s / 86400, 0)
				else
					%2$s
			end',
			["DURATION_TYPE", "DURATION_PLAN"]
		),
		"COMPUTE_DURATION_TYPE" => new ExpressionField(
			"COMPUTE_DURATION_TYPE",
			'case
				when
					%1$s = ''. TimeUnitType::MINUTE .''
				then
					''. TimeUnitType::HOUR .''
				else
					%1$s
			end',
			["DURATION_TYPE"]
		),

		"COMPUTE_STATUS_CHANGED_DATE" => new ExpressionField(
			"COMPUTE_STATUS_CHANGED_DATE",
			'CASE
				WHEN
					%1$s IS NULL
				THEN
					%2$s
				ELSE
					%1$s
			END',
			["STATUS_CHANGED_DATE", "CHANGED_DATE"]
		),

		"TIME_SPENT_IN_LOGS" => function () {
			return $this->getTimeSpentField();
		},
		"DURATION_FACT" => function () {
			return $this->getDurationFactField();
		},
		"IS_MUTED" => function () {
			return $this->getUserOptionField("IS_MUTED", Option::MUTED);
		},
		"IS_PINNED" => function () {
			return $this->getUserOptionField("IS_PINNED", Option::PINNED);
		},
		"IS_PINNED_IN_GROUP" => function () {
			return $this->getUserOptionField("IS_PINNED_IN_GROUP", Option::PINNED_IN_GROUP);
		},
		"SUBORDINATE" => function () {
			return $this->getSubordinateField();
		},

		"COUNT" => new ExpressionField("CNT", "COUNT(DISTINCT %s)", ['ID']),
		"NULL_SORTING" => new ExpressionField(
			"NULL_SORTING",
			'CASE
				WHEN
					%s IS NULL
				THEN
					1
				ELSE
					0
			END',
			[self::ALIAS_TASK_SORT.".SORT"]
		),
		"LENGTH_DEADLINE" => new ExpressionField(
			"LENGTH_DEADLINE",
			'CASE
				WHEN
					length(%s) > 0
				THEN
					1
				ELSE
					0
			END',
			["DEADLINE"]
		),
		"SCENARIO_NAME" => self::ALIAS_TASK_SCENARIO.".SCENARIO",
	];
}