Commit Graph

195 Commits

Author SHA1 Message Date
gorbenko.pavel 53535e4180 feat: чат включён в заявках на подбор, на приём и в отдел 1С
Tests / frontend-test (pull_request) Successful in 2m7s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 14:24:33 +05:00
gorbenko.pavel fd3750a769 fix: редактор маршрута может удалять исполнителей в Обходном листе, Командировке и заявке в 1С
В этих формах матрице исполнителей (а в Командировке и 1С — и согласующих)
не передавалось право удаления, хотя в остальных формах оно есть через
composeRemoveRowRule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 14:12:46 +05:00
gorbenko.pavel e38156fd1c feat: отметки «@» в чате заявки и письма через поток Power Automate
В поле ввода чата «@» открывает подсказку с участниками заявки (инициатор
и все из маршрута). Отметка — обычный текст «@ФИО», без штатного упоминания
SharePoint, чтобы не уходило его собственное письмо.

После отправки сообщения портал вызывает поток FLOW_CHAT_NOTIFY_URL:
отмеченным — «Вас упомянули», инициатору — «Новое сообщение по вашей
заявке». О своих сообщениях писем нет; для проверки это включается
свойством веб-части «Чат: уведомлять о своих сообщениях» (по умолчанию
выключено) — тогда же можно отметить себя.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 14:06:07 +05:00
gorbenko.pavel d4b8c4e7e4 chore: убраны предупреждения линтера no-new-null и no-script-url
null там законный (очистка колонки SharePoint, ответ localStorage), строка
javascript: в тесте нужна намеренно — пометил с объяснением.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 14:06:06 +05:00
Тимур Городецкий 96f53da020 feat: столбец «Дата выхода» в разделах при фильтре по рабочему месту
Tests / frontend-test (push) Successful in 2m7s
Раньше дата выхода показывалась только во «Все заявки». Теперь — в любом
разделе (Мои заявки, очереди), когда фильтр по типу оставляет только заявки
на организацию рабочего места.

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

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-12 13:59:58 +05:00
Тимур Городецкий 4b05da5469 feat: трудовой отпуск — не более 24 дней в одной заявке
Требование HR: ограничение на поле «Количество дней» и проверка при
отправке с понятным сообщением.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-12 13:59:58 +05:00
Тимур Городецкий 41cce93b41 fix: плитки заявок одной высоты, плашка «В разработке» по размеру текста
Tests / frontend-test (push) Successful in 2m3s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-12 11:24:44 +05:00
Тимур Городецкий 664b58a44a fix: трудовой отпуск подаётся за 7 дней вместо 14
По требованию HR минимальный срок подачи заявления сокращён до недели.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-12 11:24:43 +05:00
Тимур Городецкий 755cfc8329 fix: отпуск без содержания — без лимита 5 дней, «Иная причина»
5 дней работодатель обязан дать только при браке/рождении/смерти,
сверх — по договорённости, поэтому форма больше не ограничивает число
дней. Вариант «В иных случаях» подписан как «Иная причина» — читается
как ответ на «Причина»; значение в SP прежнее.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-12 11:24:42 +05:00
Тимур Городецкий e46632d67a fix: примечание СБ в заявке на приём — необязательное
По просьбе заказчика примечание при отметке «Согласован СБ» больше не
требуется для отправки: поле по-прежнему появляется только при отметке,
но его можно оставить пустым.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 15:44:17 +05:00
Тимур Городецкий 8330790bf9 feat: отметка «Сдельная оплата труда» в заявке на приём
Tests / frontend-test (push) Successful in 1m25s
Пункт 4.5 в «Условиях оплаты и оформления» — информационная отметка, на
обязательность окладов не влияет. Та же колонка сайта PieceworkPay
(Boolean), что в заявке на подбор, и оттуда же подставляется при связи с
подбором (поле 1.1 и «Оформить приём по этой заявке»).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 14:16:21 +05:00
Тимур Городецкий af93ae57f4 feat: оформление приёма прямо из согласованной заявки на подбор
Просили создавать заявку на приём из самого подбора, а не искать его в
поле 1.1. Под вложениями согласованного подбора — «+ Оформить приём по этой
заявке» со счётчиком «занято X из Y» (и предупреждением, если вакансии
заняты). Новая заявка на приём сразу связана с подбором и заполнена из
него: логика вынесена в selectionPrefill и общая с полем 1.1. Вместе с
rpsource в адресе передаётся партиция подбора (rplist): Id в партициях
повторяются. Приёмы по подбору грузятся один раз на оба блока (useLinkedHires).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 14:12:33 +05:00
Тимур Городецкий 79963e4035 feat: отметка «Согласован СБ» с примечанием в заявке на приём
Инициатор при подаче отмечает, что кандидат согласован со службой
безопасности; при отметке обязательно примечание СБ (без отметки поле
скрыто и очищается). Поле информационное, на маршрут не влияет. Раздел
«6. Служба безопасности» — перед вложениями, «Примечание для согласующих»
стало разделом 7. Колонки HireSecurityApproved (Boolean), HireSecurityNote (Note).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 13:00:55 +05:00
Тимур Городецкий cdabc3f40b fix: свежие «свои» заявки при отладочной подмене личности
Tests / frontend-test (push) Successful in 5m42s
Search искал заявки подменённого сотрудника, а REST-довесок свежих
черновиков — заявки реальной учётки, поэтому только что созданные
черновики под подменой не находились нигде. Довесок теперь берёт Id
подменённого сотрудника.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 12:18:15 +05:00
Тимур Городецкий 8e3161f425 feat: суточные в командировке считаются по маршруту
Суточные в смете строятся автоматически по точкам и датам маршрута
(в МРП), чтобы инициатор не пересчитывал их вручную; проверки и
сохранение работают с уже пересчитанной сметой. Форма командировки
заодно подключена к перепланированию маршрута пустого черновика.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 12:18:15 +05:00
Тимур Городецкий bbef3062f4 fix: черновик без маршрута планирует маршрут заново при открытии
У части черновиков не оказалось строк маршрута, и форма показывала пустую
матрицу: отправить такую заявку было некому. Теперь при открытии
черновика без строк маршрут планируется заново (loadRoutePhase), во всех
формах; поданные заявки по-прежнему читают записанные строки. Почему
строки пропали у первоначального случая — пока не выяснено.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 12:18:15 +05:00
Тимур Городецкий b64ec76998 chore: Playwright и axe для браузерного QA веб-парта
Зависимости и навык spfx-qa для проверки портала в браузере (сценарии,
снимки, проверка доступности). Каталоги сессии и отчётов (.auth/,
.qa-reports/) — в .gitignore.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 12:18:14 +05:00
Тимур Городецкий c80972469f feat: добавление согласующих и исполнителей в поданные заявки на подбор и приём
Алтынай Бултурукова (право canEditRoute) просила добавлять участников в уже
поданный маршрут. Новый согласующий или исполнитель встаёт в конец своего
этапа со статусом «Ждёт очереди» (дальше его можно поднять стрелками);
согласующего — пока идёт согласование, исполнителя — пока не завершено
исполнение, без дублей среди ещё не решивших. Заявка «трогается», чтобы
бэкенд выдал новому участнику права на элемент данных.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 12:16:18 +05:00
Тимур Городецкий 79d2a59229 feat: время создания в столбце «Дата» таблиц заявок
Tests / frontend-test (push) Successful in 2m8s
По одной дате не различить несколько заявок, поданных в один день, —
теперь в столбце дата и время создания.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 16:59:02 +05:00
Тимур Городецкий 9cc5d52bab feat: сортировка «Всех заявок» на рабочее место по дате выхода
По дате выхода удобнее планировать подготовку рабочих мест. Даты для
сортировки дочитываются для всего списка пачками (предел длины URL),
заявки без даты — всегда в конце.

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

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 16:42:07 +05:00
Тимур Городецкий 290598c357 fix: делегат на параллельном шаге получает заявку сразу
Очередь не двигалась, пока на шаге был кто-то активный, поэтому делегат
участника параллельного шага ждал решения второго участника. Текущий шаг
теперь — наименьший order среди нерешённых строк.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 16:07:59 +05:00
Тимур Городецкий 474a663da6 fix: оповещения параллельного шага — всем участникам и без дублей
Письмо уходило только первому из параллельных согласующих, а после решения
одного из них остальные получали повторное. Теперь шаг оповещается целиком
при старте и не оповещается снова, если кто-то из его участников уже решил.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 16:07:59 +05:00
Тимур Городецкий 8fc9776895 fix: тесты фильтров таблиц падали в Jest
filtersStorage импортировал статусы из барреля shared/approval, а тот тянет
@microsoft/sp-http, который в Jest не грузится. Импорт — напрямую из
models/statuses, тип IRequestType — через import type.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 15:27:49 +05:00
Тимур Городецкий 7488681f68 feat: фильтры таблиц заявок запоминаются, видно какие включены
Tests / frontend-test (push) Failing after 2m11s
Пользователи жаловались, что фильтры постоянно сбрасываются. Тип, статус,
период и сортировка теперь хранятся в localStorage — отдельно на каждого
пользователя и таблицу, с проверкой значений при чтении. Чтобы забытый
фильтр не выглядел как «пропали заявки», над таблицей строка «Включены
фильтры» с чипами, «Сбросить все» (чистит и хранилище) и «Показано X из Y».

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 15:25:02 +05:00
Тимур Городецкий f64aa909cd fix: примечание для согласующих — после вложений, перед маршрутом
Инициатор пишет примечание, уже заполнив заявку, и сразу видит под ним,
кому оно уйдёт. В просмотре согласующего порядок тот же; плашка вверху
карточки не меняется.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 15:07:35 +05:00
Тимур Городецкий 545db1aee6 feat: примечание для согласующих в заявке на приём
Инициатору нужно передать согласующим важную информацию так, чтобы её не
пропустили. Новый раздел «6. Примечание для согласующих» (текст + «Важное»);
у согласующих и исполнителей заполненное примечание показывается плашкой
над разделами заявки, важное выделено цветом и иконкой. Сделано общим
модулем shared/approverNote, чтобы подключать в другие формы. Колонки
HireApproverNote (Note) и HireApproverNoteImportant (Boolean).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 15:02:11 +05:00
Тимур Городецкий 8a22767dd3 fix: проект, введённый вручную в старой заявке на приём, не теряется
Tests / frontend-test (push) Successful in 1m57s
Старый одиночный пикер допускал ручной ввод без выбора из справочника
(пустой ProjectId). Такие заявки открывались с пустым полем «Проект», а
пересохранение (правка всех полей согласующим) стирало текст проекта в
колонке Project. Теперь он читается как проект без Id и сохраняется как есть.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 13:02:54 +05:00
Тимур Городецкий 57efa7620e feat: выбор нескольких проектов в заявке на приём
Tests / frontend-test (push) Successful in 2m2s
Проект больше не влияет на маршрут (условие по Project убрано в админке),
поэтому поле стало мультивыбором (ProjectPickerMulti). Список хранится в
новой колонке ProjectsJson; старые Project/ProjectId/ProjectCode заполняются
производными значениями для представлений и отчётов, старые заявки читаются
из них. Title и текстовые колонки обрезаются до 255 символов, чтобы длинные
названия не роняли сохранение. Требует провижининга колонки ProjectsJson.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 12:39:14 +05:00
Тимур Городецкий cfe97dc67e feat: перестановка ждущих шагов маршрута в поданных заявках на подбор и приём
Алтынай Бултурукова (право canEditRoute) просила менять порядок участников
уже поданной заявки. Стрелки у шагов согласования и исполнения: меняются
местами только соседние шаги одной фазы, оба «Ждут очереди» — активный и
пройденные шаги не трогаются, поэтому никто не теряет заявку и оповещать
некого. Строки перечитываются перед записью, StepOrder пишется одним батчем.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 12:39:10 +05:00
Тимур Городецкий 962d8f9c5c Merge branch 'main' of http://git.tnsu.kz/timur.gorodetskiy/request-portal
Tests / frontend-test (push) Successful in 2m7s
2026-10-08 11:56:00 +05:00
Тимур Городецкий cf1a8194eb feat: подсветка ошибок полей в заявлении на отпуск без сохранения заработной платы
Кнопка отправки гасла без объяснения, если, например, указано больше 5 дней.
Форма переходит на общий FieldIssuesProvider: над кнопками список проблем,
по нажатию — подсветка поля с текстом ошибки и прокрутка к нему. Правила
вынесены в validation.ts.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 11:55:27 +05:00
gorbenko.pavel 23f8255ba7 feat: прод ЭДО — значение edoApiBaseUrl по умолчанию (#25)
Tests / frontend-test (push) Successful in 2m10s
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/25
2026-10-08 06:34:04 +00:00
Тимур Городецкий 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