Merge remote-tracking branch 'origin/main' into fired-request
Tests / frontend-test (pull_request) Successful in 1m22s
Tests / frontend-test (pull_request) Successful in 1m22s
This commit is contained in:
@@ -16,7 +16,8 @@ function parseJsonArray<T>(raw: unknown): T[] {
|
|||||||
|
|
||||||
// Скалярные поля (текст/выбор/число/дата) — читаем как есть, приводим к строке.
|
// Скалярные поля (текст/выбор/число/дата) — читаем как есть, приводим к строке.
|
||||||
const SCALAR_FIELDS: (keyof IFormData)[] = [
|
const SCALAR_FIELDS: (keyof IFormData)[] = [
|
||||||
'Phone', 'HireType', 'ReplacedEmployee', 'CandidateName', 'HireDate', 'Position', 'WorkKind',
|
'Phone', 'HireType', 'ReplacedEmployee', 'Project', 'ProjectId', 'ProjectCode',
|
||||||
|
'CandidateName', 'HireDate', 'Position', 'WorkKind',
|
||||||
'SiteName', 'SiteLocation', 'PpeHeight', 'PpeClothingSize', 'PpeShoeSize', 'ProbationPeriod',
|
'SiteName', 'SiteLocation', 'PpeHeight', 'PpeClothingSize', 'PpeShoeSize', 'ProbationPeriod',
|
||||||
'SalaryProbation', 'SalaryAfterProbation', 'WorkSchedule', 'WorkScheduleOther',
|
'SalaryProbation', 'SalaryAfterProbation', 'WorkSchedule', 'WorkScheduleOther',
|
||||||
'AgencyName', 'AgencyTerms',
|
'AgencyName', 'AgencyTerms',
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ export interface IFormData {
|
|||||||
Phone: string;
|
Phone: string;
|
||||||
HireType: string;
|
HireType: string;
|
||||||
ReplacedEmployee: string;
|
ReplacedEmployee: string;
|
||||||
|
// Проект/объект (справочник /Project) — справочное поле, на маршрут
|
||||||
|
// согласования НЕ влияет (в отличие от RecruitingSelection/TmcTransfer).
|
||||||
|
Project: string;
|
||||||
|
ProjectId: string; // oid проекта ('' — если введён вручную без выбора из списка)
|
||||||
|
ProjectCode: string;
|
||||||
// Связанная «Заявка на подбор» (по ней оформляют приём). Хранится тройкой
|
// Связанная «Заявка на подбор» (по ней оформляют приём). Хранится тройкой
|
||||||
// полей, а не Lookup: списки партиционированы, см. selectionLookup.ts.
|
// полей, а не Lookup: списки партиционированы, см. selectionLookup.ts.
|
||||||
SelectionRequestId: string; // Id заявки на подбор (→ rpid); '' — не выбрана
|
SelectionRequestId: string; // Id заявки на подбор (→ rpid); '' — не выбрана
|
||||||
@@ -62,6 +67,9 @@ export const EMPTY_DATA: IFormData = {
|
|||||||
Phone: '',
|
Phone: '',
|
||||||
HireType: '',
|
HireType: '',
|
||||||
ReplacedEmployee: '',
|
ReplacedEmployee: '',
|
||||||
|
Project: '',
|
||||||
|
ProjectId: '',
|
||||||
|
ProjectCode: '',
|
||||||
SelectionRequestId: '',
|
SelectionRequestId: '',
|
||||||
SelectionRequestListId: '',
|
SelectionRequestListId: '',
|
||||||
SelectionRequestCode: '',
|
SelectionRequestCode: '',
|
||||||
|
|||||||
@@ -10,6 +10,10 @@
|
|||||||
{ "internalName": "HireType", "title": "Тип приёма", "type": "Choice", "choices": ["Новый сотрудник", "Вместо уволенного"] },
|
{ "internalName": "HireType", "title": "Тип приёма", "type": "Choice", "choices": ["Новый сотрудник", "Вместо уволенного"] },
|
||||||
{ "internalName": "ReplacedEmployee", "title": "Взамен кого (Ф.И.О. уволенного)", "type": "Text" },
|
{ "internalName": "ReplacedEmployee", "title": "Взамен кого (Ф.И.О. уволенного)", "type": "Text" },
|
||||||
|
|
||||||
|
{ "internalName": "Project", "title": "Проект", "type": "Text" },
|
||||||
|
{ "internalName": "ProjectId", "title": "Проект — Id", "type": "Text" },
|
||||||
|
{ "internalName": "ProjectCode", "title": "Проект — код", "type": "Text" },
|
||||||
|
|
||||||
{ "internalName": "SelectionRequestId", "title": "Заявка на подбор — Id", "type": "Number" },
|
{ "internalName": "SelectionRequestId", "title": "Заявка на подбор — Id", "type": "Number" },
|
||||||
{ "internalName": "SelectionRequestListId", "title": "Заявка на подбор — партиция (listId)", "type": "Text" },
|
{ "internalName": "SelectionRequestListId", "title": "Заявка на подбор — партиция (listId)", "type": "Text" },
|
||||||
{ "internalName": "SelectionRequestCode", "title": "Заявка на подбор — код", "type": "Text" },
|
{ "internalName": "SelectionRequestCode", "title": "Заявка на подбор — код", "type": "Text" },
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { CollapseSection, FormField, TextInput, PhoneInput, Select } from '../../../shared/ui';
|
import { CollapseSection, FormField, TextInput, PhoneInput, Select } from '../../../shared/ui';
|
||||||
import { CompanyPickerMulti } from '../../../shared/dictionary';
|
import { CompanyPickerMulti, ProjectPicker } from '../../../shared/dictionary';
|
||||||
import { ISectionProps, HIRE_TYPE_OPTIONS, HIRE_TYPE_REPLACEMENT } from '../model';
|
import { ISectionProps, HIRE_TYPE_OPTIONS, HIRE_TYPE_REPLACEMENT } from '../model';
|
||||||
import { SelectionRequestField } from './SelectionRequestField';
|
import { SelectionRequestField } from './SelectionRequestField';
|
||||||
|
|
||||||
@@ -25,6 +25,19 @@ export const ApplicationSection: React.FC<ISectionProps> = ({ data, set, context
|
|||||||
placeholder="Начните вводить название организации…"
|
placeholder="Начните вводить название организации…"
|
||||||
/>
|
/>
|
||||||
</FormField>
|
</FormField>
|
||||||
|
<FormField label="Проект" htmlFor="Project" full>
|
||||||
|
<ProjectPicker
|
||||||
|
context={context}
|
||||||
|
id="Project"
|
||||||
|
value={data.Project}
|
||||||
|
onChange={(name, id, project) => {
|
||||||
|
set('Project', name);
|
||||||
|
set('ProjectId', id);
|
||||||
|
set('ProjectCode', project ? project.code : '');
|
||||||
|
}}
|
||||||
|
placeholder="Начните вводить название или код проекта…"
|
||||||
|
/>
|
||||||
|
</FormField>
|
||||||
<FormField label="Заявка на подбор" full>
|
<FormField label="Заявка на подбор" full>
|
||||||
<SelectionRequestField data={data} set={set} />
|
<SelectionRequestField data={data} set={set} />
|
||||||
</FormField>
|
</FormField>
|
||||||
|
|||||||
Reference in New Issue
Block a user