feat: названия заявок на подбор и приём без префикса типа

Тип заявки и так виден в колонке «Тип», префикс в названии только
удлинял его:
- подбор: «Должность — Проект»;
- приём: «ФИО — Должность — Проект».
Уже созданные заявки сохраняют старое название до пересохранения.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Тимур Городецкий
2026-09-28 14:45:01 +05:00
parent bfe0b95f26
commit fa27e8d918
4 changed files with 12 additions and 13 deletions
@@ -17,9 +17,9 @@ export function hireApprovalService(listId?: string): ApprovalListService {
return approvalServiceFor(FORM_ID, listId); return approvalServiceFor(FORM_ID, listId);
} }
/** Название заявки (Title): «Прием — ФИО кандидата — Должность». */ /** Название заявки (Title): «ФИО кандидата — Должность — Проект». */
function buildTitle(data: IFormData): string { function buildTitle(data: IFormData): string {
return buildRequestTitle('Прием', [data.HireCandidateName, data.Position]); return buildRequestTitle([data.HireCandidateName, data.Position, data.Project]);
} }
/** Поля элемента списка данных из модели формы (текст/выбор/даты/числа), без статуса. */ /** Поля элемента списка данных из модели формы (текст/выбор/даты/числа), без статуса. */
@@ -29,9 +29,9 @@ async function resolveUserId(login: string): Promise<number> {
return ensured.Id; return ensured.Id;
} }
/** Название заявки (Title): «Подбор — Должность — Объект/Проект». */ /** Название заявки (Title): «Должность — Объект/Проект». */
function buildTitle(data: IFormData): string { function buildTitle(data: IFormData): string {
return buildRequestTitle('Подбор', [data.Position, data.ObjectProject]); return buildRequestTitle([data.Position, data.ObjectProject]);
} }
/** Скалярные/числовые/да-нет поля из модели + название (людей и статус пропускаем — они отдельно). */ /** Скалярные/числовые/да-нет поля из модели + название (людей и статус пропускаем — они отдельно). */
@@ -1,12 +1,12 @@
import { buildRequestTitle } from './requestTitle'; import { buildRequestTitle } from './requestTitle';
describe('buildRequestTitle', () => { describe('buildRequestTitle', () => {
it('склеивает тип и части через тире', () => { it('склеивает части через тире', () => {
expect(buildRequestTitle('Подбор', ['Инженер', 'Проект X'])).toBe('Подбор — Инженер — Проект X'); expect(buildRequestTitle(['Инженер', 'Проект X'])).toBe('Инженер — Проект X');
}); });
it('пропускает пустые и пробельные части', () => { it('пропускает пустые и пробельные части', () => {
expect(buildRequestTitle('Подбор', ['', ' Проект X '])).toBe('Подбор — Проект X'); expect(buildRequestTitle(['', ' Проект X '])).toBe('Проект X');
expect(buildRequestTitle('Прием', ['', ''])).toBe('Прием'); expect(buildRequestTitle(['Иванов Иван', '', ''])).toBe('Иванов Иван');
}); });
}); });
@@ -2,11 +2,10 @@
const TITLE_SEPARATOR = ' — '; const TITLE_SEPARATOR = ' — ';
/** /**
* Название заявки (системная колонка Title списка данных): тип + ключевые * Название заявки (системная колонка Title списка данных): ключевые поля через
* поля через тире, пустые части пропускаются — «Подбор — Инженер — Проект X». * тире, пустые части пропускаются — «Инженер — Проект X». По нему заявку узнают в списке SP, в столбце «Заявка» списка согласования
* По нему заявку узнают в списке SP, в столбце «Заявка» списка согласования
* и в колонке «Название» таблиц портала. * и в колонке «Название» таблиц портала.
*/ */
export function buildRequestTitle(typeLabel: string, parts: string[]): string { export function buildRequestTitle(parts: string[]): string {
return [typeLabel, ...parts.map((p) => p.trim())].filter(Boolean).join(TITLE_SEPARATOR); return parts.map((p) => p.trim()).filter(Boolean).join(TITLE_SEPARATOR);
} }