Files
tnsu-approval-route/backend/Tnsu.ApprovalRoute.Domain/Entities/TemplateRouteStep.cs
T
gorbenko.pavel 2b8fe77fac
Tests / frontend-test (push) Successful in 46s
Tests / backend-test (push) Successful in 3m39s
Auto approve (#21)
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/21
2026-09-14 09:01:56 +00:00

56 lines
3.0 KiB
C#

using Tnsu.ApprovalRoute.Domain.Enums;
namespace Tnsu.ApprovalRoute.Domain.Entities;
public class TemplateRouteStep
{
public int Id { get; set; }
public int OrderNo { get; set; }
public string? ExecutorEmail { get; set; }
public string? Position { get; set; }
public ProjectRole? ProjectRole { get; set; }
public HeadType? HeadType { get; set; }
public RouteStepStatus Status { get; set; } = RouteStepStatus.Approval;
public int RouteId { get; set; }
public bool AllowReassignToOtherApprovers { get; set; }
/// <summary>
/// SLA этого шага в часах — перекрывает <see cref="RequestType.SlaHours"/>.
/// null означает ИМЕННО «не задано, наследовать от типа заявки», а 0 —
/// осознанное «напоминать сразу», поэтому поле обязано быть nullable и не
/// должно получать значение по умолчанию.
/// </summary>
public int? SlaHours { get; set; }
/// <summary>
/// Спрашивать ли причину просрочки на этом шаге — перекрывает
/// <see cref="RequestType.AskOverdueReason"/>. Здесь тоже три состояния:
/// null — наследовать от типа, true/false — явный выбор.
/// </summary>
public bool? AskOverdueReason { get; set; }
/// <summary>
/// Согласовывать шаг автоматически, когда истёк его SLA (см. <see cref="SlaHours"/>).
///
/// Не nullable, в отличие от SLA-полей рядом: наследовать тут нечего — у типа
/// заявки такого «значения по умолчанию» нет и быть не должно (включить
/// автосогласование сразу всем шагам типа — не настройка, а авария), поэтому
/// три состояния не нужны, хватает обычного «включено/выключено».
///
/// Действует только вместе с SLA: без действующего SLA (ни на шаге, ни на типе
/// заявки) отсчитывать нечего, и фоновая задача такой шаг пропускает
/// (см. AutoApproveService).
/// </summary>
public bool AutoApprove { get; set; }
/// <summary>Как объединяются <see cref="Conditions"/> между собой — не действует, если условий меньше двух.</summary>
public ConditionsLogic ConditionsLogic { get; set; } = ConditionsLogic.And;
/// <summary>Условия появления шага. Пусто — шаг применяется всегда.</summary>
public List<TemplateRouteStepCondition> Conditions { get; set; } = [];
public TemplateRoute? Route { get; set; }
}