feat: параметр source во внешней ссылке ТМЦ сохраняется в заявке
Внешняя система (напр. КПС) передаёт source — пишем его в новую колонку SourceSystem рядом с SourcePositionId, чтобы по заявке было видно, откуда она пришла и куда отвечать. Запоминание источника вынесено в отдельный эффект: positionId/source/склад сохраняются и по ссылке без nomenclatureId. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -129,6 +129,10 @@ describe('parseRoute', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('внешняя ссылка ТМЦ: source прокидывается в create как sourceSystem', () => {
|
||||
expect(parseRoute('?rptype=wh-tmc-transfer&positionId=abc&source=kps').sourceSystem).toBe('kps');
|
||||
});
|
||||
|
||||
it('positionId/nomenclatureId без rptype игнорируются — обычная подача', () => {
|
||||
// Внешние параметры имеют смысл только при открытии формы (rptype); сами по
|
||||
// себе не должны влиять на маршрут.
|
||||
|
||||
@@ -86,6 +86,13 @@ export interface IRoute {
|
||||
* этому складу. Приходит по той же внешней ссылке; пусто — все склады.
|
||||
*/
|
||||
storeName?: string;
|
||||
/**
|
||||
* Система, из которой открыли форму по внешней ссылке (параметр `source`,
|
||||
* напр. 'kps'). Сохраняется в заявке, чтобы знать, откуда она пришла и куда
|
||||
* отвечать. Не путать с sourceId (rpsource) — тот про предзаполнение из
|
||||
* другой заявки портала.
|
||||
*/
|
||||
sourceSystem?: string;
|
||||
/** Подвкладка «Моих заявок»; задана только при nav='own'. */
|
||||
ownTab?: OwnTab;
|
||||
/** Фильтр по статусу заявки; задан только при nav='own' и ownTab='created'. */
|
||||
@@ -378,6 +385,7 @@ export function parseRoute(search: string = window.location.search): IRoute {
|
||||
const positionId = params.get('positionId') ?? undefined;
|
||||
const nomenclatureId = params.get('nomenclatureId') ?? undefined;
|
||||
const storeName = params.get('storeName') ?? undefined;
|
||||
const sourceSystem = params.get('source') ?? undefined;
|
||||
|
||||
// Подвкладка и фильтр — состояние раздела «Мои заявки», поэтому вне его не
|
||||
// читаются вовсе (иначе чужой rptab из ссылки «протёк» бы в другой раздел).
|
||||
@@ -432,7 +440,7 @@ export function parseRoute(search: string = window.location.search): IRoute {
|
||||
// rpmode=approve без валидного rpid) должна откатываться на обычную подачу,
|
||||
// а не тихо превращаться в открытие пустой формы другого режима.
|
||||
if (formKey && mode !== 'approve' && mode !== 'edit') {
|
||||
return { mode: 'create', nav: 'new', formKey, positionId, nomenclatureId, storeName };
|
||||
return { mode: 'create', nav: 'new', formKey, positionId, nomenclatureId, storeName, sourceSystem };
|
||||
}
|
||||
return { mode: 'submit', nav, ownTab, ownStatus, allTypeId, page, query };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user