раздел «Отчёты» в боковом меню — скачивание отчёта по вакансиям #17

Merged
gorbenko.pavel merged 5 commits from report into main 2026-08-31 11:00:19 +00:00
3 changed files with 24 additions and 17 deletions
Showing only changes of commit bd7d83b9ff - Show all commits
@@ -18,8 +18,15 @@ export interface IFormData {
Responsible: string;
SubmitDate: string;
ClosingDeadline: string;
OpenReason: string;
OpenReasonDetails: string;
/**
* Префикс Vacancy — не для читаемости, а обход коллизии managed properties:
* колонка называлась просто OpenReason, и Search индексировал её только у
* ОДНОГО из списков сайта с таким internal name (см. sp-write props/field в
* tools). Переименовали и перенесли данные скриптом (2026-08-29) — трогать
* имя обратно нельзя, коллизия вернётся.
*/
VacancyOpenReason: string;
VacancyOpenReasonDetails: string;
Companies: ICompany[];
ObjectProject: string;
ObjectProjectId: string;
@@ -92,8 +99,8 @@ export const EMPTY_DATA: IFormData = {
Responsible: '',
SubmitDate: '',
ClosingDeadline: '',
OpenReason: '',
OpenReasonDetails: '',
VacancyOpenReason: '',
VacancyOpenReasonDetails: '',
Companies: [],
ObjectProject: '',
ObjectProjectId: '',
@@ -149,7 +156,7 @@ export const OPEN_REASON_REPLACE = 'Замена уволенного сотру
export const OPEN_REASON_TRANSFER = 'Перевод сотрудника';
export const OPEN_REASON_NEW = 'Новая штатная единица';
/** Варианты «Причина открытия вакансии» — совпадают с choices колонки OpenReason. */
/** Варианты «Причина открытия вакансии» — совпадают с choices колонки VacancyOpenReason. */
export const OPEN_REASON_OPTIONS: ISelectOption[] = [
{ value: OPEN_REASON_REPLACE, label: OPEN_REASON_REPLACE },
{ value: OPEN_REASON_TRANSFER, label: OPEN_REASON_TRANSFER },
@@ -5,8 +5,8 @@
{ "internalName": "RequestStatus", "title": "Статус", "type": "Choice", "choices": ["Черновик", "На согласовании", "Согласовано", "Отклонено", "Возвращена на доработку", "Выполнение", "Закрыта"] },
{ "internalName": "Responsible", "title": "Ответственный за подачу заявки", "type": "User", "userSelectionMode": "PeopleOnly", "required": true },
{ "internalName": "SubmitDate", "title": "Дата подачи заявки", "type": "DateTime", "dateOnly": true },
{ "internalName": "OpenReason", "title": "Причина открытия вакансии", "type": "Choice", "choices": ["Замена уволенного сотрудника", "Перевод сотрудника", "Новая штатная единица", "Другое"] },
{ "internalName": "OpenReasonDetails", "title": "Причина открытия — ФИО / уточнение", "type": "Text" },
{ "internalName": "VacancyOpenReason", "title": "Причина открытия вакансии", "type": "Choice", "choices": ["Замена уволенного сотрудника", "Перевод сотрудника", "Новая штатная единица", "Другое"] },
{ "internalName": "VacancyOpenReasonDetails", "title": "Причина открытия — ФИО / уточнение", "type": "Text" },
{ "internalName": "CompaniesJson", "title": "Компании (JSON)", "type": "Note" },
{ "internalName": "ObjectProject", "title": "Объект/Проект", "type": "Text" },
{ "internalName": "ObjectProjectId", "title": "Объект/Проект — Id", "type": "Text" },
@@ -11,7 +11,7 @@ import {
} from '../model';
export const ApplicationSection: React.FC<ISectionProps> = ({ data, set, context, onResponsibleChange }) => {
const reason = data.OpenReason;
const reason = data.VacancyOpenReason;
const showReasonDetails = reason !== '' && reason !== OPEN_REASON_NEW;
const reasonDetailsLabel =
reason === OPEN_REASON_REPLACE || reason === OPEN_REASON_TRANSFER ? 'ФИО сотрудника' : 'Уточните причину';
@@ -45,24 +45,24 @@ export const ApplicationSection: React.FC<ISectionProps> = ({ data, set, context
onChange={(v) => set('ClosingDeadline', v)}
/>
</FormField>
<FormField label="1.5 Причина открытия вакансии" htmlFor="OpenReason">
<FormField label="1.5 Причина открытия вакансии" htmlFor="VacancyOpenReason">
<Select
id="OpenReason"
value={data.OpenReason}
id="VacancyOpenReason"
value={data.VacancyOpenReason}
onChange={(v) => {
set('OpenReason', v);
if (v === '' || v === OPEN_REASON_NEW) set('OpenReasonDetails', '');
set('VacancyOpenReason', v);
if (v === '' || v === OPEN_REASON_NEW) set('VacancyOpenReasonDetails', '');
}}
options={OPEN_REASON_OPTIONS}
placeholder="— выберите —"
/>
</FormField>
{showReasonDetails && (
<FormField label={reasonDetailsLabel} htmlFor="OpenReasonDetails">
<FormField label={reasonDetailsLabel} htmlFor="VacancyOpenReasonDetails">
<TextInput
id="OpenReasonDetails"
value={data.OpenReasonDetails}
onChange={(v) => set('OpenReasonDetails', v)}
id="VacancyOpenReasonDetails"
value={data.VacancyOpenReasonDetails}
onChange={(v) => set('VacancyOpenReasonDetails', v)}
/>
</FormField>
)}