feat: заявление на отпуск уходит на подпись в ЭДО после финального согласования

Когда последний согласующий согласовывает заявку на отпуск, заявление собирается в браузере
как DOCX и отправляется в ЭДО (POST /api/v1/integration/signing-requests). Подписывает сотрудник
из заявки, его же почта передаётся как initiator_email. ИИН берётся из Employee/ByEmail,
БИН компании — из Dictionary/Companies. Неудача отправки не отменяет согласование и
показывается сообщением с кнопкой повтора.

Свойство веб-части «С каким ЭДО работать»: стейдж (https://10.0.1.225:8443) или локальный
бэкенд (https://localhost:7016). jszip объявлен зависимостью явно (раньше был транзитивным).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
gorbenko.pavel
2026-10-01 16:46:43 +05:00
parent 4f292dde3d
commit bed190835e
20 changed files with 777 additions and 10 deletions
@@ -19,7 +19,10 @@ import { setImpersonatedIdentity } from './shared/impersonation';
import {
APPROVAL_API_BASE_URL_LOCAL,
APPROVAL_API_BASE_URL_PROD,
EDO_API_BASE_URL_LOCAL,
EDO_API_BASE_URL_STAGE,
setApprovalApiBaseUrl,
setEdoApiBaseUrl,
setNotificationSettings
} from './shared/config';
import { initListPartitions } from './shared/approval';
@@ -38,6 +41,11 @@ export interface IRequestPortalWebPartProps {
debugUserDisplayName: string;
/** Куда шлём запросы approval-route (маршруты согласования) — прод или локальный backend. */
approvalApiBaseUrl: string;
/**
* С каким ЭДО работаем при отправке документов на подписание — локальным или
* стейджинговым. У веб-частей, добавленных до появления свойства, оно пустое — это стейдж.
*/
edoApiBaseUrl: string;
/**
* Уведомления согласующим (поток Power Automate). По умолчанию включены:
* у веб-частей, добавленных до появления свойства, оно undefined — это тоже «вкл».
@@ -58,6 +66,8 @@ export default class RequestPortalWebPart extends BaseClientSideWebPart<IRequest
setImpersonatedIdentity(this.properties.debugUserQuery, this.properties.debugUserDisplayName);
this.properties.approvalApiBaseUrl = this.properties.approvalApiBaseUrl || APPROVAL_API_BASE_URL_PROD;
setApprovalApiBaseUrl(this.properties.approvalApiBaseUrl);
this.properties.edoApiBaseUrl = this.properties.edoApiBaseUrl || EDO_API_BASE_URL_STAGE;
setEdoApiBaseUrl(this.properties.edoApiBaseUrl);
this._applyNotificationSettings();
const element: React.ReactElement = React.createElement(
@@ -89,6 +99,8 @@ export default class RequestPortalWebPart extends BaseClientSideWebPart<IRequest
// панели без перезапуска), но render случается позже onInit.
this.properties.approvalApiBaseUrl = this.properties.approvalApiBaseUrl || APPROVAL_API_BASE_URL_PROD;
setApprovalApiBaseUrl(this.properties.approvalApiBaseUrl);
this.properties.edoApiBaseUrl = this.properties.edoApiBaseUrl || EDO_API_BASE_URL_STAGE;
setEdoApiBaseUrl(this.properties.edoApiBaseUrl);
this._applyNotificationSettings();
// Партиции грузим здесь, а не по требованию из форм: имена списков нужны
@@ -218,6 +230,19 @@ export default class RequestPortalWebPart extends BaseClientSideWebPart<IRequest
})
]
},
{
groupName: 'ЭДО (подписание)',
groupFields: [
PropertyPaneDropdown('edoApiBaseUrl', {
label: 'С каким ЭДО работать',
selectedKey: this.properties.edoApiBaseUrl || EDO_API_BASE_URL_STAGE,
options: [
{ key: EDO_API_BASE_URL_STAGE, text: `Стейдж (${EDO_API_BASE_URL_STAGE})` },
{ key: EDO_API_BASE_URL_LOCAL, text: `Локально (${EDO_API_BASE_URL_LOCAL})` }
]
})
]
},
{
groupName: 'Уведомления',
groupFields: [