6433299c62
Бэкенд сам читает маршруты, шаги и справочники портала (сотрудники с должностями, компании, отделы), фронт шлёт только id типов заявок и скачивает файл. Колонки: №, Роль, Исполнитель, Организация, Условие, Комментарий. Согласующие и исполнители — отдельными таблицами. Условие по CompaniesJson показывается как «организация». Директор Tansu и Управляющий директор Tansu выводятся с ФИО. Комментарий «назначает согласующего/исполнителя» — при галочке переназначения. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
43 lines
2.9 KiB
C#
43 lines
2.9 KiB
C#
namespace Tnsu.ApprovalRoute.Infrastructure.TnsuPortal;
|
|
|
|
public interface ITnsuPortalClient
|
|
{
|
|
/// <summary>
|
|
/// Все записи сотрудника по email — /Employee/ByEmail отдаёт массив: сотрудник может
|
|
/// числиться в нескольких компаниях одновременно (один Id/Fio/Email, разные Company/
|
|
/// CompanyId/Section/DepartmentId/Position на каждую). Пусто, если не найден вовсе.
|
|
/// </summary>
|
|
Task<IReadOnlyList<EmployeeDirectoryInfo>> GetEmployeeByEmailAsync(string email, CancellationToken cancellationToken);
|
|
|
|
Task<EmployeeLookupResult> GetEmployeeByPositionAsync(string position, string company, CancellationToken cancellationToken);
|
|
|
|
/// <summary>
|
|
/// Весь справочник сотрудников с email — /Employee/All. Нужен там, где известно
|
|
/// только ФИО, а email ещё нет: точечного поиска по ФИО в api.tnsu.kz нет вовсе
|
|
/// (эндпоинта /Employee/ByFio не существует), поэтому приходится тянуть базу
|
|
/// целиком и искать в ней локально. ВРЕМЕННОЕ решение — как только на стороне
|
|
/// api.tnsu.kz появится поиск по ФИО, этот вызов заменится точечным.
|
|
/// </summary>
|
|
Task<IReadOnlyList<EmployeeContactInfo>> GetAllEmployeesAsync(CancellationToken cancellationToken);
|
|
|
|
/// <summary>Справочник компаний — /Dictionary/Companies.</summary>
|
|
Task<IReadOnlyList<CompanyInfo>> GetCompaniesAsync(CancellationToken cancellationToken);
|
|
|
|
/// <summary>Справочник отделов — /Dictionary/Departments.</summary>
|
|
Task<IReadOnlyList<DepartmentInfo>> GetDepartmentsAsync(CancellationToken cancellationToken);
|
|
|
|
Task<string?> GetManagerAsync(string email, string managerType, CancellationToken cancellationToken);
|
|
|
|
/// <summary>
|
|
/// Весь справочник сотрудников — /Employee/FullBase. Единственный источник, где
|
|
/// есть дата увольнения (DismissalDate): нужен, чтобы не напоминать про
|
|
/// испытательный срок сотрудника, который уже уволен.
|
|
/// </summary>
|
|
Task<IReadOnlyList<EmployeeFullBaseInfo>> GetFullBaseAsync(CancellationToken cancellationToken);
|
|
|
|
Task<IReadOnlyList<ProjectExecutorInfo>> GetProjectExecutorsAsync(Guid projectId, CancellationToken cancellationToken);
|
|
|
|
/// <summary>Email руководителя указанного отдела (для HeadType.DepartmentHead) — null, если не найден.</summary>
|
|
Task<string?> GetDepartmentHeadEmailAsync(Guid departmentId, CancellationToken cancellationToken);
|
|
}
|