Search requests (#2)

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/2
Co-authored-by: timur.gorodetskiy <timur.gorodetskiy@tnsu.kz>
Co-committed-by: timur.gorodetskiy <timur.gorodetskiy@tnsu.kz>
This commit was merged in pull request #2.
This commit is contained in:
2026-08-06 09:59:07 +00:00
committed by gorbenko.pavel
parent 571614c031
commit 6acb22dd95
23 changed files with 1622 additions and 459 deletions
@@ -3,18 +3,28 @@
// В слое формы кодом ставятся Draft (черновик) и OnApproval (отправка на согласование);
// Approved/Rejected/Returned выставляются при решениях согласующих; Execution/Closed —
// зарезервированы под будущие этапы.
// Статусы СТРОК списка «— согласование» (не заявки в контентном списке):
// draft/rejected/returned — общие с заявкой; остальные — только для строк
// маршрута, по фазам:
// Согласование: queued («Ждёт очереди») → onApproval («На согласовании») → approved/rejected/returned.
// Исполнение: queued → onExecution («На исполнении») → executed («Выполнено»).
// Активация — только через ApprovalListService.activateNextQueued (вызывается
// при отправке заявки и после каждого положительного решения, см.
// approvalSubmission.service.ts/writeRoute, approverDecision.service.ts/decide):
// среди строк со статусом queued в текущей фазе находит наименьший StepOrder
// и переводит её (или несколько, если делят один order — параллельный шаг) в
// onApproval/onExecution. Так «чья сейчас очередь» — просто значение колонки
// Status, без пересчёта порядка на клиенте.
export const REQUEST_STATUS = {
draft: 'Черновик',
onApproval: 'На согласовании',
queued: 'Ждёт очереди',
onExecution: 'На исполнении',
executed: 'Выполнено',
approved: 'Согласовано',
rejected: 'Отклонено',
returned: 'Возвращена на доработку',
// Статус СТРОКИ маршрута, до которой ещё не дошла очередь (активен только текущий шаг).
queued: 'Ждёт очереди',
// Статусы СТРОК фазы исполнения: активная очередь исполнителя и выполнено.
onExecution: 'На исполнении',
executed: 'Выполнено',
// Статусы ЗАЯВКИ на этапе исполнения.
// Статус ЗАЯВКИ (не строки) на этапе исполнения.
execution: 'Выполнение',
closed: 'Закрыта',
} as const;
@@ -33,20 +43,40 @@ export function isEditableStatus(status: string | undefined): boolean {
return !status || EDITABLE_STATUSES.indexOf(status) !== -1;
}
// Полный набор значений для Choice-колонки Status при провижининге.
// Наборов значений ДВА, и они не совпадают — это разные сущности:
//
// 1) статус ЗАЯВКИ — колонка Status в списке «… — данные». Пишется формой
// (Черновик/На согласовании) и computeRequestStatus после каждого решения.
// «Ждёт очереди»/«На исполнении»/«Выполнено» здесь не бывают: это состояния
// отдельного шага маршрута, а не заявки целиком.
//
// 2) статус СТРОКИ МАРШРУТА — колонка RequestStatus в списке «… — согласование».
// Пишется createSteps/activateNextQueued/setDecision. «Выполнение»/«Закрыта»
// здесь не бывают: это агрегатные состояния заявки, у отдельного шага
// смысла не имеют.
//
// Держать их в синхроне с forms/*/provisioning.json и forms/*/approval/provisioning.json.
export const REQUEST_STATUS_CHOICES: string[] = [
REQUEST_STATUS.draft,
REQUEST_STATUS.onApproval,
REQUEST_STATUS.approved,
REQUEST_STATUS.rejected,
REQUEST_STATUS.returned,
REQUEST_STATUS.queued,
REQUEST_STATUS.onExecution,
REQUEST_STATUS.executed,
REQUEST_STATUS.execution,
REQUEST_STATUS.closed,
];
export const APPROVAL_ROW_STATUS_CHOICES: string[] = [
REQUEST_STATUS.draft,
REQUEST_STATUS.queued,
REQUEST_STATUS.onApproval,
REQUEST_STATUS.onExecution,
REQUEST_STATUS.approved,
REQUEST_STATUS.executed,
REQUEST_STATUS.rejected,
REQUEST_STATUS.returned,
];
// Фаза строки в списке маршрута: согласование (кто одобряет) и исполнение
// (кто выполняет после согласования). Обе фазы живут в одном списке «— согласование»,
// строки различаются колонкой Phase. Значения приходят из внешнего API как