diff --git a/src/webparts/requestPortal/forms/RecruitingHire/README.md b/src/webparts/requestPortal/forms/RecruitingHire/README.md index 93d96ff..53fcd82 100644 --- a/src/webparts/requestPortal/forms/RecruitingHire/README.md +++ b/src/webparts/requestPortal/forms/RecruitingHire/README.md @@ -17,6 +17,8 @@ (`CompanyPickerMulti`), хранится JSON-массивом `{Id,Name}` в Note-колонке `CompaniesJson`. - **График работы (WorkSchedule)** — выпадающий список (набор совпадает с «Заявкой на подбор»); при выборе «Другое» появляется ручной ввод `WorkScheduleOther`. +- **Время работы (WorkHours)** — так же, как график: набор и колонка сайта общие + с «Заявкой на подбор», оттуда подставляется; «Другое» → `WorkHoursOther`. - **Испытательный срок (ProbationPeriod)** — выпадающий список частых сроков. - **Рекрутинговое агентство (условный блок, последняя секция)** — `Toggle` `RecruitingAgency`; при включении показываются «Название компании» (`AgencyName`) diff --git a/src/webparts/requestPortal/forms/RecruitingHire/load.ts b/src/webparts/requestPortal/forms/RecruitingHire/load.ts index f6cc282..6941bef 100644 --- a/src/webparts/requestPortal/forms/RecruitingHire/load.ts +++ b/src/webparts/requestPortal/forms/RecruitingHire/load.ts @@ -25,6 +25,7 @@ const SCALAR_FIELDS: (keyof IFormData)[] = [ 'HireCandidateName', 'HireHireDate', 'Position', 'Department', 'SiteLocation', 'PpeHeight', 'PpeClothingSize', 'PpeShoeSize', 'ProbationPeriod', 'ProbationPeriodOther', 'SalaryProbation', 'SalaryAfterProbation', 'WorkSchedule', 'WorkScheduleOther', + 'WorkHours', 'WorkHoursOther', 'AgencyName', 'AgencyTerms', 'HireSecurityNote', 'HireApproverNote', 'SelectionRequestId', 'SelectionRequestListId', 'SelectionRequestCode' ]; diff --git a/src/webparts/requestPortal/forms/RecruitingHire/model.ts b/src/webparts/requestPortal/forms/RecruitingHire/model.ts index c901068..e409b5f 100644 --- a/src/webparts/requestPortal/forms/RecruitingHire/model.ts +++ b/src/webparts/requestPortal/forms/RecruitingHire/model.ts @@ -75,6 +75,12 @@ export interface IFormData { SalaryAfterProbation: string; WorkSchedule: string; WorkScheduleOther: string; + /** + * Время работы — та же колонка сайта WorkHours (Choice), что в заявке на подбор: + * оттуда и подставляется (см. selectionPrefill). + */ + WorkHours: string; + WorkHoursOther: string; /** * Сдельная оплата труда — информационная отметка, на обязательность окладов не * влияет. Та же колонка сайта PieceworkPay (Boolean), что в заявке на подбор: @@ -132,6 +138,8 @@ export const EMPTY_DATA: IFormData = { SalaryAfterProbation: '', WorkSchedule: '', WorkScheduleOther: '', + WorkHours: '', + WorkHoursOther: '', PieceworkPay: false, RecruitingAgency: false, AgencyName: '', @@ -201,5 +209,19 @@ export const WORK_SCHEDULE_OPTIONS: ISelectOption[] = [ { value: OTHER_VALUE, label: OTHER_VALUE } ]; +/** + * Варианты «Время работы» (24-часовой формат) — совпадают с набором в форме + * «Заявка на подбор» (WORK_HOURS_OPTIONS) и с choices колонки WorkHours: + * формы независимы, значения продублированы намеренно. + */ +export const WORK_HOURS_OPTIONS: ISelectOption[] = [ + { 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 = 'Начните вводить имя сотрудника…'; diff --git a/src/webparts/requestPortal/forms/RecruitingHire/provisioning.json b/src/webparts/requestPortal/forms/RecruitingHire/provisioning.json index 4c97646..d49ba14 100644 --- a/src/webparts/requestPortal/forms/RecruitingHire/provisioning.json +++ b/src/webparts/requestPortal/forms/RecruitingHire/provisioning.json @@ -41,6 +41,8 @@ { "internalName": "SalaryAfterProbation", "title": "Оклад по завершении ИС", "type": "Number", "decimals": 2 }, { "internalName": "WorkSchedule", "title": "График работы", "type": "Text" }, { "internalName": "WorkScheduleOther", "title": "График работы (другое)", "type": "Text" }, + { "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": "PieceworkPay", "title": "Сдельная оплата труда", "type": "Boolean" }, { "internalName": "RecruitingAgency", "title": "Рекрутинговое агентство", "type": "Boolean" }, diff --git a/src/webparts/requestPortal/forms/RecruitingHire/sections/ConditionsSection.tsx b/src/webparts/requestPortal/forms/RecruitingHire/sections/ConditionsSection.tsx index 134d6f4..e5459da 100644 --- a/src/webparts/requestPortal/forms/RecruitingHire/sections/ConditionsSection.tsx +++ b/src/webparts/requestPortal/forms/RecruitingHire/sections/ConditionsSection.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { CollapseSection, FormField, TextInput, MoneyInput, Select, Toggle } from '../../../shared/ui'; -import { ISectionProps, OTHER_VALUE, WORK_SCHEDULE_OPTIONS, PROBATION_PERIOD_OPTIONS } from '../model'; +import { ISectionProps, OTHER_VALUE, WORK_SCHEDULE_OPTIONS, WORK_HOURS_OPTIONS, PROBATION_PERIOD_OPTIONS } from '../model'; interface IConditionsSectionProps extends ISectionProps { /** Начальник расчётной группы правит оклады даже в режиме просмотра (см. approverRights.ts). */ @@ -67,8 +67,29 @@ export const ConditionsSection: React.FC = ({ data, set /> )} + +