feat: показ склада-источника в СЗ на перемещение ТМЦ по внешней ссылке
Tests / frontend-test (push) Successful in 1m16s

This commit is contained in:
Тимур Городецкий
2026-09-23 14:41:47 +05:00
parent 98226e4753
commit 936205be09
5 changed files with 24 additions and 4 deletions
@@ -149,10 +149,11 @@ const TmcTransferForm: React.FC<IRequestFormProps> = ({
if (editId || !nomenclatureId) {
return;
}
// Строку-источник фиксируем сразу, независимо от ответа справочника: она
// нужна при отправке для обратной записи ссылки в Dataverse. nomenclatureId
// отдельно в шапке не храним — он едет в каждой позиции ItemsJson.
setData((prev) => ({ ...prev, SourcePositionId: positionId || '' }));
// Строку-источник и склад фиксируем сразу, независимо от ответа справочника:
// строка нужна при отправке для обратной записи ссылки в Dataverse, склад —
// только справочно для пользователя (см. SourceStoreName в model.ts).
// nomenclatureId отдельно в шапке не храним — он едет в каждой позиции ItemsJson.
setData((prev) => ({ ...prev, SourcePositionId: positionId || '', SourceStoreName: storeName || '' }));
let alive = true;
getNomenclature(context, nomenclatureId, storeName)
.then((rows) => {
@@ -52,6 +52,7 @@ export async function loadTmcTransferRequest(itemId: number, listId?: string): P
'ContactPerson',
'ContactPhone',
'SourcePositionId',
'SourceStoreName',
'ItemsJson',
'RequestStatus',
'RequestUniqueCode'
@@ -78,6 +79,7 @@ export async function loadTmcTransferRequest(itemId: number, listId?: string): P
ContactPerson: (item.ContactPerson as string) || '',
ContactPhone: (item.ContactPhone as string) || '',
SourcePositionId: (item.SourcePositionId as string) || '',
SourceStoreName: (item.SourceStoreName as string) || '',
Items: parseItems(item.ItemsJson)
};
@@ -61,6 +61,13 @@ export interface IFormData {
* вручную в портале, без внешней ссылки.
*/
SourcePositionId: string;
/**
* Склад-источник — фильтр storeName из той же внешней ссылки (см. shared/routing
* и shared/dictionary/nomenclature.service). Само по себе на сохранение заявки
* не влияет — только справочная информация для заявителя/согласующего, откуда
* именно списываются ТМЦ. '' — ссылка без фильтра по складу или заявка заведена вручную.
*/
SourceStoreName: string;
// Табличная часть — позиции ТМЦ (сериализуется в ItemsJson). У строк из
// справочника есть nomenclatureId (см. ILineItem), у дописанных вручную — нет.
@@ -107,5 +114,6 @@ export const EMPTY_DATA: IFormData = {
ContactPerson: '',
ContactPhone: '',
SourcePositionId: '',
SourceStoreName: '',
Items: []
};
@@ -24,6 +24,7 @@
{ "internalName": "ContactPhone", "title": "Телефон исполнителя", "type": "Text" },
{ "internalName": "SourcePositionId", "title": "Id строки-источника (Dataverse)", "type": "Text" },
{ "internalName": "SourceStoreName", "title": "Склад-источник (внешняя ссылка)", "type": "Text" },
{ "internalName": "ItemsJson", "title": "Позиции ТМЦ (JSON)", "type": "Note" }
]
@@ -56,6 +56,14 @@ export const HeaderSection: React.FC<ISectionProps> = ({ data, set, context, pri
/>
</FormField>
{/* Только для заявок, открытых по внешней ссылке (см. SourceStoreName в model.ts) —
справочная информация, откуда именно списываются ТМЦ, на маршрут не влияет. */}
{data.SourceStoreName && (
<FormField label="Склад-источник" htmlFor="SourceStoreName">
<TextInput id="SourceStoreName" value={data.SourceStoreName} onChange={() => undefined} readOnly />
</FormField>
)}
<FormField label="Дата" htmlFor="RequestDate">
<TextInput id="RequestDate" type="date" value={data.RequestDate} onChange={(v) => set('RequestDate', v)} />
</FormField>