Files
tnsu-approval-route/frontend/src/webparts/approvalAdmin/models/manageByUser.ts
T
gorbenko.pavel d9d68405ab feat: читать заявки в admin-вкладках от имени приложения, а не пользователя
«Редактирование заявок» и «Заявки по согласующему» раньше читали списки
SharePoint напрямую с фронтенда (PnP от имени залогиненного администратора),
из-за чего видимые заявки молча урезались правами САМОГО администратора на
списки. Добавлен RequestManageService/RequestManageController на бэкенде
(app-only SharePointClient, по образцу ReminderService) — теперь чтение
(поиск заявки, матрица маршрута, строки по согласующему) идёт через него,
а правка (переназначить/удалить/переставить/уведомить) остаётся на PnP.

Заодно кнопка уведомления в таблице маршрута включена и для строк в статусе
«Возвращена на доработку» — по клику поток Power Automate уведомляет автора
заявки, что её вернули на доработку.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 10:51:08 +05:00

35 lines
2.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Домен вкладки «Заявки по согласующему» (ManageByUserScreen) — сводит вместе
// два независимых источника по одному конкретному человеку: живые строки
// согласования (SharePoint, requestManageService.ts) и шаблонные шаги
// маршрутов (Tnsu.ApprovalRoute.Api, TemplateRouteStep с ExecutorEmail).
import { ManagedApprovalRow } from './requestManage';
import { TemplateRouteStep } from './templateRouteSteps';
/**
* Строка согласования, найденная сразу по ВСЕМ типам заявок и ВСЕМ их
* партициям — в отличие от ManagedApprovalRow (одна открытая заявка одного
* типа), здесь нужен контекст, к какому типу/списку/партиции она относится,
* чтобы её можно было и показать, и записать обратно через reassignApprover.
*/
export interface UserApprovalRow extends ManagedApprovalRow {
requestTypeId: number;
requestTypeName: string;
siteUrl: string;
/** Партиция списка ДАННЫХ, где физически лежит заявка. */
listId: string;
approvalListTitle: string;
requestTitle: string;
// eslint-disable-next-line @rushstack/no-new-null -- зеркалит SharePoint: колонки может не быть
requestUniqueCode: string | null;
}
/** Форма, в которой UserApprovalRow отдаёт Tnsu.ApprovalRoute.Api — см. requestManage.ts/ManagedApprovalRowApi. */
export type UserApprovalRowApi = Omit<UserApprovalRow, 'date'>;
/** Шаг шаблона маршрута с ExecutorEmail = искомый человек, обогащённый для отображения. */
export interface UserTemplateStepRow extends TemplateRouteStep {
requestTypeName: string;
companyName: string;
departmentName: string;
}