feat: ссылка на заявку ТМЦ уходит в КПС для ссылок с source=kps
Заявки, открытые из КПС, передают ссылку на заявку в позицию акта
дефектов через Inventory API (POST /inventory/api/defect-acts/parts/
{partId}/tmc-transfer); остальные — в Dataverse, как раньше. Для КПС не
ищем «Куда» в Dataverse: positionId там чужой и давал только 404.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -88,6 +88,24 @@ export const DICTIONARY_API_BASE_URL = 'https://api.tnsu.kz';
|
||||
*/
|
||||
export const SKUD_EVENTS_PATH = '/Hikvision/Events/CurrentUser';
|
||||
|
||||
/**
|
||||
* Значения параметра `source` внешней ссылки (см. shared/routing, sourceSystem) —
|
||||
* из какой системы открыли форму и, значит, куда отвечать ссылкой на заявку.
|
||||
* Без source (или с неизвестным значением) — ссылка пришла из Dataverse.
|
||||
*/
|
||||
export const EXTERNAL_SOURCE = {
|
||||
/** КПС: positionId — id позиции акта дефектов, ответ — в Inventory API. */
|
||||
kps: 'kps'
|
||||
} as const;
|
||||
|
||||
/**
|
||||
* Inventory API (КПС) — приём ссылки на заявку «СЗ на перемещение ТМЦ» для
|
||||
* позиции акта дефектов: POST {DICTIONARY_API_BASE_URL}<путь> с телом { url }.
|
||||
* {partId} = positionId из внешней ссылки с source=kps. Тот же gateway
|
||||
* api.tnsu.kz — авторизация та же, что у справочников (APPROVAL_API_CLIENT_ID).
|
||||
*/
|
||||
export const INVENTORY_TMC_TRANSFER_PATH = '/inventory/api/defect-acts/parts/{partId}/tmc-transfer';
|
||||
|
||||
/**
|
||||
* Производственный календарь (праздничные выходные) — SP-список на корневом
|
||||
* сайте, где живёт главная страница портала (portal-main-page читает его же).
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
import { AadHttpClient, HttpClientResponse } from '@microsoft/sp-http';
|
||||
import { WebPartContext } from '@microsoft/sp-webpart-base';
|
||||
import { APPROVAL_API_CLIENT_ID, DICTIONARY_API_BASE_URL, INVENTORY_TMC_TRANSFER_PATH } from '../config';
|
||||
|
||||
/**
|
||||
* Обратная связь в КПС: передать ссылку на заявку портала в позицию акта
|
||||
* дефектов, из которой открыли форму «СЗ на перемещение ТМЦ» (source=kps).
|
||||
*
|
||||
* partId — positionId из внешней ссылки (id позиции акта в КПС, НЕ строка
|
||||
* Dataverse). Ответ сервиса ({ partId, defectActId, tmcTransferUrl }) нам не
|
||||
* нужен — достаточно успешного статуса.
|
||||
*/
|
||||
export async function writeDefectActPartTmcLink(
|
||||
context: WebPartContext,
|
||||
partId: string,
|
||||
portalRequestUrl: string
|
||||
): Promise<void> {
|
||||
const client = await context.aadHttpClientFactory.getClient(APPROVAL_API_CLIENT_ID);
|
||||
const path = INVENTORY_TMC_TRANSFER_PATH.replace('{partId}', encodeURIComponent(partId));
|
||||
|
||||
const response: HttpClientResponse = await client.post(`${DICTIONARY_API_BASE_URL}${path}`, AadHttpClient.configurations.v1, {
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ url: portalRequestUrl })
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
let errBody = '';
|
||||
try {
|
||||
errBody = await response.text();
|
||||
} catch {
|
||||
// тело ошибки прочитать не удалось — оставляем пустым
|
||||
}
|
||||
throw new Error(`Inventory POST ${path}: ${response.status} — ${errBody}`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user