diff --git a/src/webparts/requestPortal/shared/approval/useMatrixEditor.test.ts b/src/webparts/requestPortal/shared/approval/useMatrixEditor.test.ts index e0c548c..6bb44f1 100644 --- a/src/webparts/requestPortal/shared/approval/useMatrixEditor.test.ts +++ b/src/webparts/requestPortal/shared/approval/useMatrixEditor.test.ts @@ -165,6 +165,11 @@ describe('statusForNewRow', () => { expect(statusForNewRow(rows)).toBe('—'); }); + it('решение согласующего не копируется, даже если оно у всех одинаковое', () => { + expect(statusForNewRow([row({ status: 'Возвращена на доработку' })])).toBe('—'); + expect(statusForNewRow([row({ status: 'Согласовано' }), row({ status: 'Согласовано' })])).toBe('—'); + }); + it('пустой статус приравнивается к прочерку', () => { expect(statusForNewRow([row({ status: '' }), row({ status: '—' })])).toBe('—'); }); diff --git a/src/webparts/requestPortal/shared/approval/useMatrixEditor.ts b/src/webparts/requestPortal/shared/approval/useMatrixEditor.ts index d3f9e10..beb882e 100644 --- a/src/webparts/requestPortal/shared/approval/useMatrixEditor.ts +++ b/src/webparts/requestPortal/shared/approval/useMatrixEditor.ts @@ -3,6 +3,7 @@ import { friendlyErrorMessage } from '../diagnostics'; import { IMatrixRow } from './models/IMatrixRow'; import { ISiteUser } from './models/ISiteUser'; import { IApproverOrgInfo } from './approverOrgInfo'; +import { REQUEST_STATUS } from './models/statuses'; export interface IUseMatrixEditor { rows: IMatrixRow[]; @@ -79,9 +80,22 @@ export function withOrders(rows: IMatrixRow[]): IMatrixRow[] { // строкам общий статус, и показывать «—» рядом с «Черновик» было бы враньём. // Если статусы разные (возвращённая заявка, часть шагов уже с решениями) — // честнее оставить «—»: в какое состояние попадёт новый шаг, ещё не решено. +// +// Решение согласующего (Согласовано / Возвращена / Отклонено / Выполнено) не +// копируем никогда, даже если оно у всех строк одинаковое: у только что +// добавленного человека решения нет. Иначе после возврата заявки с одним +// согласующим каждый новый шаг показывался «Возвращена на доработку». +const DECISION_STATUSES: string[] = [ + REQUEST_STATUS.approved, + REQUEST_STATUS.returned, + REQUEST_STATUS.rejected, + REQUEST_STATUS.executed, +]; + export function statusForNewRow(rows: IMatrixRow[]): string { if (rows.length === 0) return '—'; const first = rows[0].status || '—'; + if (DECISION_STATUSES.indexOf(first) >= 0) return '—'; return rows.every((r) => (r.status || '—') === first) ? first : '—'; }