Files
request-portal/src/webparts/requestPortal/data/requests.ts
T
Тимур Городецкий 7e9848e83d
Tests / frontend-test (push) Successful in 1m17s
feat: форма «Объяснительная по СКУД»
Сотрудник пишет объяснительную за дни без отметок СКУД, выбирая их кликом
в календаре «Мой СКУД» (перенесён из portal-main-page: те же цвета и
правила, проходы Hikvision текущего пользователя, праздники из
«Производственного календаря»). Текст записки собирается автоматически,
в просмотре печатается бланк объяснительной.

- выбираются прошедшие дни < 8 ч, с одной записью или без отметок и
  сегодня без отметок; только текущий и прошлый месяц;
- дни сохраняются снимком (JSON), т.к. согласующий чужой СКУД не видит;
- защита от повторов: дни из уже поданных объяснительных помечены ✓ и
  не выбираются, перед отправкой список перечитывается;
- маршрут в две фазы: согласование + исполнение (кадры);
- дата подачи ставится автоматически.

Плитка пока только для тестировщиков (comingSoon): списки SP
провизионированы, тип и маршрут заведены, осталась проверка e2e.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 17:27:46 +05:00

60 lines
3.0 KiB
TypeScript

import { IRequestType } from '../models/types';
/**
* Типы заявок (плитки) по категориям, в порядке отображения.
* id — латиницей, т.к. это ключ в реестре форм (forms/registry) и в ссылках (rptype).
*/
export const REQUEST_TYPES: IRequestType[] = [
// Отдел рекрутинга
{ id: 'recruiting-selection', categoryId: 'recruiting', title: 'Заявка на подбор', icon: 'search' },
{ id: 'recruiting-hire', categoryId: 'recruiting', title: 'Заявка на прием', icon: 'people' },
{ id: 'recruiting-referral', categoryId: 'recruiting', title: 'Реферальная рекомендация', icon: 'send' },
// IT
{ id: 'it-workplace-setup', categoryId: 'it', title: 'Заявка на организацию рабочего места', icon: 'monitor' },
{ id: 'it-1c-ticket', categoryId: 'it', title: 'Заявка в отдел 1С', icon: 'clipboard' },
// Отдел кадров
{ id: 'hr-vacation', categoryId: 'hr', title: 'Заявка на трудовой отпуск', icon: 'calendar' },
{ id: 'hr-unpaid-leave', categoryId: 'hr', title: 'Заявка на отпуск без содержания', icon: 'document' },
// Пока только тестировщикам: тип заявки и маршрут ещё не заведены в админке approval-route.
{
id: 'hr-skud-explanation',
categoryId: 'hr',
title: 'Объяснительная по СКУД',
icon: 'user-check',
comingSoon: true
},
{ id: 'hr-dismissal', categoryId: 'hr', title: 'Заявление на увольнение', icon: 'document', comingSoon: true },
{ id: 'clearance-form', categoryId: 'hr', title: 'Обходной лист', icon: 'clipboard', comingSoon: true },
{
id: 'hr-transfer',
categoryId: 'hr',
title: 'Заявка на перемещение сотрудника',
icon: 'people',
comingSoon: true
},
// Склад / Снабжение — формы открыты для ознакомления, но приём заявок ещё не
// запущен (маршруты/списки не готовы): кнопки сохранения/отправки в самих
// формах задизейблены (см. SubmitActions в каждой из них).
{ id: 'wh-tmc-transfer', categoryId: 'warehouse', title: 'СЗ на перемещение ТМЦ', icon: 'send' },
{
id: 'wh-service-request',
categoryId: 'warehouse',
title: 'Заявка на услуги',
icon: 'document'
},
{
id: 'wh-concrete-request',
categoryId: 'warehouse',
title: 'Заявка на бетон',
icon: 'vehicle'
}
];
/** Заявки, относящиеся к указанной категории. */
export function getRequestsByCategory(categoryId: string): IRequestType[] {
return REQUEST_TYPES.filter((request) => request.categoryId === categoryId);
}