diff --git a/src/webparts/requestPortal/forms/ContractChange/README.md b/src/webparts/requestPortal/forms/ContractChange/README.md index 8a1e35a..20308a9 100644 --- a/src/webparts/requestPortal/forms/ContractChange/README.md +++ b/src/webparts/requestPortal/forms/ContractChange/README.md @@ -59,7 +59,8 @@ RequestTypeId» в `docs/forms.md`). Тип и маршрут в админке | --- | --- | --- | | Повышение должностного оклада | `SalaryIncrease` | текущий оклад, новый оклад (`MoneyInput`, Number), дата изменения, причина (испытательный срок / расширение функционала / иное), обоснование — при «иное» это и есть текст причины | | Установление надбавки / доплаты | `Allowance` | основание (а–д: надбавка или доплата видно из пункта), дата начала, дата окончания или «бессрочно» (флажок прячет и очищает дату), размер + переключатель «% / ₸» (`UnitSwitch`, по умолчанию %), обоснование — в т.ч. объём доп. работы при совмещении и текст «иное». Письменное согласие работника на совмещение оформляет кадровик после согласования — не в форме. Вложение **«Результаты аттестации»** — только при основании «г», обязательно | -| Остальные 8 | — | ещё не разобраны с кадрами | +| Перевод на другую должность (постоянный) | `PositionTransfer` | новая должность (`PositionPicker`: справочник `Dictionary/Positions` + ручной ввод), дата перевода, причина (карьерный рост / вакантная должность / новый объект, перераспределение функций / иное), обоснование. Работника и работодателя не различаем — причины видны всем, работник пишет текст заявления в обоснование. Вложение **«Должностная инструкция»** — всегда, обязательно | +| Остальные 7 | — | ещё не разобраны с кадрами | **Вложения по колонке ТЗ «Что приложить»** (решение 2026-10-28): фиксированные подписанные слоты по виду (подпись — что за документ); обязательны там, где ТЗ diff --git a/src/webparts/requestPortal/forms/ContractChange/byType/ChangeTypeSections.tsx b/src/webparts/requestPortal/forms/ContractChange/byType/ChangeTypeSections.tsx index e105da9..5185752 100644 --- a/src/webparts/requestPortal/forms/ContractChange/byType/ChangeTypeSections.tsx +++ b/src/webparts/requestPortal/forms/ContractChange/byType/ChangeTypeSections.tsx @@ -3,6 +3,7 @@ import { ChangeType } from '../changeTypes'; import { ISectionProps } from '../model'; import { SalaryIncreaseSection } from './SalaryIncrease/SalaryIncreaseSection'; import { AllowanceSection } from './Allowance/AllowanceSection'; +import { PositionTransferSection } from './PositionTransfer/PositionTransferSection'; /** * Вид изменения → секция с его полями. Partial: поля видов добавляются по мере @@ -11,7 +12,8 @@ import { AllowanceSection } from './Allowance/AllowanceSection'; */ const SECTION_BY_TYPE: Partial>> = { 'salary-increase': SalaryIncreaseSection, - allowance: AllowanceSection + allowance: AllowanceSection, + 'position-transfer': PositionTransferSection }; /** Секции всех выбранных видов, в порядке выбора (сейчас вид один — см. MAX_CHANGE_TYPES). */ diff --git a/src/webparts/requestPortal/forms/ContractChange/byType/PositionTransfer/PositionTransferSection.tsx b/src/webparts/requestPortal/forms/ContractChange/byType/PositionTransfer/PositionTransferSection.tsx new file mode 100644 index 0000000..412b597 --- /dev/null +++ b/src/webparts/requestPortal/forms/ContractChange/byType/PositionTransfer/PositionTransferSection.tsx @@ -0,0 +1,68 @@ +import * as React from 'react'; +import { CollapseSection, FormField, TextInput, TextArea, Select } from '../../../../shared/ui'; +import { useFormReadOnly } from '@tnsu/ui-kit'; +import { PositionPicker } from '../../../../shared/dictionary'; +import { AttachmentSlotField } from '../../../../shared/attachments/AttachmentSlotField'; +import { CHANGE_TYPE_LABELS } from '../../changeTypes'; +import { ISectionProps } from '../../model'; +import { POSITION_TRANSFER_REASONS, JOB_DESCRIPTION_ATTACHMENT } from './options'; + +/** + * Поля вида «Перевод на другую должность (постоянный)». Состав согласован с + * Тимуром по ТЗ кадров: новая должность (справочник с ручным вводом), дата, + * причина (а–г), обоснование и обязательная должностная инструкция. Текущая + * должность уже видна в «Организации» — отдельного «было» нет. + * + * Поля — прямо в CollapseSection, без FormGrid (тело секции само сетка). + */ +export const PositionTransferSection: React.FC = ({ data, set, context, attachments }) => { + const readOnly = useFormReadOnly(); + + return ( + + + set('PositionTransferNewPosition', v)} + placeholder="Начните вводить название должности…" + /> + + + set('PositionTransferDate', v)} + /> + + +