This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user