Commit Graph

158 Commits

Author SHA1 Message Date
Тимур Городецкий 2652b4694e feat: выбор причины и лимит 5 дней в заявлении на отпуск без сохранения заработной платы
Вместо свободного «В связи с» — обязательный выбор причины (брак, рождение
ребёнка, смерть близких, иные случаи); текст причины нужен только для иных
случаев. Отпуск — не более 5 календарных дней. Подавать за 14 дней нужно
только в иных случаях: остальные события заранее не планируются.
Причина хранится в новой Choice-колонке UnpaidLeaveReasonType.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 11:10:58 +05:00
Тимур Городецкий 7217d8bee6 feat: новые названия заявлений на отпуск в категории «Отдел кадров»
Отдел кадров переименовал заявки: «Заявление на оплачиваемый ежегодный
трудовой отпуск» и «Заявление на отпуск без сохранения заработной платы».
Меняются плитки и заголовки карточек; имена списков SharePoint и pageUrl
остаются прежними, чтобы не потерять связь с существующими списками.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 11:10:57 +05:00
Тимур Городецкий 5c10c8f127 feat: исполнители заявки 1С сами заменяют и удаляют друг друга
Tests / frontend-test (push) Successful in 2m0s
Отдел 1С передаёт заявки внутри себя: исполнитель с невыполненным шагом
может в поданной заявке заменить или убрать невыполненного исполнителя,
в т.ч. активного и себя. Выполненные шаги не трогаются, последнего
невыполненного — только заменить. Механизм тот же, что в подборе, но
право по роли в маршруте, а не по списку email.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 15:46:36 +05:00
Тимур Городецкий d4868933f1 Merge branch 'main' of http://git.tnsu.kz/timur.gorodetskiy/request-portal
Tests / frontend-test (push) Successful in 1m57s
2026-10-07 14:37:54 +05:00
Тимур Городецкий 053ca9d8cd feat: инициатор заменяет согласующих в заявке на рабочее место до отправки
Если согласующий из маршрута недоступен (отпуск и т.п.), инициатор может
поставить на его шаг другого человека, пока заявка не отправлена. Шаг
целиком (порядок, роль, SLA) сохраняется, удалить его по-прежнему нельзя —
состав маршрута из админки остаётся гарантированным. Замена — общая операция
useMatrixEditor.replace, кнопка подключена только в этой форме.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 14:37:09 +05:00
Тимур Городецкий bce2283bf3 fix: условия маршрута по организации в заявке на рабочее место
Форма не передавала в approval-route значения полей, только отдел, поэтому
условные шаги («WorkplaceCompaniesJson содержит АСТЕЛ-К», «Organization
содержит …», «Software содержит AutoCAD») считались неверно. Теперь
передаются организации (имена через пробел, как в приёме и подборе) и
«Необходимое ПО»; матрица пересчитывается при их смене.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 14:36:58 +05:00
gorbenko.pavel 4f99a3c5d8 feat: дата выхода сотрудника в закладке «Все заявки» по организации рабочего места (#24)
Tests / frontend-test (push) Successful in 1m58s
Колонка «Дата выхода» (StartDate) показывается только во «Все заявки» для
типа it-workplace-setup. Значение дочитывается из списка данных по партиции
строки, только для видимой страницы; учтено в сигнатуре кеша страницы.
Функция вынесена в startDates.service.ts, чтобы не превысить лимит строк
myRequests.service.ts.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/24
2026-10-07 07:36:25 +00:00
Тимур Городецкий 50bb3e2307 fix: организация в заявке на рабочее место больше не предзаполняется
Подставлялась организация инициатора, а не нового сотрудника — её
приходилось исправлять. Теперь поле пустое и выбирается вручную,
обязательность сохранена.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 12:20:05 +05:00
Тимур Городецкий 690a692c07 feat: выбор заявки на приём прямо в форме организации рабочего места
Tests / frontend-test (push) Successful in 2m1s
Рабочее место оформляют на основе заявки на приём, но кнопку «на основе»
видит только тот, кому видна сама заявка на приём. Теперь в форме есть
поиск по утверждённым заявкам на приём (все партиции), выбор предзаполняет
ФИО, телефон, должность, подразделение, местоположение и дату приёма.
Из заявки на приём читаются только эти поля — оклады в браузер не уходят
(старая предзагрузка читала заявку целиком).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 12:08:36 +05:00
Тимур Городецкий cfbca8c2b2 feat: Ербол Шаймерденов правит все поля и вложения заявки на рабочее место
Полное право правки стало раздельным по формам: раньше общий список открыл
бы Ерболу и подбор с приёмом. В «Организации рабочего места» право действует,
пока он есть в маршруте (согласование или исполнение) и заявка «На
согласовании» или «Выполнение», независимо от того, чья сейчас очередь.
Правки пишутся в журнал (подсветка «Было: …»), перед «Согласовать»
проверяются обязательные поля. Блок вложений вынесен в общий компонент.

Нужна новая колонка WorkplaceApproverChangesJson в списке данных.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 12:08:25 +05:00
Тимур Городецкий 2ade16ce1d feat: ФИО латиницей обязательно в заявке на организацию рабочего места
Tests / frontend-test (push) Successful in 2m0s
Без латинского написания имени ИТ не может завести учётную запись,
поэтому заявку без него больше нельзя ни отправить, ни сохранить.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 17:53:10 +05:00
Тимур Городецкий da8c2c3e54 Merge branch 'main' of http://git.tnsu.kz/timur.gorodetskiy/request-portal
Tests / frontend-test (push) Successful in 2m2s
2026-10-06 17:23:25 +05:00
Тимур Городецкий 0b4fbc4487 feat: согласующий с полным правом правит вложения в подборе и приёме
Алтынай на своём шаге согласования теперь может добавлять и удалять
файлы, а не только поля. Удаление — сразу, новые файлы загружаются
вместе с «Сохранить» или решением. Блоки вложений вынесены из
просмотров в отдельные компоненты на общем хуке useAttachmentEditor.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 17:23:08 +05:00
Тимур Городецкий 271758527e feat: ссылка на заявку ТМЦ уходит в КПС для ссылок с source=kps
Заявки, открытые из КПС, передают ссылку на заявку в позицию акта
дефектов через Inventory API (POST /inventory/api/defect-acts/parts/
{partId}/tmc-transfer); остальные — в Dataverse, как раньше. Для КПС не
ищем «Куда» в Dataverse: positionId там чужой и давал только 404.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 17:23:08 +05:00
gorbenko.pavel 637e51d7f9 Feature/vacation edo signing (#23)
Tests / frontend-test (push) Successful in 1m24s
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/23
2026-10-05 08:53:18 +00:00
Тимур Городецкий f8ab2a1d71 fix: даты «только дата» больше не сдвигаются на день назад
Tests / frontend-test (push) Successful in 2m1s
SharePoint хранит поле «только дата» как полночь по поясу сайта (UTC+5)
в UTC: «05.10» приходит из REST как 2026-10-04T19:00:00Z. Формы брали
первые 10 символов и показывали 04.10, а каждое пересохранение (полное
право, исполнитель, повторная отправка) записывало дату ещё на день раньше.

Чтение всех дат идёт через spDateOnlyToIso (округление до ближайшей
полуночи UTC), «сегодня» — через todayIsoDate вместо toISOString, который
до 05:00 давал вчерашнее число. Уже сдвинутые записи в SP не исправляются.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 12:41:18 +05:00
Тимур Городецкий 9400f8546e feat: параметр source во внешней ссылке ТМЦ сохраняется в заявке
Внешняя система (напр. КПС) передаёт source — пишем его в новую колонку
SourceSystem рядом с SourcePositionId, чтобы по заявке было видно, откуда
она пришла и куда отвечать. Запоминание источника вынесено в отдельный
эффект: positionId/source/склад сохраняются и по ссылке без nomenclatureId.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 12:39:48 +05:00
Тимур Городецкий 7f1e36874a fix: ссылку на заявку ТМЦ писать в колонку cree9_tmctransferurl в Dataverse
Владельцы внешней системы указали другую колонку строки заявки
(cr498_cree9_tmctransferurl) вместо прежней cr498_portalrequesturl.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 12:33:14 +05:00
Тимур Городецкий 2e0c942fe5 fix: права на заявку новому участнику после делегирования и замены исполнителя
Tests / frontend-test (push) Successful in 2m3s
Права на заявку новым участникам маршрута выдаёт бэкенд по вебхуку на
изменение элемента списка данных. Делегирование и замена/удаление
исполнителя меняли только список согласования — вебхук не приходил, и
новый человек видел «Элемент не найден». Теперь после этих действий
заявка перезаписывается с тем же статусом: значение не меняется, но
появляется новая версия элемента и срабатывает вебхук.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 10:21:56 +05:00
Тимур Городецкий 8eb5b13985 feat: форма «Заявка на командировку»
Цифровая версия бумажной заявки на командировку (отдел кадров). Можно
подать за другого сотрудника; маршрут — лентой точек (город + объект из
справочника проектов + даты) с видом транспорта на каждом участке и
вторым видом «Схема» (SVG, как схема метро). Задание — список задач.
Смета — карточками статей (суточные, проезд, проживание, страховка,
виза, другие расходы) с позициями, привязанными к точкам и участкам
маршрута; суммы только вручную, итог с долями и разбивкой по объектам.
Печать — без шапки с адресатом.

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

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 10:20:15 +05:00
Тимур Городецкий e85c01fca3 refactor: общий хук маршрута по фазам (usePhasedRoute)
Хук, который грузит маршрут согласования отдельно по фазам «Согласование»
и «Исполнение», был в папке «Объяснительной по СКУД». Он понадобился и
заявке на командировку, поэтому перенесён в shared/approval под общим
именем. Поведение СКУД не меняется — поменялись только импорты.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 10:19:57 +05:00
Тимур Городецкий 4c8410bdcc feat: этап исполнения в заявке 1С (исполнитель из маршрута + Planner)
Tests / frontend-test (push) Successful in 1m20s
В маршруте №8 есть шаг «Исполнение», но форма 1С запрашивала только
согласование и записывала пустой список исполнителей: после согласования
заявка навсегда оставалась «Согласовано», без исполнителя и даты исполнения.
Теперь исполнитель берётся из маршрута с теми же условиями, заявка идёт
«Выполнение» → «Закрыта», а карточка Planner создаётся при переходе в
исполнение (в т.ч. сразу при отправке, если согласование не требуется).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-02 10:09:04 +05:00
Тимур Городецкий 4c851b4892 fix: объявление в Teams видно и во вкладке-сайте SharePoint
Tests / frontend-test (push) Successful in 1m19s
Если в Teams закреплена обычная страница SharePoint, SPFx не передаёт
веб-части Teams-контекст, и объявление «открывайте в браузере» не
показывалось. Теперь Teams определяется ещё по фрейму и User-Agent.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-02 09:43:20 +05:00
Тимур Городецкий 1e316a9558 feat: объявление в Teams — открывать портал в браузере
В приложении Teams часть функций портала работает ограниченно. На главной
в Teams теперь показывается объявление со ссылкой на страницу портала,
которая открывается во внешнем браузере. В браузере объявление не показывается.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-02 09:34:51 +05:00
Тимур Городецкий c91d2dbc04 fix: дата подачи — день отправки, а не сохранения черновика
В подборе и реферале черновик хранил дату первого сохранения, и через
несколько дней заявка уходила на согласование со старой датой подачи.
Теперь при отправке дата подачи всегда сегодняшняя, а открытый черновик
сразу показывает сегодня (как уже было в объяснительной по СКУД). В реферале
дату больше нельзя поправить руками. Общая логика — shared/submitDate.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-02 09:34:51 +05:00
Тимур Городецкий 5702939b52 feat: подсветка незаполненных полей и переход к ним в приёме и подборе
Пользователи не понимали, почему кнопка «Отправить на согласование» серая.
Теперь в заявках на приём и подбор кнопки активны: нажатие при незаполненных
или неверных полях ничего не сохраняет, а подсвечивает эти поля с подсказкой
под ними и прокручивает к первому. Над кнопками — список проблем, пункты ведут
к полю. Механизм общий (FieldIssuesProvider + FormField), остальные формы
пока работают по-старому и переводятся по тому же паттерну.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 17:15:16 +05:00
Тимур Городецкий c95118a216 feat: тип приёма «Вместо переведенного сотрудника» 2026-09-30 12:03:20 +05:00
Тимур Городецкий 4f292dde3d feat: печатный вид объяснительной по СКУД с маршрутом согласования
Tests / frontend-test (push) Successful in 1m21s
Вместо линии для подписи под запиской печатается маршрут согласования
и исполнения. Документ больше не вылезает за карточку (box-sizing), а текст
причины «Другое» получает точку, чтобы следующая фраза к нему не прилипала.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 09:56:35 +05:00
Тимур Городецкий a05a336275 fix: пустой квадратик под ФИО на печати
В окне печати у выбранного в PeoplePicker человека оставалась голая кнопка «×»
(иконки скрыты, стилей Fluent там нет). На печати она не нужна — скрываем.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 09:56:35 +05:00
Тимур Городецкий ff7d1f26a7 fix: причины в объяснительной по СКУД
Убрана причина «Забыл(а) пропуск», неисправность турникета/считывателя
обобщена до «Неисправность СКУД» — так просит отдел кадров.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 09:56:35 +05:00
Тимур Городецкий 7e9848e83d feat: форма «Объяснительная по СКУД»
Tests / frontend-test (push) Successful in 1m17s
Сотрудник пишет объяснительную за дни без отметок СКУД, выбирая их кликом
в календаре «Мой СКУД» (перенесён из 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
Тимур Городецкий 1dda76caae test: разбор автора вынесен в модуль без SharePoint
Тест parseAuthorOwsUser падал: он импортировал myRequests.service, а тот
тянет PnPjs (ESM), который Jest проекта не разбирает. Функция вынесена в
parseAuthorOwsUser.ts без SharePoint-импортов, сервис берёт её оттуда.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 12:55:40 +05:00
Тимур Городецкий 182c497139 fix: служебный хвост в ФИО автора и исполнителя
Поисковое свойство AuthorOWSUSER хранит «почта | ФИО | служебный id и
claims-логин», а parseAuthorOwsUser брал как ФИО всё после первого
разделителя. Пока ФИО бралось из свойства Author, это было не видно;
после 13ba9c9 (ФИО из AuthorOWSUSER) хвост вылез в колонках «Автор» и
«Исполнитель». Теперь ФИО — ровно вторая часть строки.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 12:51:57 +05:00
Тимур Городецкий e9702a53d4 feat: «Скачать все» для вложений заявки
Над списком вложений (от двух файлов) — кнопка «Скачать все»: файлы
скачиваются по очереди, без архива, через download.aspx SharePoint, чтобы
PDF и картинки не открывались в просмотре. Обёртка над AttachmentList
из ui-kit подменена в shared/ui, поэтому кнопка появилась во всех формах
и карточках без правок в них; в чате выключена.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 12:42:42 +05:00
Тимур Городецкий ab3593c170 feat: история согласования по кнопке в строке таблиц заявок
В каждой строке таблиц заявок — кнопка «История согласования»: окно с
той же лентой, что в карточке, без открытия самой заявки. Колонка
действий теперь есть всегда (история у всех строк, корзина — у своих
черновиков).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 12:42:42 +05:00
Тимур Городецкий 153c966f0b feat: история согласования — маршрут пересохраняется патчем
При доработке и повторной отправке writeRoute раньше удалял все строки
маршрута и создавал заново — кто вернул или отклонил заявку и с каким
комментарием, терялось. Теперь маршрут пересохраняется патчем
(planRoutePatch + ApprovalListService.patchSteps): строки, что остаются в
маршруте, обновляются на месте, и их прошлые решения лежат в истории
версий; недостающие шаги создаются, выпавшие и строки делегатов уходят в
корзину. Всё одним пакетом. Проверено пилотами на увольнении и рабочем
месте (обе фазы, уход в корзину). Аварийный откат для всех форм —
ROUTE_PATCH_ENABLED = false.

Из версий строк маршрута и заявки собирается лента «История
согласования» (shared/approval/history): отправки, решения с
комментариями и временем на шаге, делегирование, замена исполнителя,
у кого заявка сейчас. Свёрнутый раздел в карточке и в форме доработки
всех форм, грузится только при раскрытии.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 12:42:42 +05:00
Тимур Городецкий 5b1e94bf42 feat: подсказка о недопустимой дате увольнения
Если последний рабочий день раньше, чем через месяц от сегодня, под полем
показывается причина и минимальная дата. Раньше кнопки отправки просто
становились неактивными без объяснения — это случалось у заявлений,
пролежавших на доработке: дата, допустимая при подаче, переставала
подходить. Правило и текст вынесены в lastWorkingDay.ts и общие для
подсказки и проверки перед отправкой.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 12:42:13 +05:00
Тимур Городецкий 7ad5f79cdf style: поле «Организация» в заявке на рабочее место
Подпись «Организация заявителя» заменена на «Организация» — в форме,
в подсказке незаполненных полей и в манифесте колонки (как у остальных
форм; на существующую колонку SharePoint манифест не влияет).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 12:41:40 +05:00
Тимур Городецкий 27b3c8de2a fix: новый шаг в матрице не копирует решение согласующего
После возврата заявки с одним согласующим каждый добавленный на доработке
шаг показывался «Возвращена на доработку»: statusForNewRow копировал общий
статус строк. Решения (согласовано/возвращено/отклонено/выполнено) больше
не копируются — новый шаг показывается с «—». В SharePoint это не
попадало: writeRoute и раньше писал всем строкам «Ждёт очереди».

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 12:41:25 +05:00
Тимур Городецкий b82008943f style: иконка «Все заявки» — список вместо людей
Tests / frontend-test (push) Successful in 1m20s
Иконка людей совпадала с иконкой категории «Отдел рекрутинга» и плитки
«Заявка на прием» и не говорила, что за кнопкой список заявок. Заменена
на menu на плитке, на кнопке формы и в боковом меню.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 16:29:29 +05:00
Тимур Городецкий 1b1a783c98 fix: поиск сотрудника в маршруте без учёта регистра
Фильтр SharePoint substringof по Title пользователей сайта для кириллицы
чувствителен к регистру: «тимур» не находил «Тимур Городецкий». Теперь
ищутся сразу несколько написаний (как введено, строчными, с заглавной
каждого слова) и по email. Касается всех полей выбора сотрудника в
маршруте: делегирование, добавление согласующего, замена исполнителя.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 16:29:29 +05:00
Тимур Городецкий 247f614885 feat: замена и удаление исполнителей в заявке на подбор
Начальник отдела подбора (routeEditRights) назначает исполнителей, но
сама в исполнении не стоит. В матрице «Исполнение» заявки на подбор у
шагов «Ждёт очереди» и «На исполнении» появились кнопки «Заменить» и
«Удалить»:
- замена меняет только человека в шаге, активный шаг сразу переходит
  к новому исполнителю, ему уходит оповещение;
- при удалении активного очередь переходит к следующему исполнителю;
- выполненные шаги не трогаются, последнего невыполненного исполнителя
  можно только заменить — иначе заявка закрылась бы без исполнения.

Остальные формы не затронуты: кнопки включаются пропсами ApprovalMatrix
(canReplaceRow/onReplaceRow) только в RecruitingSelectionView.
notifyActiveStep получил необязательный rowId, чтобы на параллельном
шаге письмо ушло именно новому исполнителю.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 16:29:15 +05:00
Тимур Городецкий be8177e8ae feat: столбец «Исполнитель» в таблицах заявок
Показывает, у кого заявка сейчас: ФИО и почта согласующего или
исполнителя текущего шага (несколько — параллельный шаг, при
делегировании — делегат), при доработке — инициатор. Есть в
«Инициированных», «Согласованных», «Выполненных мной» и «Все заявки»;
в очередях и «Доработке» держатель всегда сам пользователь.

Дочитывается только для видимой страницы, одним запросом на список
согласования. Группировка по партициям вынесена в approvalPartitionsFor
и общая с комментарием к решению.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 16:28:48 +05:00
Тимур Городецкий 13ba9c9e37 fix: в колонке «Автор» только создатель заявки
В «Все заявки», «Моих заявках» и «Поиске» ФИО бралось из поискового
свойства Author, где SharePoint перечисляет через «;» всех, кто правил
элемент. У заявки, которую поправил согласующий, в «Авторе» оказывалось
«Инициатор;Согласующий». Теперь ФИО берётся из AuthorOWSUSER — того же
поля «Создано», откуда и почта.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 16:28:37 +05:00
Тимур Городецкий d749bfae26 feat: фильтры и сортировка в таблицах заявок
Tests / frontend-test (push) Successful in 1m16s
Во всех разделах со списками заявок (На согласовании, На исполнении,
Доработка, Мои заявки, Все заявки):
- фильтры по типу, статусу и периоду даты создания, кнопка «Сбросить»;
- сортировка по клику на заголовок: номер (по числам), тип, дата, статус.

Без фильтров загрузка прежняя, постраничная. При активном фильтре или
сортировке загружается полный список раздела и обрабатывается в памяти,
иначе отсортировалась бы только текущая страница.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 14:45:02 +05:00
Тимур Городецкий fa27e8d918 feat: названия заявок на подбор и приём без префикса типа
Тип заявки и так виден в колонке «Тип», префикс в названии только
удлинял его:
- подбор: «Должность — Проект»;
- приём: «ФИО — Должность — Проект».
Уже созданные заявки сохраняют старое название до пересохранения.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 14:45:01 +05:00
Тимур Городецкий bfe0b95f26 fix: в «Моих заявках» только заявки с сайта портала
Tests / frontend-test (push) Successful in 1m13s
2026-09-28 11:27:30 +05:00
Тимур Городецкий 36922af942 fix: в «Моих заявках» исключены типы заявок с чужих сайтов (ct-forms-portal /sites/sed)
Tests / frontend-test (push) Successful in 1m15s
2026-09-28 09:53:29 +05:00
Тимур Городецкий cef8d51378 feat: мультивыбор «Организации заявителя» в заявке на рабочее место
Tests / frontend-test (push) Successful in 1m16s
Поле было только для чтения и не позволяло поправить организации. Теперь
это CompanyPickerMulti, как в подборе: предзаполняется по заявителю и
редактируется, обязательное. Компании хранятся в WorkplaceCompaniesJson,
Organization пересобирается текстом для печати и старых заявок.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 17:38:50 +05:00
Тимур Городецкий 0989168476 refactor: преобразование организаций сотрудника в компании вынесено в shared/dictionary
employeeCompanies() нужен теперь не только подбору, но и заявке на рабочее
место — одна реализация вместо копий в каждой форме.

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