fix: changed SP list order field to StepOrder

This commit is contained in:
Тимур Городецкий
2026-08-04 12:36:40 +05:00
parent c2e785961b
commit ed21944628
17 changed files with 249 additions and 61 deletions
@@ -3,7 +3,7 @@ import '@pnp/sp/webs';
import '@pnp/sp/lists';
import '@pnp/sp/items';
import { ApprovalListService } from './approvalList.service';
import { REQUEST_STATUS } from './models/statuses';
import { REQUEST_STATUS, APPROVAL_PHASE } from './models/statuses';
import { IApprovalRow } from './models/IApprovalRow';
import { ISiteUser } from './models/ISiteUser';
@@ -52,11 +52,13 @@ export class ApproverService {
const prevOrder = before.length > 0 ? before[before.length - 1].order : current.order - 1;
const newOrder = (prevOrder + current.order) / 2;
const position = await this.approval.getJobTitle(user.loginName);
// Делегат наследует фазу той строки, вместо которой согласует (согласование/исполнение).
await this.approval.addApproverRow(
requestId,
{ email: user.email, position, allowReassign: false },
newOrder,
REQUEST_STATUS.onApproval
REQUEST_STATUS.onApproval,
current.phase
);
}
@@ -75,13 +77,28 @@ export class ApproverService {
return requestStatus;
}
// Статус заявки из строк маршрута с учётом фазы:
// 1) фаза согласования: отклонение/возврат → соответствующий статус;
// не все согласовали → «На согласовании».
// 2) согласование завершено: нет исполнителей → «Согласовано» (финал);
// исполнители есть и не все выполнили → «Выполнение»;
// все выполнили → «Закрыта».
// Строка «выполнена» исполнителем помечается тем же статусом «Согласовано»
// (действие «Выполнено» в DecisionPanel), фазы различаются колонкой Phase.
private computeRequestStatus(rows: IApprovalRow[]): string {
if (rows.some((r) => r.status === REQUEST_STATUS.rejected)) return REQUEST_STATUS.rejected;
if (rows.some((r) => r.status === REQUEST_STATUS.returned)) return REQUEST_STATUS.returned;
if (rows.length > 0 && rows.every((r) => r.status === REQUEST_STATUS.approved)) {
return REQUEST_STATUS.approved;
}
return REQUEST_STATUS.onApproval;
const execRows = rows.filter((r) => r.phase === APPROVAL_PHASE.execution);
const approvalRows = rows.filter((r) => r.phase !== APPROVAL_PHASE.execution);
if (approvalRows.some((r) => r.status === REQUEST_STATUS.rejected)) return REQUEST_STATUS.rejected;
if (approvalRows.some((r) => r.status === REQUEST_STATUS.returned)) return REQUEST_STATUS.returned;
const approvalDone =
approvalRows.length === 0 || approvalRows.every((r) => r.status === REQUEST_STATUS.approved);
if (!approvalDone) return REQUEST_STATUS.onApproval;
if (execRows.length === 0) return REQUEST_STATUS.approved;
if (execRows.every((r) => r.status === REQUEST_STATUS.approved)) return REQUEST_STATUS.closed;
return REQUEST_STATUS.execution;
}
private async updateRequestStatus(id: number, status: string): Promise<void> {