fix: в приёме можно выбрать подбор в статусе «Выполнение» и «Закрыта»

После согласования подбор сразу уходит в «Выполнение», поэтому фильтр
только по «Согласовано» почти всегда давал пустой список. Теперь берутся
все утверждённые статусы, как в isApprovedStatus.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Тимур Городецкий
2026-09-25 17:08:29 +05:00
parent 8a6edf9d35
commit 45e79d5401
3 changed files with 8 additions and 5 deletions
@@ -28,7 +28,7 @@
заявки кнопка «Организация рабочего места на основе этой» открывает форму заявки кнопка «Организация рабочего места на основе этой» открывает форму
it-workplace-setup с префиллом (rpsource = id этой заявки). it-workplace-setup с префиллом (rpsource = id этой заявки).
- **Связь с «Заявкой на подбор» (SelectionRequest\*)** — необязательное поле в - **Связь с «Заявкой на подбор» (SelectionRequest\*)** — необязательное поле в
секции «Заявка»: поиск-выбор согласованной заявки на подбор (`SelectionRequestField` секции «Заявка»: поиск-выбор утверждённой (Согласовано / Выполнение / Закрыта) заявки на подбор (`SelectionRequestField`
+ `selectionLookup.ts`, только статус «Согласовано», ищет по всем партициям серии). + `selectionLookup.ts`, только статус «Согласовано», ищет по всем партициям серии).
Связь хранится тройкой полей `SelectionRequestId` / `SelectionRequestListId` / Связь хранится тройкой полей `SelectionRequestId` / `SelectionRequestListId` /
`SelectionRequestCode`, а НЕ нативным Lookup — списки партиционированы. В форме `SelectionRequestCode`, а НЕ нативным Lookup — списки партиционированы. В форме
@@ -210,7 +210,7 @@ export const SelectionRequestField: React.FC<ISelectionRequestFieldProps> = ({ d
)) ))
) : ( ) : (
<div className={styles.note}> <div className={styles.note}>
{loaded ? 'Нет согласованных заявок на подбор.' : 'Загрузка…'} {loaded ? 'Нет утверждённых заявок на подбор.' : 'Загрузка…'}
</div> </div>
)} )}
</div> </div>
@@ -28,8 +28,11 @@ export interface ISelectionRequestOption {
title: string; title: string;
} }
// Только согласованные заявки на подбор: приём оформляют по уже утверждённому подбору. // Только утверждённые заявки на подбор: приём оформляют по уже утверждённому подбору.
const APPROVED_FILTER = `RequestStatus eq '${REQUEST_STATUS.approved}'`; // После согласования подбор уходит исполнителю («Выполнение»), затем «Закрыта» —
// это тот же утверждённый подбор, поэтому берём все три статуса (как isApprovedStatus).
const APPROVED_STATUSES: string[] = [REQUEST_STATUS.approved, REQUEST_STATUS.execution, REQUEST_STATUS.closed];
const APPROVED_FILTER = APPROVED_STATUSES.map((s) => `RequestStatus eq '${s}'`).join(' or ');
// Предохранитель: партиция всё равно ограничена порогом элементов, но берём // Предохранитель: партиция всё равно ограничена порогом элементов, но берём
// разумный потолок, чтобы одиночный запрос не тянул весь список целиком. // разумный потолок, чтобы одиночный запрос не тянул весь список целиком.
@@ -64,7 +67,7 @@ async function queryPartition(list: IListLike, listId: string): Promise<ISelecti
} }
/** /**
* Все согласованные заявки на подбор из всех партиций серии (архив + текущая). * Все утверждённые (Согласовано / Выполнение / Закрыта) заявки на подбор из всех партиций серии (архив + текущая).
* *
* Реестр партиций знает серию → читаем каждую партицию по её listId (url), * Реестр партиций знает серию → читаем каждую партицию по её listId (url),
* заодно получая правильный rplist для ссылки. Реестр недоступен (approval-route * заодно получая правильный rplist для ссылки. Реестр недоступен (approval-route