Предупреждения резолва маршрута — на русском вместо имён enum
В сообщениях «не найден руководитель типа DirectionHead» и в конфликте ролей шага пользователь видел имена enum'ов. Теперь везде русские названия из общего справочника StepLabels (его же использует выгрузка маршрутов): «Не найден руководитель «Руководитель направления»: не указан у инициатора в справочнике сотрудников». Для директора Tansu и управляющего директора, которые берутся из настроек сервиса, — «Не проставлен «…»: email не задан в настройках сервиса». Так же исправлены ошибки о дубле шага с типом руководителя. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,7 @@ using FluentResults;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Tnsu.ApprovalRoute.Application.Common;
|
||||
using Tnsu.ApprovalRoute.Application.Common.Errors;
|
||||
using Tnsu.ApprovalRoute.Application.Common.Interfaces;
|
||||
using Tnsu.ApprovalRoute.Domain.Entities;
|
||||
@@ -437,7 +438,7 @@ public sealed class TemplateRouteService(
|
||||
{
|
||||
resolvedEmail = projectExecutors.FirstOrDefault(e => e.ProjectRole == step.ProjectRole)?.Email;
|
||||
if (string.IsNullOrWhiteSpace(resolvedEmail))
|
||||
warning = $"Не найден исполнитель с ролью в проекте «{step.ProjectRole}».";
|
||||
warning = $"Не найден исполнитель с ролью в проекте «{StepLabels.Of(step.ProjectRole.Value)}».";
|
||||
}
|
||||
// DepartmentHead — единственный HeadType, который резолвится НЕ по цепочке
|
||||
// подчинённости инициатора, а по отделу, переданному явно в запросе (см.
|
||||
@@ -469,7 +470,14 @@ public sealed class TemplateRouteService(
|
||||
_ => null
|
||||
};
|
||||
if (string.IsNullOrWhiteSpace(resolvedEmail))
|
||||
warning = $"Не найден руководитель типа «{step.HeadType}».";
|
||||
{
|
||||
var headLabel = StepLabels.Of(step.HeadType.Value);
|
||||
// Директор Tansu и управляющий директор берутся из настроек сервиса, а не из
|
||||
// справочника сотрудников — там email не «не найден», а «не проставлен».
|
||||
warning = step.HeadType is HeadType.DirectorTansu or HeadType.ManagingDirectorTansu
|
||||
? $"Не проставлен «{headLabel}»: email не задан в настройках сервиса."
|
||||
: $"Не найден руководитель «{headLabel}»: не указан у инициатора в справочнике сотрудников.";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -612,7 +620,7 @@ public sealed class TemplateRouteService(
|
||||
else if (existing.PositionCode is not null && step.PositionCode is not null && existing.PositionCode != step.PositionCode)
|
||||
{
|
||||
var conflictWarning =
|
||||
$"Исполнитель «{step.ExecutorEmail}» получен через разные роли шага ({existing.PositionCode} и {step.PositionCode}) — оставлен {existing.PositionCode}.";
|
||||
$"Исполнитель «{step.ExecutorEmail}» получен через разные роли шага ({StepLabels.Of(existing.PositionCode.Value)} и {StepLabels.Of(step.PositionCode.Value)}) — оставлен «{StepLabels.Of(existing.PositionCode.Value)}».";
|
||||
var combinedWarning = string.Join(" ", new[] { existing.Warning, conflictWarning }
|
||||
.Where(w => !string.IsNullOrWhiteSpace(w)));
|
||||
result[index] = existing with { Warning = combinedWarning };
|
||||
|
||||
Reference in New Issue
Block a user