feat: added unique request form code to forms
Tests / frontend-test (push) Successful in 1m7s

This commit is contained in:
Тимур Городецкий
2026-08-10 16:59:20 +05:00
parent 9aa8f88d66
commit dcf3f06121
12 changed files with 85 additions and 29 deletions
@@ -15,6 +15,7 @@ const RecruitingSelectionForm: React.FC<IRequestFormProps> = ({ requestType, con
const [data, setData] = useState<IFormData>(EMPTY_DATA);
const [saving, setSaving] = useState<boolean>(false);
const [saved, setSaved] = useState<boolean>(false);
const [savedCode, setSavedCode] = useState<string | undefined>(undefined);
const [error, setError] = useState<string | null>(null);
const set: SetField = (key, value) => {
@@ -35,8 +36,9 @@ const RecruitingSelectionForm: React.FC<IRequestFormProps> = ({ requestType, con
setError(null);
setSaving(true);
try {
await submitRecruitingSelection(data);
const code = await submitRecruitingSelection(data);
setSaved(true);
setSavedCode(code);
if (onSaved) {
onSaved();
}
@@ -57,7 +59,9 @@ const RecruitingSelectionForm: React.FC<IRequestFormProps> = ({ requestType, con
</button>
<FormCard title={requestType.title} subtitle="Категория: Отдел рекрутинга">
{saved && <Alert variant="ok">Заявка сохранена в SharePoint.</Alert>}
{saved && (
<Alert variant="ok">Заявка сохранена в SharePoint. Код заявки: №{savedCode}.</Alert>
)}
{error && <Alert variant="err">{error}</Alert>}
<ApplicationSection {...sectionProps} />
@@ -1,7 +1,10 @@
import { getSP } from '../../shared/pnp/pnpjs';
import { buildRequestUniqueCode } from '../../shared/requestCode';
import { IFormData } from './model';
const LIST_TITLE = 'Заявка на подбор — данные';
// Тип заявки во внешнем approval-route API (GET /api/request-types → id 4).
const RECRUITING_SELECTION_REQUEST_TYPE_ID = 4;
// Поля-люди (один человек): логин → ensureUser → Id в колонку <Field>Id.
const PERSON_FIELDS: (keyof IFormData)[] = ['Responsible', 'ProposedMentor', 'DirectManager'];
@@ -16,8 +19,8 @@ async function resolveUserId(login: string): Promise<number> {
return ensured.Id;
}
/** Записать заявку «на подбор» в список данных SharePoint. */
export async function submitRecruitingSelection(data: IFormData): Promise<void> {
/** Записать заявку «на подбор» в список данных SharePoint. Возвращает уникальный код заявки. */
export async function submitRecruitingSelection(data: IFormData): Promise<string> {
const sp = getSP();
const item: Record<string, unknown> = {};
@@ -56,6 +59,8 @@ export async function submitRecruitingSelection(data: IFormData): Promise<void>
const added = await sp.web.lists.getByTitle(LIST_TITLE).items.add(item);
const id = (added as { Id: number }).Id;
// Уникальный код заявки: пока = id (id известен только после создания).
await sp.web.lists.getByTitle(LIST_TITLE).items.getById(id).update({ RequestUniqueCode: String(id) });
// Код известен только после создания элемента (нужен его Id).
const code = buildRequestUniqueCode(RECRUITING_SELECTION_REQUEST_TYPE_ID, id, new Date());
await sp.web.lists.getByTitle(LIST_TITLE).items.getById(id).update({ RequestUniqueCode: code });
return code;
}