feat: Алтынай Бултурукова правит все поля заявок на подбор и приём на своём шаге
Tests / frontend-test (push) Successful in 1m14s
Tests / frontend-test (push) Successful in 1m14s
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* Кто на СВОЁМ АКТИВНОМ шаге согласования может править ВСЕ поля заявки
|
||||
* (а не только отдельные, как расчётная группа в RecruitingHire).
|
||||
*
|
||||
* Пока фиксированный email одного человека (Алтынай Бултурукова, начальник
|
||||
* отдела подбора и адаптации персонала) — группы SharePoint для этого ещё
|
||||
* нет, как и в routeEditRights.ts. ВРЕМЕННО.
|
||||
*
|
||||
* Подключено только в «Заявке на подбор» и «Заявке на прием» (Реферальная
|
||||
* рекомендация — нет, по решению Тимура 2026-09-24). Вложения этим правом не
|
||||
* открываются — только поля.
|
||||
*/
|
||||
const FULL_FIELD_EDITOR_EMAILS: ReadonlySet<string> = new Set([
|
||||
'a.bulturukova@tnsu.kz' // Алтынай Бултурукова
|
||||
]);
|
||||
|
||||
/** Может ли этот email править все поля заявки на своём активном шаге (см. выше). */
|
||||
export function canEditAllFields(email: string | undefined): boolean {
|
||||
return !!email && FULL_FIELD_EDITOR_EMAILS.has(email.trim().toLowerCase());
|
||||
}
|
||||
@@ -63,6 +63,7 @@ export type { IUseMatrixEditor } from './useMatrixEditor';
|
||||
export { resolveApproverOrgInfo } from './approverOrgInfo';
|
||||
export type { IApproverOrgInfo } from './approverOrgInfo';
|
||||
export { canEditRoute } from './routeEditRights';
|
||||
export { canEditAllFields } from './fullEditRights';
|
||||
export { ApprovalMatrix } from './ui/ApprovalMatrix';
|
||||
export { UserPicker } from './ui/UserPicker';
|
||||
export { DecisionPanel } from './ui/DecisionPanel';
|
||||
|
||||
@@ -26,8 +26,10 @@ interface IDecisionPanelProps {
|
||||
*/
|
||||
onDecided?: (status: string) => void | Promise<void>;
|
||||
/** Выполнить ПЕРЕД применением решения (напр. сохранить поля, заполненные
|
||||
* согласующим). Если бросит — решение не применяется, показывается ошибка. */
|
||||
onBeforeDecide?: () => Promise<void>;
|
||||
* согласующим). Если бросит — решение не применяется, показывается ошибка.
|
||||
* decision — какое решение применяется (проверки, нужные только при
|
||||
* согласовании, не должны мешать возврату/отклонению). */
|
||||
onBeforeDecide?: (decision: ApproverDecision) => Promise<void>;
|
||||
/** Поиск пользователей — нужен для переназначения (делегирования). Без него
|
||||
* кнопка «Переназначить» не показывается. */
|
||||
search?: (query: string) => Promise<ISiteUser[]>;
|
||||
@@ -110,7 +112,7 @@ export const DecisionPanel: React.FC<IDecisionPanelProps> = ({
|
||||
setSubmitting(true);
|
||||
try {
|
||||
if (onBeforeDecide) {
|
||||
await onBeforeDecide();
|
||||
await onBeforeDecide(decision);
|
||||
}
|
||||
const status = await service.decide(requestId, pendingRow.id, decision, comment.trim());
|
||||
// Сначала побочные действия решения, потом «сохранено»: пока onDecided не
|
||||
|
||||
Reference in New Issue
Block a user