fix: права на заявку новому участнику после делегирования и замены исполнителя
Tests / frontend-test (push) Successful in 2m3s
Tests / frontend-test (push) Successful in 2m3s
Права на заявку новым участникам маршрута выдаёт бэкенд по вебхуку на изменение элемента списка данных. Делегирование и замена/удаление исполнителя меняли только список согласования — вебхук не приходил, и новый человек видел «Элемент не найден». Теперь после этих действий заявка перезаписывается с тем же статусом: значение не меняется, но появляется новая версия элемента и срабатывает вебхук. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -120,6 +120,7 @@ export class ApproverService {
|
|||||||
// activateNextQueued затем активирует первого делеганта (у него меньший order).
|
// activateNextQueued затем активирует первого делеганта (у него меньший order).
|
||||||
await this.approval.setStatus(current.id, REQUEST_STATUS.queued);
|
await this.approval.setStatus(current.id, REQUEST_STATUS.queued);
|
||||||
await this.approval.activateNextQueued(requestId);
|
await this.approval.activateNextQueued(requestId);
|
||||||
|
await this.touchRequest(requestId);
|
||||||
emitRequestsChanged();
|
emitRequestsChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,6 +172,7 @@ export class ApproverService {
|
|||||||
const row = this.editableExecutionRow(rows, rowId);
|
const row = this.editableExecutionRow(rows, rowId);
|
||||||
const position = await this.approval.getJobTitle(user.loginName).catch(() => '');
|
const position = await this.approval.getJobTitle(user.loginName).catch(() => '');
|
||||||
await this.approval.replaceApprover(rowId, { email: user.email, position });
|
await this.approval.replaceApprover(rowId, { email: user.email, position });
|
||||||
|
await this.touchRequest(requestId);
|
||||||
emitRequestsChanged();
|
emitRequestsChanged();
|
||||||
return row.status === REQUEST_STATUS.onExecution;
|
return row.status === REQUEST_STATUS.onExecution;
|
||||||
}
|
}
|
||||||
@@ -205,6 +207,7 @@ export class ApproverService {
|
|||||||
await this.approval.activateNextQueued(requestId);
|
await this.approval.activateNextQueued(requestId);
|
||||||
|
|
||||||
const rowsAfter = await this.approval.getForRequest(requestId);
|
const rowsAfter = await this.approval.getForRequest(requestId);
|
||||||
|
await this.touchRequest(requestId);
|
||||||
emitRequestsChanged();
|
emitRequestsChanged();
|
||||||
return rowsAfter
|
return rowsAfter
|
||||||
.filter((r) => r.status === REQUEST_STATUS.onExecution && !activeBefore.has(r.id))
|
.filter((r) => r.status === REQUEST_STATUS.onExecution && !activeBefore.has(r.id))
|
||||||
@@ -270,4 +273,16 @@ export class ApproverService {
|
|||||||
RequestStatus: status,
|
RequestStatus: status,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Права на заявку новым участникам маршрута выдаёт бэкенд по вебхуку на
|
||||||
|
// изменение элемента СПИСКА ДАННЫХ. Делегирование и замена/удаление
|
||||||
|
// исполнителя меняют только список согласования — без этой записи вебхук не
|
||||||
|
// приходит, и новый человек видит «Элемент не найден». Пишем текущий статус
|
||||||
|
// как есть: значение не меняется, но у элемента появляется новая версия.
|
||||||
|
private async touchRequest(id: number): Promise<void> {
|
||||||
|
const item = (await this.dataList().items.getById(id).select('RequestStatus')()) as {
|
||||||
|
RequestStatus?: string;
|
||||||
|
};
|
||||||
|
await this.updateRequestStatus(id, item.RequestStatus || '');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user