Предупреждения резолва маршрута — на русском вместо имён enum
Tests / frontend-test (pull_request) Successful in 1m32s
Tests / backend-test (pull_request) Successful in 1m39s

В сообщениях «не найден руководитель типа DirectionHead» и в конфликте
ролей шага пользователь видел имена enum'ов. Теперь везде русские
названия из общего справочника StepLabels (его же использует выгрузка
маршрутов): «Не найден руководитель «Руководитель направления»: не
указан у инициатора в справочнике сотрудников». Для директора Tansu и
управляющего директора, которые берутся из настроек сервиса, —
«Не проставлен «…»: email не задан в настройках сервиса». Так же
исправлены ошибки о дубле шага с типом руководителя.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
gorbenko.pavel
2026-10-16 10:39:55 +05:00
parent 08dc484d03
commit 547c51ca3c
5 changed files with 54 additions and 30 deletions
@@ -1,6 +1,7 @@
using FluentResults;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
using Tnsu.ApprovalRoute.Application.Common;
using Tnsu.ApprovalRoute.Domain.Entities;
using Tnsu.ApprovalRoute.Domain.Enums;
using Tnsu.ApprovalRoute.Infrastructure.Persistence;
@@ -44,25 +45,6 @@ public sealed class RouteExportService(
["CompaniesJson"] = "организация"
};
private static readonly Dictionary<ProjectRole, string> ProjectRoleLabels = new()
{
[ProjectRole.ProjectManager] = "Руководитель проекта",
[ProjectRole.Planner] = "Планировщик",
[ProjectRole.ManagerHSE] = "Менеджер HSE",
[ProjectRole.Security] = "Безопасность",
[ProjectRole.Keeper] = "Заведующий склада"
};
private static readonly Dictionary<HeadType, string> HeadTypeLabels = new()
{
[HeadType.Chief] = "Непосредственный руководитель",
[HeadType.DirectionHead] = "Руководитель направления",
[HeadType.DirectorTansu] = "Директор Tansu",
[HeadType.ManagingDirectorTansu] = "Управляющий директор Tansu",
[HeadType.DepartmentHead] = "Руководитель указанного отдела",
[HeadType.CompanyDirectors] = "Директора компаний инициатора"
};
private static readonly Dictionary<ComparisonOperator, string> OperatorSymbols = new()
{
[ComparisonOperator.GreaterThan] = ">",
@@ -228,7 +210,7 @@ public sealed class RouteExportService(
}
if (step.ProjectRole is { } projectRole && projectRole != ProjectRole.None)
return (ProjectRoleLabels[projectRole], ByRequest, Empty);
return (StepLabels.Of(projectRole), ByRequest, Empty);
if (step.HeadType is { } headType && headType != HeadType.None)
{
@@ -240,9 +222,9 @@ public sealed class RouteExportService(
};
if (fixedEmail is not null)
// Нет в справочнике — лучше показать email, чем пустую ячейку.
return (HeadTypeLabels[headType], directory.FindByEmail(fixedEmail)?.Fio ?? fixedEmail, directory.CompaniesOf(fixedEmail));
return (StepLabels.Of(headType), directory.FindByEmail(fixedEmail)?.Fio ?? fixedEmail, directory.CompaniesOf(fixedEmail));
return (HeadTypeLabels[headType], ByRequest, Empty);
return (StepLabels.Of(headType), ByRequest, Empty);
}
return (Empty, Empty, Empty);