2b8fe77fac
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz> Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/21
56 lines
3.0 KiB
C#
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; }
|
|
}
|