Files
request-portal/src/webparts/requestPortal/shared/approval/approverOrgInfo.ts
T
gorbenko.pavel 5fd8bfe453 fix: заявление на отпуск не уходило в ЭДО, если в маршруте есть исполнитель
Отправка срабатывала только на статус «Согласовано», а при исполнителе в маршруте последний
согласующий переводит заявку сразу в «Выполнение» — запрос в ЭДО не шёл вообще. Теперь отправка
срабатывает на решение, завершившее фазу согласования (isApprovalPhaseCompleted: «На согласовании»
→ «Согласовано»/«Выполнение»/«Закрыта»); решение исполнителя повторно её не запускает.

В зелёное сообщение «Решение сохранено» дописывается «Документы отправлены на подписание в ЭДО…»
(onDecided панели решения может вернуть строку).

Заодно пять чужих предупреждений линтера: eqeqeq в SubmitActions, явные типы возврата
в approverOrgInfo и useSkudRoute, зависимость эффекта в ServiceRequestView, null → undefined
в ячейках календаря СКУД.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 16:39:06 +05:00

27 lines
1.6 KiB
TypeScript

import { WebPartContext } from '@microsoft/sp-webpart-base';
import { getEmployeeOrganizations } from '../dictionary';
/** Отдел + организация согласующего — для колонок «Отдел»/«Организация» матрицы. */
export interface IApproverOrgInfo {
department: string;
organization: string;
}
/**
* Резолвер для useMatrixEditor: отдел и организация — ОДНИМ источником
* (Employee/ByEmail, тот же, что и «авто-Организация» в Vacation/UnpaidLeave/…),
* а не двумя разными API (иначе строка матрицы собиралась бы по кускам). Один
* сотрудник может числиться в нескольких организациях — берём первую запись,
* как и остальные формы с авто-подстановкой (см. shared/dictionary).
*
* email не найден в кадровом справочнике (404) или пуст — getEmployeeOrganizations
* отдаёт [], здесь это просто пустые отдел/организация, не ошибка матрицы.
*/
export function resolveApproverOrgInfo(context: WebPartContext): (email: string) => Promise<IApproverOrgInfo> {
return async (email: string): Promise<IApproverOrgInfo> => {
const records = await getEmployeeOrganizations(context, email);
const first = records[0];
return { department: first?.section || '', organization: first?.company || '' };
};
}