В «Все заявки», «Моих заявках» и «Поиске» ФИО бралось из поискового
свойства Author, где SharePoint перечисляет через «;» всех, кто правил
элемент. У заявки, которую поправил согласующий, в «Авторе» оказывалось
«Инициатор;Согласующий». Теперь ФИО берётся из AuthorOWSUSER — того же
поля «Создано», откуда и почта.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Во всех разделах со списками заявок (На согласовании, На исполнении,
Доработка, Мои заявки, Все заявки):
- фильтры по типу, статусу и периоду даты создания, кнопка «Сбросить»;
- сортировка по клику на заголовок: номер (по числам), тип, дата, статус.
Без фильтров загрузка прежняя, постраничная. При активном фильтре или
сортировке загружается полный список раздела и обрабатывается в памяти,
иначе отсортировалась бы только текущая страница.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Тип заявки и так виден в колонке «Тип», префикс в названии только
удлинял его:
- подбор: «Должность — Проект»;
- приём: «ФИО — Должность — Проект».
Уже созданные заявки сохраняют старое название до пересохранения.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Поле было только для чтения и не позволяло поправить организации. Теперь
это CompanyPickerMulti, как в подборе: предзаполняется по заявителю и
редактируется, обязательное. Компании хранятся в WorkplaceCompaniesJson,
Organization пересобирается текстом для печати и старых заявок.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
employeeCompanies() нужен теперь не только подбору, но и заявке на рабочее
место — одна реализация вместо копий в каждой форме.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
После согласования подбор сразу уходит в «Выполнение», поэтому фильтр
только по «Согласовано» почти всегда давал пустой список. Теперь берутся
все утверждённые статусы, как в isApprovedStatus.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Если нужной базы нет в списке, заявитель отмечает «Другое» и вписывает
название в обязательное поле. Текст хранится в отдельной колонке DB1COther,
показывается в просмотре и попадает в карточку Planner.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Название вкладки и подпись в шапке форм категории — чтобы было видно,
что заявки в отдел 1С лежат здесь же.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
«Виды работ», «Организация» и «База 1С» теперь читаются из колонок списка
(общий хук shared/fieldChoices), а не из констант: новый пункт добавляется
в параметрах столбца без правки кода и деплоя. Пилот — на форме 1С, при
успехе переводим остальные формы. В стартовые варианты provisioning.json
добавлен «Маршруты в ДО».
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- СЗ на перемещение ТМЦ: поле «Куда» предзаполняется проектом-получателем
по строке-источнику Dataverse (cree9_demandline -> lzk position -> LZK ->
project id), см. shared/dataverse/lzkPosition.service.ts
- Заявка 1С досрочно разморожена для всех пользователей (UNFROZEN_FORMS
в SubmitActions), остальные формы остаются замороженными
- Поле «Отдел» в заявке 1С сделано read-only
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Провижининг (Provision-Lists.ps1 читает эти манифесты) теперь заводит колонку
«Автосогласование» (AutoApprove, Да/Нет) в каждом из 12 списков согласования —
рядом с уже существующими SLAhours/AskOverdueReason.
Значение приходит из resolve (approval-route API, шаг маршрута настраивается
только в админке — портал само значение не выбирает, только переносит его в
строку списка при отправке заявки/сохранении черновика, тем же путём, что и
slaHours/askOverdueReason). Фактическое автосогласование по истечении SLA
делает фоновая задача бэкенда (Hangfire), не портал.
В ApprovalMatrix добавлена пометка «(авто)» рядом со значением SLA — чисто
информативно, чтобы участник видел, что решение по шагу может принять не
только человек.
Примечание: ServiceRequest и TmcTransfer не передают ни slaHours/
askOverdueReason, ни (теперь) autoApprove из resolve в строку — это
существовавший пробел (SLA на уровне шага у этих двух форм и раньше не
работал), автосогласование для них наследует только это же ограничение.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
---------
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/20
Поле «Ревизия» — из бумажной формы, в электронной не нужно (нет
параллельных версий заявки, при возврате на доработку правится тот же
элемент). Убрано из модели, манифеста и load.ts.
«Отдел» переименован в «Подразделение» (заголовок общего столбца сайта
Department — у большинства форм он уже так называется) и теперь, как
организация и должность, подставляется из карточки заявителя
(Employee/ByEmail.section/departmentId) при выборе/загрузке — а не
только вручную через DepartmentPicker.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---------
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/19
Пункт меню виден только заданному списку почт (Тришина, Городецкий,
Горбенко) — группы HR в SharePoint пока нет, добавили TODO завести
проверку по ней отдельно (reportsAccess.ts). Скрыт из меню совсем, а
не показан неактивным, и прямой переход по ?rpnav=reports у остальных
редиректит на «Новую заявку».
Раздел — форма периода (С/По) и кнопка «Скачать xlsx», дергает
GET api/reports/vacancies через тот же AadHttpClient, что и остальные
вызовы approval-route API. Имя файла собирается на фронте по формату
бэкенда (VacancyReportWorkbook.FileName), а не читается из
Content-Disposition — approval-route не объявляет заголовок в
Access-Control-Expose-Headers, браузер бы его не отдал.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
---------
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/17