fix: новый шаг в матрице не копирует решение согласующего
После возврата заявки с одним согласующим каждый добавленный на доработке шаг показывался «Возвращена на доработку»: statusForNewRow копировал общий статус строк. Решения (согласовано/возвращено/отклонено/выполнено) больше не копируются — новый шаг показывается с «—». В SharePoint это не попадало: writeRoute и раньше писал всем строкам «Ждёт очереди». Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -165,6 +165,11 @@ describe('statusForNewRow', () => {
|
|||||||
expect(statusForNewRow(rows)).toBe('—');
|
expect(statusForNewRow(rows)).toBe('—');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('решение согласующего не копируется, даже если оно у всех одинаковое', () => {
|
||||||
|
expect(statusForNewRow([row({ status: 'Возвращена на доработку' })])).toBe('—');
|
||||||
|
expect(statusForNewRow([row({ status: 'Согласовано' }), row({ status: 'Согласовано' })])).toBe('—');
|
||||||
|
});
|
||||||
|
|
||||||
it('пустой статус приравнивается к прочерку', () => {
|
it('пустой статус приравнивается к прочерку', () => {
|
||||||
expect(statusForNewRow([row({ status: '' }), row({ status: '—' })])).toBe('—');
|
expect(statusForNewRow([row({ status: '' }), row({ status: '—' })])).toBe('—');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { friendlyErrorMessage } from '../diagnostics';
|
|||||||
import { IMatrixRow } from './models/IMatrixRow';
|
import { IMatrixRow } from './models/IMatrixRow';
|
||||||
import { ISiteUser } from './models/ISiteUser';
|
import { ISiteUser } from './models/ISiteUser';
|
||||||
import { IApproverOrgInfo } from './approverOrgInfo';
|
import { IApproverOrgInfo } from './approverOrgInfo';
|
||||||
|
import { REQUEST_STATUS } from './models/statuses';
|
||||||
|
|
||||||
export interface IUseMatrixEditor {
|
export interface IUseMatrixEditor {
|
||||||
rows: IMatrixRow[];
|
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 {
|
export function statusForNewRow(rows: IMatrixRow[]): string {
|
||||||
if (rows.length === 0) return '—';
|
if (rows.length === 0) return '—';
|
||||||
const first = rows[0].status || '—';
|
const first = rows[0].status || '—';
|
||||||
|
if (DECISION_STATUSES.indexOf(first) >= 0) return '—';
|
||||||
return rows.every((r) => (r.status || '—') === first) ? first : '—';
|
return rows.every((r) => (r.status || '—') === first) ? first : '—';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user