Правки #18

Merged
gorbenko.pavel merged 6 commits from fixes into main 2026-08-26 07:08:16 +00:00

6 Commits

Author SHA1 Message Date
gorbenko.pavel c60726759e Дедуп исполнителей резолва — по Guid сотрудника, не по email
Tests / frontend-test (pull_request) Successful in 46s
Tests / backend-test (pull_request) Successful in 5m31s
Реальная причина бага с дублем в списке согласования: один и тот же
человек может иметь несколько email в справочнике api.tnsu.kz, поэтому
схлопывание по email его не ловило.

EmployeeDirectoryInfo дополнен полем Id (Guid сотрудника из /Employee/
ByEmail). ResolveStepAsync теперь параллельно с email несёт этот Id
(внутренний ResolvedStepRow, наружу не отдаётся), а CollapseByExecutorIdentity
и RemoveCompanyDirectorsDuplicatedByDirectorTansu дедуплицируют по
identity-ключу: Id, если он резолвился, иначе email как фолбэк (на случай,
если сотрудник по итоговому email не нашёлся в справочнике).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-26 11:30:17 +05:00
gorbenko.pavel cc4ad423bc Revert: Директор Tansu — снова удаляем дубликат из CompanyDirectors
Возврат к удалению совпавшей строки CompanyDirectors вместо
последовательной постановки после блока (см. 40d741c) — решили не
показывать одного и того же человека дважды в списке согласования.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-26 11:10:06 +05:00
gorbenko.pavel 0289236d19 Тест: один директор двух компаний инициатора схлопывается в одну строку
Покрывает ровно тот сценарий, который выглядел как баг на скриншоте из
ManageRequestsScreen (один и тот же человек дважды на одном шаге) —
подтверждает, что текущий код (CollapseByExecutorEmail) схлопывает такую
пару в одну строку без предупреждения.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-26 11:05:59 +05:00
gorbenko.pavel 6160ef07ea Merge remote-tracking branch 'origin/main' into fixes 2026-08-26 11:00:17 +05:00
gorbenko.pavel 40d741c8c9 Директор Tansu среди директоров компаний: не параллельно, а после блока
Вместо удаления совпавшей строки CompanyDirectors — обе строки (директор
компании и Директор Tansu) остаются в результате, это два разных пункта
согласования, даже если физически один человек. Строка DirectorTansu,
чей email совпал с одним из CompanyDirectors, не участвует в обычном
схлопывании по email (CollapseByExecutorEmail) — та восприняла бы это как
конфликт PositionCode одного согласующего. Вместо этого её OrderNo явно
переставляется на «сразу после блока CompanyDirectors» (максимальный
OrderNo блока + 1), так что она идёт последовательно, а не параллельно
остальным директорам компаний.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-26 10:53:41 +05:00
gorbenko.pavel 3421922a08 Веб-часть админки на всю ширину (edge-to-edge, как в request-portal)
Tests / frontend-test (pull_request) Successful in 47s
Tests / backend-test (pull_request) Successful in 1m48s
Канву SharePoint мы и раньше разжимали (тот же :global хак + supportsFullBleed
в манифесте), но содержимое упиралось в max-width: 1080px у .content и
центрировалось — визуально это читалось как «не открывается на всю ширину».

Переношу раскладку портала (RequestPortal.module.scss):
- корень .approvalAdmin — width: 100%, padding: 0;
- .shell больше не карточка: без рамки, тени, скруглений и overflow: hidden
  (последний ломает sticky), align-items: flex-start, min-height: 78vh;
- .side — заливка $navy-800 на колонке (align-self: stretch), сам Sidebar
  внутри sticky на 100vh: градиент не плывёт от высоты соседа, и под рейлом
  на длинных таблицах нет белого провала, если sticky не включился;
- .content — сняты max-width и margin: auto, остались только отступы;
- мобильный брейкпоинт обновлён под новую схему: десктопные правила рейла
  снимаются явно, иначе sticky+100vh спорил бы с position: fixed, который
  ui-kit ставит drawer'у, при равной специфичности.

Разметка AdminApp.tsx не менялась — структура уже совпадала с портальной.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-25 13:37:22 +05:00