Обходной лист (#12)
Tests / backend-test (push) Successful in 1m38s
Tests / frontend-test (push) Successful in 47s

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/12
This commit was merged in pull request #12.
This commit is contained in:
2026-08-17 05:43:52 +00:00
parent d076f4e98d
commit 48ede1420d
37 changed files with 1351 additions and 435 deletions
@@ -53,6 +53,7 @@ interface IPortalEmployee {
fio: string;
email: string | null;
position: string | null;
company: string | null;
}
async function getJson<T>(client: AadHttpClient, baseUrl: string, path: string): Promise<T> {
@@ -112,11 +113,21 @@ export class PortalDictionaryClient {
if (!x.email) return;
const existing = byEmail.get(x.email);
if (!existing) {
byEmail.set(x.email, { fio: x.fio, email: x.email, position: x.position || '' });
} else if (!existing.position && x.position) {
// Один сотрудник — строка на каждый его отдел; должность могла найтись
// не в первой из них.
existing.position = x.position;
byEmail.set(x.email, {
fio: x.fio,
email: x.email,
position: x.position || '',
company: x.company || '',
// Одна строка на каждую компанию, где числится сотрудник (совместители/
// бухгалтерия на несколько юрлиц — не редкость), companies собирает их
// все, а company остаётся первой встреченной (для пикера/отображения,
// где нужна ровно одна строка на человека).
companies: x.company ? [x.company] : []
});
} else {
if (!existing.position && x.position) existing.position = x.position;
if (!existing.company && x.company) existing.company = x.company;
if (x.company && existing.companies.indexOf(x.company) === -1) existing.companies.push(x.company);
}
});
return Array.from(byEmail.values());