This commit is contained in:
@@ -12,6 +12,8 @@ export { CompanyPickerMulti } from './ui/CompanyPickerMulti';
|
||||
export type { ICompanyPickerMultiProps } from './ui/CompanyPickerMulti';
|
||||
export { getEmployeeOrganizations, formatEmployeeOrganizations } from './employeeOrganizations.service';
|
||||
export type { IEmployeeOrganization } from './models/IEmployeeOrganization';
|
||||
export { getNomenclature } from './nomenclature.service';
|
||||
export type { INomenclatureRow } from './models/INomenclatureRow';
|
||||
export {
|
||||
directorPositionFor,
|
||||
getEmployeeEmailByPosition,
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* Строка ответа GET /Dictionary/Nomenclature/{id}. Эндпоинт возвращает МАССИВ:
|
||||
* одну и ту же номенклатуру (общий id) в разбивке ПО СКЛАДАМ — у каждой строки
|
||||
* свой storeName и свой остаток quantity. Заполняет табличную часть формы
|
||||
* «СЗ на перемещение ТМЦ» (см. TmcTransferForm prefill).
|
||||
*/
|
||||
export interface INomenclatureRow {
|
||||
/** Id номенклатуры (совпадает у всех строк ответа — это nomenclatureId из URL). */
|
||||
id: string;
|
||||
/** Наименование. */
|
||||
name: string;
|
||||
/** Полное наименование. */
|
||||
fullName: string;
|
||||
/** Группа номенклатуры. */
|
||||
groupName: string;
|
||||
/** Единица измерения (напр. «шт»). */
|
||||
unit: string;
|
||||
/** Остаток на складе (число). */
|
||||
quantity: number;
|
||||
/** Номенклатурный код (напр. «БК000003794»). */
|
||||
code: string;
|
||||
/** Код АГСК (напр. «247-201-1002»). */
|
||||
agskCode: string;
|
||||
/** Тип номенклатуры (напр. «Сырьё и материалы»). */
|
||||
nomenclatureType: string;
|
||||
/** Склад, на котором лежит остаток. */
|
||||
storeName: string;
|
||||
/** МОЛ (материально ответственное лицо). */
|
||||
mol: string;
|
||||
/** Комментарий. */
|
||||
comment: string;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
import { AadHttpClient, HttpClientResponse } from '@microsoft/sp-http';
|
||||
import { WebPartContext } from '@microsoft/sp-webpart-base';
|
||||
import { APPROVAL_API_CLIENT_ID, DICTIONARY_API_BASE_URL } from '../config';
|
||||
import { INomenclatureRow } from './models/INomenclatureRow';
|
||||
|
||||
/**
|
||||
* GET /Dictionary/Nomenclature/{id} — остатки номенклатуры по складам. Ответ —
|
||||
* плоский массив (как /Dictionary/Departments): одна номенклатура в разбивке по
|
||||
* складам. Авторизация — тот же AAD-app, что и у остальных справочников.
|
||||
*
|
||||
* storeName (необязательный) — фильтр по складу: API вернёт остатки только по
|
||||
* нему. Приходит по внешней ссылке (см. shared/routing). Пусто — все склады.
|
||||
*
|
||||
* Кэш не нужен: вызывается один раз при открытии формы по внешней ссылке и
|
||||
* зависит от конкретного id (не общий справочник на всю сессию).
|
||||
*/
|
||||
export async function getNomenclature(
|
||||
context: WebPartContext,
|
||||
id: string,
|
||||
storeName?: string
|
||||
): Promise<INomenclatureRow[]> {
|
||||
const client = await context.aadHttpClientFactory.getClient(APPROVAL_API_CLIENT_ID);
|
||||
const query = storeName ? `?storeName=${encodeURIComponent(storeName)}` : '';
|
||||
const response: HttpClientResponse = await client.get(
|
||||
`${DICTIONARY_API_BASE_URL}/Dictionary/Nomenclature/${encodeURIComponent(id)}${query}`,
|
||||
AadHttpClient.configurations.v1
|
||||
);
|
||||
if (!response.ok) {
|
||||
throw new Error(`Dictionary/Nomenclature/${id}: ${response.status} ${response.statusText}`);
|
||||
}
|
||||
return response.json();
|
||||
}
|
||||
Reference in New Issue
Block a user