### Дополнительный фильтр

Дополнительный фильтр позволяет писать выражения для фильтрации на языке C#. В первую очередь этот фильтр используется для построения условий, которые зависят от текущей даты.
Пример 1. Выражение выведет все заявки, которые изменились за последние две недели:

(DateTime.Now-Changed).Value.TotalDays<14

(DateTime.Now-Changed).Value здесь используется так как Changed имеет тип DateTime?(Nullable). Если поле не Nullable, то нужно писать просто:

(DateTime.Now-Created).TotalDays<14

Пример 2. Выражение выведет все заявки, которые были созданы за последние 2 часа:

(DateTime.Now-Created).TotalHours<2

Пример 3. Выражение выведет все заявки, которые были закрыты за последние 2 часа:

(DateTime.Now-Closed).Value.TotalHours<2

Пример 4. Вывести все заявки, созданные в текущем месяце:

DateTime.Now.Year == Created.Year && DateTime.Now.Month == Created.Month

Пример 5. Вывести все заявки, созданные в предыдущем месяце:

DateTime.Now.AddMonths(-1).Year == Created.Year && DateTime.Now.AddMonths(-1).Month == Created.Month

Пример 6. Вывести все заявки, срок выполнения которых истекает в ближайшие 2 дня:

(Deadline - DateTime.Now).Value.TotalDays <= 2 && (Deadline - DateTime.Now).Value.TotalDays > 0

Пример 7. Вывести все заявки, с трудозатратами в текущем месяце:

TaskExpenses.Any(DateTime.Now.Year == Date.Year && DateTime.Now.Month == Date.Month)

Доступные интервалы времени: TotalDays, TotalHours, TotalMinutes, TotalSeconds.

Пример 8. Вывести все заявки, у которых имеются вложения:

TaskFiles.Any( )

Пример 9. Вывести все заявки, у которых дополнительное строковое поле с Id = 9 содержит подстроку "test":

TaskAdditionalFields.Any( FieldId==9 && Value.Contains("test") )

Пример 10. Вывести все заявки, у которых выпадающий список с Id = 10 имеет значение с Id = 151:

TaskAdditionalFields.Any( FieldId==10 && Value == "151" )

Пример 11. Вывести все заявки, у которых выпадающий список с Id = 10 имеет значение с Id = 151 либо 152 и значение числового поля с Id = 15 больше 100:

TaskAdditionalFields.Any( FieldId==10 && ( Value == "151" || Value == "152")) && TaskAdditionalFields.Any( FieldId==15 && Convert.ToInt32(Value) > 100 )

#### Доступные поля для использования:

- Deadline (срок исполнения, DateTime?)
- Created (дата и время создания, DateTime)
- Changed (дата и время последнего изменения, DateTime?)
- ReactionDate (дата и время реакции, DateTime?)
- Closed (дата и время закрытия, DateTime?)
- LastStatusChangedDate (дата смена статуса, DateTime?)
- CompletionStatus (выполнено %, int?)
- Hours (часы, decimal?)
- Price (стоимость, decimal?)

#### Дополнительные макросы:

Есть макросы, заменяющие наиболее часто используемые выражения поиска. Макросы вводятся в следующем формате:

[Тип поля].[Временные рамки]

Пример 12. Вывести все заявки, созданные в прошлом месяце:

TaskCreationDate.LastMonth

Доступны следующие наименования типов полей:

- TaskDeadlineDate (срок исполнения)
- TaskCreationDate (дата и время создания)
- TaskChangedDate (дата и время последнего изменения)
- TaskReactionDate (дата и время реакции)
- TaskClosedDate (дата и время закрытия)
- TaskLastStatusChangedDate (дата смена статуса)
- TaskExpensesDate (поиск по дате трудозатрат)

Доступны следующие временные рамки:

- Yesterday Вчера
- Today Сегодня
- LastWeek Прошлая неделя
- LastMonth Прошлый месяц
- LastYear Прошлый год
- CurrWeek На этой неделе
- CurrMonth В этом месяце
- CurrYear В этом году

Пример 13. Вывести все заявки, где пользователь заявитель или исполнитель или наблюдатель

(CreatorId==XXX)|| (TaskExecutors.Any(UserId==XXX)) || (TaskParticipants.Any(UserId==XXX))