51 lines
2.7 KiB
TypeScript
51 lines
2.7 KiB
TypeScript
// Справочники api.tnsu.kz (компании, отделы, проекты) в виде, удобном для UI.
|
||
// Приведение из «сырых» PascalCase-ответов портала — в services/portalDictionary.ts.
|
||
/* eslint-disable @rushstack/no-new-null -- поля 1:1 зеркалят nullable JSON-контракт портала api.tnsu.kz */
|
||
|
||
export interface Company {
|
||
id: string;
|
||
name: string;
|
||
}
|
||
|
||
export interface Department {
|
||
id: string;
|
||
name: string;
|
||
companyId: string;
|
||
company: string;
|
||
}
|
||
|
||
// Важно: идентификатор проекта — поле "oid". Именно оно принимается
|
||
// портальным /Project/{oid:guid} и передаётся в ResolveTemplateRouteQuery.projectId.
|
||
// Числовое "id" и legacy "id1c" — другие идентификаторы, для резолва не подходят.
|
||
export interface Project {
|
||
oid: string;
|
||
name: string;
|
||
code: string | null;
|
||
status: string | null;
|
||
}
|
||
|
||
// api.tnsu.kz/Employee/All. Ключ для полей executorEmail/userEmail на нашем
|
||
// бэкенде — email, но вводить его руками неудобно, поэтому в UI ищем по ФИО.
|
||
export interface Employee {
|
||
fio: string;
|
||
email: string;
|
||
/** Должность из 1С (AD) — '' если не заполнена в источнике. Используется как
|
||
* подсказка при выборе сотрудника (см. ManageRequestsApproverModal), не для
|
||
* отображения в списке (сам справочник должностей не показывает). */
|
||
position: string;
|
||
/**
|
||
* Первая компания сотрудника из справочника ('' если не пришла) — для
|
||
* отображения в пикере/списках, где на человека нужна ровно одна строка.
|
||
*/
|
||
company: string;
|
||
/**
|
||
* ВСЕ компании, где числится сотрудник — совместители и штат общих служб
|
||
* (бухгалтерия, HR) на несколько юрлиц не редкость: в api.tnsu.kz это
|
||
* отдельная строка на каждую компанию, а не одна с списком. Проверять
|
||
* принадлежность к конкретной компании (маршрут ограничен ею) нужно по
|
||
* этому полю, а не по company — иначе сотрудник, у которого в справочнике
|
||
* первой оказалась ДРУГАЯ его компания, ошибочно выглядел бы отсутствующим.
|
||
*/
|
||
companies: string[];
|
||
}
|