56 lines
3.3 KiB
C#
56 lines
3.3 KiB
C#
using Tnsu.ApprovalRoute.Domain.Enums;
|
||
|
||
namespace Tnsu.ApprovalRoute.Application.TemplateRoutes;
|
||
|
||
/// <param name="SlaHours">
|
||
/// ДЕЙСТВУЮЩИЙ SLA шага в часах — наследование уже применено: значение шага, а
|
||
/// если на шаге не задано, то значение типа заявки. null означает, что SLA не
|
||
/// настроен нигде, то есть напоминаний по этому шагу не будет.
|
||
/// Резолв отдаёт именно итоговое значение, чтобы вызывающая сторона
|
||
/// (request-portal) просто записала его в строку списка согласования и не
|
||
/// повторяла у себя правило наследования.
|
||
/// </param>
|
||
/// <param name="AskOverdueReason">
|
||
/// Спрашивать ли причину просрочки — так же с уже применённым наследованием.
|
||
/// </param>
|
||
public sealed record ResolvedRouteStepDto(
|
||
int Id,
|
||
int OrderNo,
|
||
string? ExecutorEmail,
|
||
string? Position,
|
||
bool AllowReassignToOtherApprovers,
|
||
string? Warning = null,
|
||
int? SlaHours = null,
|
||
bool? AskOverdueReason = null);
|
||
|
||
/// <param name="Warning">
|
||
/// Предупреждение уровня всего резолва (не привязано к конкретному шагу) — например,
|
||
/// в маршруте есть шаг с условием по полю IsManager, а в заявке не передано значение
|
||
/// поля Position, из которого IsManager вычисляется. Это не ошибка (резолв всё равно
|
||
/// отработал, IsManager просто посчитался как «false»), но может означать, что
|
||
/// вызывающая сторона забыла передать поле, и шаг из-за этого не появился, хотя должен был.
|
||
/// </param>
|
||
public sealed record ResolveTemplateRouteResultDto(
|
||
int RouteId,
|
||
bool RequiresControl,
|
||
IReadOnlyList<ResolvedRouteStepDto> Steps,
|
||
string? Warning = null);
|
||
|
||
/// <summary>Значение поля списка SharePoint (field_name шага) для проверки условий шагов при resolve.</summary>
|
||
public sealed record ResolveFieldValueDto(string FieldName, string Value);
|
||
|
||
/// <param name="DepartmentId">
|
||
/// Отдел для шагов с HeadType.DepartmentHead ("руководитель указанного отдела") —
|
||
/// не выводится из инициатора, поэтому должен быть передан явно. Необязателен:
|
||
/// если в маршруте нет такого шага, поле не нужно; если есть, а поле не
|
||
/// передано — шаг не резолвится и получает предупреждение (см.
|
||
/// TemplateRouteService.ResolveStepAsync), весь запрос при этом не падает.
|
||
/// </param>
|
||
public sealed record ResolveTemplateRouteRequest(
|
||
int RequestTypeId,
|
||
string? UserEmail,
|
||
Guid? ProjectId,
|
||
RouteStepStatus Status,
|
||
IReadOnlyList<ResolveFieldValueDto>? FieldValues = null,
|
||
Guid? DepartmentId = null);
|