From 8330790bf945b45e5e8747229782ba86392a7f99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80=20=D0=93=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= Date: Fri, 9 Oct 2026 14:16:21 +0500 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BE=D1=82=D0=BC=D0=B5=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=C2=AB=D0=A1=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F?= =?UTF-8?q?=20=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D0=B0=20=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=C2=BB=20=D0=B2=20=D0=B7=D0=B0=D1=8F=D0=B2=D0=BA?= =?UTF-8?q?=D0=B5=20=D0=BD=D0=B0=20=D0=BF=D1=80=D0=B8=D1=91=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Пункт 4.5 в «Условиях оплаты и оформления» — информационная отметка, на обязательность окладов не влияет. Та же колонка сайта PieceworkPay (Boolean), что в заявке на подбор, и оттуда же подставляется при связи с подбором (поле 1.1 и «Оформить приём по этой заявке»). Co-Authored-By: Claude Opus 5.5 (1M context) --- src/webparts/requestPortal/forms/RecruitingHire/load.ts | 2 ++ src/webparts/requestPortal/forms/RecruitingHire/model.ts | 7 +++++++ .../requestPortal/forms/RecruitingHire/provisioning.json | 1 + .../forms/RecruitingHire/sections/ConditionsSection.tsx | 6 +++++- .../requestPortal/forms/RecruitingHire/selectionPrefill.ts | 1 + 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/webparts/requestPortal/forms/RecruitingHire/load.ts b/src/webparts/requestPortal/forms/RecruitingHire/load.ts index ada91f8..f6cc282 100644 --- a/src/webparts/requestPortal/forms/RecruitingHire/load.ts +++ b/src/webparts/requestPortal/forms/RecruitingHire/load.ts @@ -63,6 +63,7 @@ export async function loadHireRequest(itemId: number, listId?: string): Promise< 'RecruitingAgency', 'HireOnArrival', 'HireSecurityApproved', + 'PieceworkPay', 'HireApproverNoteImportant', APPROVER_CHANGES_FIELD, 'RequestStatus', @@ -81,6 +82,7 @@ export async function loadHireRequest(itemId: number, listId?: string): Promise< (data as unknown as Record).RecruitingAgency = !!item.RecruitingAgency; (data as unknown as Record).HireOnArrival = !!item.HireOnArrival; data.HireSecurityApproved = !!item.HireSecurityApproved; + data.PieceworkPay = !!item.PieceworkPay; data.HireApproverNoteImportant = !!item.HireApproverNoteImportant; SCALAR_FIELDS.forEach((key) => { diff --git a/src/webparts/requestPortal/forms/RecruitingHire/model.ts b/src/webparts/requestPortal/forms/RecruitingHire/model.ts index fba199c..a1b3e6e 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; + /** + * Сдельная оплата труда — информационная отметка, на обязательность окладов не + * влияет. Та же колонка сайта PieceworkPay (Boolean), что в заявке на подбор: + * оттуда и подставляется (см. selectionPrefill). + */ + PieceworkPay: boolean; // Рекрутинговое агентство (условный блок): при включённом флаге — название + условия. RecruitingAgency: boolean; AgencyName: string; @@ -126,6 +132,7 @@ export const EMPTY_DATA: IFormData = { SalaryAfterProbation: '', WorkSchedule: '', WorkScheduleOther: '', + PieceworkPay: false, RecruitingAgency: false, AgencyName: '', AgencyTerms: '', diff --git a/src/webparts/requestPortal/forms/RecruitingHire/provisioning.json b/src/webparts/requestPortal/forms/RecruitingHire/provisioning.json index a98a0b1..4c97646 100644 --- a/src/webparts/requestPortal/forms/RecruitingHire/provisioning.json +++ b/src/webparts/requestPortal/forms/RecruitingHire/provisioning.json @@ -41,6 +41,7 @@ { "internalName": "SalaryAfterProbation", "title": "Оклад по завершении ИС", "type": "Number", "decimals": 2 }, { "internalName": "WorkSchedule", "title": "График работы", "type": "Text" }, { "internalName": "WorkScheduleOther", "title": "График работы (другое)", "type": "Text" }, + { "internalName": "PieceworkPay", "title": "Сдельная оплата труда", "type": "Boolean" }, { "internalName": "RecruitingAgency", "title": "Рекрутинговое агентство", "type": "Boolean" }, { "internalName": "AgencyName", "title": "Название компании (агентство)", "type": "Text" }, diff --git a/src/webparts/requestPortal/forms/RecruitingHire/sections/ConditionsSection.tsx b/src/webparts/requestPortal/forms/RecruitingHire/sections/ConditionsSection.tsx index fb5aa46..134d6f4 100644 --- a/src/webparts/requestPortal/forms/RecruitingHire/sections/ConditionsSection.tsx +++ b/src/webparts/requestPortal/forms/RecruitingHire/sections/ConditionsSection.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { CollapseSection, FormField, TextInput, MoneyInput, Select } from '../../../shared/ui'; +import { CollapseSection, FormField, TextInput, MoneyInput, Select, Toggle } from '../../../shared/ui'; import { ISectionProps, OTHER_VALUE, WORK_SCHEDULE_OPTIONS, PROBATION_PERIOD_OPTIONS } from '../model'; interface IConditionsSectionProps extends ISectionProps { @@ -67,5 +67,9 @@ export const ConditionsSection: React.FC = ({ data, set /> )} + {/* Просто отметка: обязательность окладов (4.2, 4.3) от неё не зависит. */} + + set('PieceworkPay', v)} onLabel="Да" /> + ); diff --git a/src/webparts/requestPortal/forms/RecruitingHire/selectionPrefill.ts b/src/webparts/requestPortal/forms/RecruitingHire/selectionPrefill.ts index d91903d..bf49872 100644 --- a/src/webparts/requestPortal/forms/RecruitingHire/selectionPrefill.ts +++ b/src/webparts/requestPortal/forms/RecruitingHire/selectionPrefill.ts @@ -38,6 +38,7 @@ export function selectionPrefill(link: ISelectionLink, selection: ISelectionData ProbationPeriodOther: selection.SelectionProbationPeriodOther, SalaryProbation: selection.RateProbation, SalaryAfterProbation: selection.RateAfterProbation, + PieceworkPay: selection.PieceworkPay, }; // Тип приёма однозначен, только если в подборе ОДНА причина; ФИО «взамен