fix: внес изменения в заявках рекрутинга от 16.09.26
Tests / frontend-test (push) Successful in 1m20s
Tests / frontend-test (push) Successful in 1m20s
This commit is contained in:
@@ -44,7 +44,7 @@ import {
|
||||
dataListTitle,
|
||||
dataListTitleForListId
|
||||
} from '../../shared/listTitles';
|
||||
import { FORM_ID, IFormData, EMPTY_DATA, SetField } from './model';
|
||||
import { FORM_ID, IFormData, EMPTY_DATA, SetField, todayIso } from './model';
|
||||
import { saveSelectionRequest, selectionApprovalService } from './submit';
|
||||
import { loadSelectionRequest } from './load';
|
||||
import { ApplicationSection } from './sections/ApplicationSection';
|
||||
@@ -125,7 +125,7 @@ const RecruitingSelectionForm: React.FC<IRequestFormProps> = ({
|
||||
}
|
||||
let alive = true;
|
||||
const user = context.pageContext.user;
|
||||
setData((prev) => ({ ...prev, Responsible: prev.Responsible || user.email }));
|
||||
setData((prev) => ({ ...prev, Responsible: prev.Responsible || user.email, SubmitDate: todayIso() }));
|
||||
getEmployeeOrganizations(context, user.email)
|
||||
.then((records) => {
|
||||
if (alive) {
|
||||
@@ -365,7 +365,7 @@ const RecruitingSelectionForm: React.FC<IRequestFormProps> = ({
|
||||
editor={matrix}
|
||||
search={(q) => approval.searchUsers(q)}
|
||||
waiting={!matrixReady}
|
||||
waitingText="Выберите «Объект/Проект» (п. 1.6), чтобы построить маршрут согласования."
|
||||
waitingText="Выберите «Объект/Проект» (п. 1.7), чтобы построить маршрут согласования."
|
||||
/>
|
||||
|
||||
<SubmitActions
|
||||
|
||||
@@ -16,6 +16,7 @@ export const FORM_ID: RequestTypeId = 'recruiting-selection';
|
||||
export interface IFormData {
|
||||
// Заявка
|
||||
Responsible: string;
|
||||
/** ISO YYYY-MM-DD, всегда сегодняшняя дата — поле read-only (см. todayIso). */
|
||||
SubmitDate: string;
|
||||
ClosingDeadline: string;
|
||||
/**
|
||||
@@ -65,7 +66,6 @@ export interface IFormData {
|
||||
RateAfterProbation: string;
|
||||
Awards: string;
|
||||
Bonuses: string;
|
||||
CompensationPackage: string;
|
||||
PieceworkPay: boolean;
|
||||
WorkSchedule: string;
|
||||
WorkScheduleOther: string;
|
||||
@@ -128,7 +128,6 @@ export const EMPTY_DATA: IFormData = {
|
||||
RateAfterProbation: '',
|
||||
Awards: '',
|
||||
Bonuses: '',
|
||||
CompensationPackage: '',
|
||||
PieceworkPay: false,
|
||||
WorkSchedule: '',
|
||||
WorkScheduleOther: '',
|
||||
@@ -144,8 +143,10 @@ export const EMPTY_DATA: IFormData = {
|
||||
|
||||
/** Варианты «Характер занятости» — совпадают с choices колонки EmploymentType. */
|
||||
export const EMPLOYMENT_TYPE_OPTIONS: ISelectOption[] = [
|
||||
{ value: 'Постоянная', label: 'Постоянная' },
|
||||
{ value: 'Временная', label: 'Временная' }
|
||||
{ value: 'Постоянный', label: 'Постоянный' },
|
||||
{ value: 'Временный', label: 'Временный' },
|
||||
{ value: 'Гибридный', label: 'Гибридный' },
|
||||
{ value: 'Удалённый', label: 'Удалённый' }
|
||||
];
|
||||
|
||||
/** Значение-триггер «Другое»: при нём показываем поле ручного ввода. */
|
||||
@@ -252,25 +253,33 @@ export const WORK_EXPERIENCE_OPTIONS: ISelectOption[] = [
|
||||
export const WORK_SCHEDULE_OPTIONS: ISelectOption[] = [
|
||||
{ value: '5/2', label: '5/2' },
|
||||
{ value: 'Вахтовый 30/30', label: 'Вахтовый 30/30' },
|
||||
{ value: '20/10', label: '20/10' },
|
||||
{ value: '30/15', label: '30/15' },
|
||||
{ value: '22/8', label: '22/8' },
|
||||
{ value: '15/15', label: '15/15' },
|
||||
{ value: 'Вахтовый 20/10', label: 'Вахтовый 20/10' },
|
||||
{ value: 'Вахтовый 30/15', label: 'Вахтовый 30/15' },
|
||||
{ value: 'Вахтовый 22/8', label: 'Вахтовый 22/8' },
|
||||
{ value: 'Вахтовый 15/15', label: 'Вахтовый 15/15' },
|
||||
{ value: '6/1', label: '6/1' },
|
||||
{ value: '1/2', label: '1/2' },
|
||||
{ value: '2/2', label: '2/2' },
|
||||
{ value: OTHER_VALUE, label: OTHER_VALUE }
|
||||
];
|
||||
|
||||
/** Варианты «Время работы» — совпадают с choices колонки WorkHours. */
|
||||
/** Варианты «Время работы» (24-часовой формат) — совпадают с choices колонки WorkHours. */
|
||||
export const WORK_HOURS_OPTIONS: ISelectOption[] = [
|
||||
{ value: '8-5', label: '8-5' },
|
||||
{ value: '9-6', label: '9-6' },
|
||||
{ value: '7-7', label: '7-7' },
|
||||
{ value: '8-8', label: '8-8' },
|
||||
{ value: '9-9', label: '9-9' },
|
||||
{ value: '08:00-17:00', label: '08:00-17:00' },
|
||||
{ value: '09:00-18:00', label: '09:00-18:00' },
|
||||
{ value: '07:00-19:00', label: '07:00-19:00' },
|
||||
{ value: '08:00-20:00', label: '08:00-20:00' },
|
||||
{ value: '09:00-21:00', label: '09:00-21:00' },
|
||||
{ value: OTHER_VALUE, label: OTHER_VALUE }
|
||||
];
|
||||
|
||||
/** Плейсхолдер для полей-людей. */
|
||||
export const PERSON_PLACEHOLDER = 'Начните вводить имя сотрудника…';
|
||||
|
||||
/** Сегодняшняя дата как YYYY-MM-DD — значение поля «Дата подачи заявки» (read-only). */
|
||||
export function todayIso(): string {
|
||||
const now = new Date();
|
||||
const m = now.getMonth() + 1;
|
||||
const d = now.getDate();
|
||||
return `${now.getFullYear()}-${m < 10 ? '0' : ''}${m}-${d < 10 ? '0' : ''}${d}`;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
{ "internalName": "OpenVacanciesCount", "title": "Количество открытых вакансий", "type": "Number" },
|
||||
|
||||
{ "internalName": "Position", "title": "Должность", "type": "Text", "required": true },
|
||||
{ "internalName": "EmploymentType", "title": "Характер занятости", "type": "Choice", "choices": ["Постоянная", "Временная"] },
|
||||
{ "internalName": "EmploymentType", "title": "Характер занятости", "type": "Choice", "choices": ["Постоянный", "Временный", "Гибридный", "Удалённый"] },
|
||||
{ "internalName": "JobFunction", "title": "Функционал", "type": "Note" },
|
||||
{ "internalName": "Competencies", "title": "Компетенции", "type": "Note" },
|
||||
{ "internalName": "PersonalTraits", "title": "Личностные характеристики", "type": "Note" },
|
||||
@@ -39,17 +39,16 @@
|
||||
{ "internalName": "RateAfterProbation", "title": "Ставка после ИС", "type": "Number", "decimals": 2 },
|
||||
{ "internalName": "Awards", "title": "Премии", "type": "Note" },
|
||||
{ "internalName": "Bonuses", "title": "Бонусы", "type": "Note" },
|
||||
{ "internalName": "CompensationPackage", "title": "Компенсационный пакет", "type": "Note" },
|
||||
{ "internalName": "PieceworkPay", "title": "Сдельная оплата труда", "type": "Boolean" },
|
||||
{ "internalName": "WorkSchedule", "title": "Режим работы", "type": "Choice", "choices": ["5/2", "Вахтовый 30/30", "20/10", "30/15", "22/8", "15/15", "6/1", "1/2", "2/2", "Другое"] },
|
||||
{ "internalName": "WorkSchedule", "title": "Режим работы", "type": "Choice", "choices": ["5/2", "Вахтовый 30/30", "Вахтовый 20/10", "Вахтовый 30/15", "Вахтовый 22/8", "Вахтовый 15/15", "6/1", "1/2", "2/2", "Другое"] },
|
||||
{ "internalName": "WorkScheduleOther", "title": "Режим работы (другое)", "type": "Text" },
|
||||
{ "internalName": "WorkHours", "title": "Время работы", "type": "Choice", "choices": ["8-5", "9-6", "7-7", "8-8", "9-9", "Другое"] },
|
||||
{ "internalName": "WorkHours", "title": "Время работы", "type": "Choice", "choices": ["08:00-17:00", "09:00-18:00", "07:00-19:00", "08:00-20:00", "09:00-21:00", "Другое"] },
|
||||
{ "internalName": "WorkHoursOther", "title": "Время работы (другое)", "type": "Text" },
|
||||
{ "internalName": "MaterialResponsibility", "title": "Материальная ответственность", "type": "Boolean" },
|
||||
{ "internalName": "MaterialResponsibility", "title": "Материальная ответственность (строительные площадки, склады)", "type": "Boolean" },
|
||||
{ "internalName": "WorkplaceProvisionJson", "title": "Обеспечение рабочего места (JSON)", "type": "Note" },
|
||||
{ "internalName": "ProposedMentor", "title": "Предполагаемый наставник", "type": "User", "userSelectionMode": "PeopleOnly" },
|
||||
{ "internalName": "DirectManager", "title": "Непосредственный руководитель", "type": "User", "userSelectionMode": "PeopleOnly" },
|
||||
{ "internalName": "ReferralProgram", "title": "Реферальная программа", "type": "Boolean" },
|
||||
{ "internalName": "ReferralProgram", "title": "Охватывается реферальной программой", "type": "Boolean" },
|
||||
{ "internalName": "HiringDecisionMaker", "title": "Кто принимает решение о приеме (собеседования)", "type": "User", "userSelectionMode": "PeopleOnly", "allowMultiple": true }
|
||||
]
|
||||
}
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ export const ApplicationSection: React.FC<ISectionProps> = ({ data, set, context
|
||||
/>
|
||||
</FormField>
|
||||
<FormField label="1.3 Дата подачи заявки" htmlFor="SubmitDate">
|
||||
<TextInput id="SubmitDate" type="date" value={data.SubmitDate} onChange={(v) => set('SubmitDate', v)} />
|
||||
<TextInput id="SubmitDate" type="date" value={data.SubmitDate} onChange={(v) => set('SubmitDate', v)} readOnly />
|
||||
</FormField>
|
||||
<FormField label="1.4 Крайний срок закрытия" htmlFor="ClosingDeadline">
|
||||
<TextInput
|
||||
|
||||
+9
-20
@@ -54,25 +54,14 @@ export const ConditionsSection: React.FC<ISectionProps> = ({
|
||||
onChange={(v) => set("Bonuses", v)}
|
||||
/>
|
||||
</FormField>
|
||||
<FormField
|
||||
label="5.5 Компенсационный пакет"
|
||||
htmlFor="CompensationPackage"
|
||||
full
|
||||
>
|
||||
<TextArea
|
||||
id="CompensationPackage"
|
||||
value={data.CompensationPackage}
|
||||
onChange={(v) => set("CompensationPackage", v)}
|
||||
/>
|
||||
</FormField>
|
||||
<FormField label="5.6 Сдельная оплата труда">
|
||||
<FormField label="5.5 Сдельная оплата труда">
|
||||
<Toggle
|
||||
checked={data.PieceworkPay}
|
||||
onChange={(v) => set("PieceworkPay", v)}
|
||||
onLabel="Да"
|
||||
/>
|
||||
</FormField>
|
||||
<FormField label="5.7 График работы" htmlFor="WorkSchedule">
|
||||
<FormField label="5.6 График работы" htmlFor="WorkSchedule">
|
||||
<Select
|
||||
id="WorkSchedule"
|
||||
value={data.WorkSchedule}
|
||||
@@ -93,7 +82,7 @@ export const ConditionsSection: React.FC<ISectionProps> = ({
|
||||
/>
|
||||
</FormField>
|
||||
)}
|
||||
<FormField label="5.8 Время работы" htmlFor="WorkHours">
|
||||
<FormField label="5.7 Время работы" htmlFor="WorkHours">
|
||||
<Select
|
||||
id="WorkHours"
|
||||
value={data.WorkHours}
|
||||
@@ -114,14 +103,14 @@ export const ConditionsSection: React.FC<ISectionProps> = ({
|
||||
/>
|
||||
</FormField>
|
||||
)}
|
||||
<FormField label="5.9 Материальная ответственность">
|
||||
<FormField label="5.8 Материальная ответственность (строительные площадки, склады)">
|
||||
<Toggle
|
||||
checked={data.MaterialResponsibility}
|
||||
onChange={(v) => set("MaterialResponsibility", v)}
|
||||
onLabel="Да"
|
||||
/>
|
||||
</FormField>
|
||||
<FormField label="5.10 Обеспечение рабочего места" full>
|
||||
<FormField label="5.9 Обеспечение рабочего места" full>
|
||||
<MultiChoiceField
|
||||
value={data.WorkplaceProvision}
|
||||
onChange={(v) => set("WorkplaceProvision", v)}
|
||||
@@ -130,14 +119,14 @@ export const ConditionsSection: React.FC<ISectionProps> = ({
|
||||
placeholder="Выберите категорию"
|
||||
/>
|
||||
</FormField>
|
||||
<FormField label="5.11 Реферальная программа">
|
||||
<FormField label="5.10 Охватывается реферальной программой">
|
||||
<Toggle
|
||||
checked={data.ReferralProgram}
|
||||
onChange={(v) => set("ReferralProgram", v)}
|
||||
onLabel="Да"
|
||||
/>
|
||||
</FormField>
|
||||
<FormField label="5.12 Предполагаемый наставник">
|
||||
<FormField label="5.11 Предполагаемый наставник">
|
||||
<PeopleField
|
||||
context={context}
|
||||
value={data.ProposedMentor}
|
||||
@@ -145,7 +134,7 @@ export const ConditionsSection: React.FC<ISectionProps> = ({
|
||||
placeholder={PERSON_PLACEHOLDER}
|
||||
/>
|
||||
</FormField>
|
||||
<FormField label="5.13 Непосредственный руководитель">
|
||||
<FormField label="5.12 Непосредственный руководитель">
|
||||
<PeopleField
|
||||
context={context}
|
||||
value={data.DirectManager}
|
||||
@@ -153,7 +142,7 @@ export const ConditionsSection: React.FC<ISectionProps> = ({
|
||||
placeholder={PERSON_PLACEHOLDER}
|
||||
/>
|
||||
</FormField>
|
||||
<FormField label="5.14 Кто принимает решение о приеме (собеседования)" full>
|
||||
<FormField label="5.13 Кто принимает решение о приеме (собеседования)" full>
|
||||
<PeopleFieldMulti
|
||||
context={context}
|
||||
value={data.HiringDecisionMaker}
|
||||
|
||||
Reference in New Issue
Block a user