259 Commits

Author SHA1 Message Date
Andrey Epifancev
d7ab4d170c feat(table): плашка контроля ошибок со счётчиком, переходом к ячейке и подсказкой (AURORA-1893)
- validationUtils.collectInvalidErrors теперь собирает ошибки по ЯЧЕЙКАМ
  (id/ruleId/columnId/lineId/rowLabel/message), а не одну запись на колонку;
  новая groupValidationErrors(errors) группирует их обратно по правилу+колонке
  со счётчиком для меню плашки.
- useValidationRules: getCellErrors(columnId, value, row) отдаёт причины
  конкретной ячейки (для подсказки), isCellInvalid выражен через него;
  сравнение стабильности errors — по id (он уже кодирует правило+колонку+строку).
- RealtimeTable: handleNavigateToError({lineId, columnId}) — находит строку по
  getRowId в table.getRowModel().flatRows (не .rows, т.к. flatRows не фильтруется
  по свёрнутым группам), раскрывает родителей через setExpanded, включает
  скрытую колонку через handleSetColumnsVisibility, выделяет ячейку как
  activeSearchMatch и скроллит к ней — по образцу navigateToSearchMatch.
- ValidationErrorsAlert: красная плашка (#FDEDED/#D32F2F) со счётчиком
  «Ошибок: N», кнопками ‹›  для прохода по всем ошибкам и меню, сгруппированным
  по правилу+колонке (до 20 строк, дальше «и ещё N»); перенесена в начало
  SettingPanel, перед группами настроек.
- tableColumns/Cell: invalidMessage (из getCellErrors) доходит до Cell и
  показывается подсказкой (MUI Tooltip) при наведении на невалидную ячейку.

Тесты (node --test .../validationUtils.test.js): 12/12, включая 5 существующих
тестов nonNegativeRule из AURORA-1892 (не менялись, подтверждают отсутствие
регрессии) и 7 новых для collectInvalidErrors/groupValidationErrors.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-11-01 15:11:26 +04:00
Andrey Epifancev
df6ec795a3 feat(table): визуально отличать редактируемые ячейки от расчётных и закрытых (AURORA-1890)
- utils/cellEditability.js: isCellEditable/isComputedColumn — чистые функции,
  isComputedColumn повторяет часть v3._apply_form_cell/_apply_form3_cell
  (0023_apply_cell_empty_string.sql), чтобы админ не видел вычисляемые
  колонки как редактируемые. tableColumns.jsx использует isCellEditable
  вместо инлайновой проверки.
- useRealtimeData.js: возвращает stageColumnDeadlines (closes_at по колонке
  текущего этапа) рядом с columnsCurStage.
- Cell.jsx: редактируемая ячейка — белый фон, рамка 1px #7FA7C9 (2px при
  наведении), курсор text; нередактируемая ячейка строки INPUT — фон
  #F4F5F7, текст #5F6B7A; занятая коллегой — пунктирная оранжевая рамка
  2px #F0A030 без изменения фона. Строки ITEM/GROUP/ROOT не затронуты.
  Сохранён порядок стилей из AURORA-1894 (INVALID_STYLES последним) и
  спред fontWeight для отрицательных чисел из AURORA-1892.
- TableHead.jsx: метка срока ввода «✎ до DD.MM HH:mm» в заголовке колонки
  текущего этапа, только для исполнителя (utils/deadlineFormat.js).
- SettingPanel/CellLegend.jsx: иконка "?" с легендой (можно вводить /
  расчёт или закрыто) рядом с плашкой контроля ошибок, без новой панели
  и без новых цветов в palettes columnColors.js.

node --test: cellEditability.test.js, deadlineFormat.test.js — 18/18.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-11-01 13:00:40 +04:00
Andrey Epifancev
d518961365 Merge remote-tracking branch 'origin/feat/275-aurora-1894-error-border-toast' into feat/276-aurora-1892-negative-amounts
# Conflicts:
#	web/src/components/RealtimeTable/Cell/Cell/Cell.jsx
2026-11-01 12:42:29 +04:00
Andrey Epifancev
fa586c85cc feat(table): отрицательные суммы красным и правило «минус запрещён» (AURORA-1892)
Cell.jsx: formatNumber вынесен в utils/numberFormat.js и возвращает
{ text, isNegative }; отрицательные числа выделяются цветом (#C62828 на
светлом фоне, #FFCDD2 на тёмном) и font-weight 600, ноль остаётся «-».

constants/validation.js: фабрика nonNegativeRule и общий список
nonNegativeColumnKeys (план, бронь на 2026/2027, факт по месяцам и СПОД,
сумма платежа, предельная стоимость договора/ЦКК, сателлиты АХР
Аренда/Коммунальные/Безопасность, АХР Лимиты целиком). Корректировки и
переносы (adj_*, base_correction, revision_*, seq_*, target_change,
transfer_*) не включены — там минус — нормальная операция. Запрет
мягкий: подсветка и запись в «Контроль ошибок» через существующий
useValidationRules/isCellInvalid, сохранение не блокируется.

EditCell.jsx: handleSave предупреждает toast.warning при сохранении
отрицательного числа в защищённой колонке, значение всё равно
сохраняется. useValidationRules и RealtimeTable прокидывают
человекочитаемый заголовок колонки для текста предупреждения.

Тесты (node --test): numberFormat.test.js, validationUtils.test.js —
новые, 10/10 зелёных.
2026-11-01 12:20:06 +04:00
Andrey Epifancev
83cb364a9e fix(realtime): красная рамка у ошибки ячейки, тост без Server error:undefined (AURORA-1894)
Cell.jsx: порядок спреда стилей — base → editable/not-editable → locked →
invalid (INVALID_STYLES последним), чтобы красная рамка 2px не перетиралась
EDITABLE_STYLES у вводимых ячеек с ошибкой.

utils/wsErrorUtils.js: getWsErrorMessage(error) — строка возвращается как
есть, объект берёт message || detail, известные технические префиксы
(computed_field:, role_not_allowed:, window_closed:, org_not_assigned)
заменяются понятным текстом, прочее отдаётся без "Server error:".

RealtimeContext.js: toast.error(getWsErrorMessage(data.error)) вместо
`Server error:${data.error.message}` || '', которое всегда давало undefined
для ошибок-строк (|| не срабатывает на непустой строке).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-11-01 12:10:16 +04:00
aep
cda8f12492 Merge pull request 'AURORA-1838: updateCells без клонирования всего дерева' (#223) from feat/212-aurora-1838-ws-immutable-update into test 2026-11-01 09:38:39 +03:00
aep
1ece2f3c08 Merge pull request 'AURORA-1836: фиксированная высота строк вместо measureElement' (#222) from feat/211-aurora-1836-row-measure into test 2026-11-01 09:37:38 +03:00
Andrey Epifancev
7b67740029 fix(dict-vsp): заголовок «Действия» на одной линии с остальными в grid-раскладке
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-29 12:23:02 +04:00
Andrey Epifancev
bf64fa0dc6 fix(dict-vsp): ширины колонок как в test — grid-раскладка не должна менять вид справочника
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 12:10:47 +04:00
Andrey Epifancev
4393e964f4 perf(realtime): убрать console.log каждого WebSocket-сообщения
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 18:10:30 +04:00
Andrey Epifancev
17dddc21d3 perf(realtime): updateCells без structuredClone и мутации входа
Копируются только строки на пути к затронутой, остальные сохраняют идентичность;
без изменений возвращается тот же data. Отсутствующие в row.data ключи теперь
вставляются (нужно для AURORA-1844/1848). Тесты с паритетом к прежней реализации.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 18:10:30 +04:00
Andrey Epifancev
12a315b04a perf(table): фиксированная высота строк вместо measureElement (лист, свод 1, свод 2)
Высота строки и ячейки задана явно в rem, виртуализатор не читает offsetHeight.
Мёртвая muiTableRowProps удалена. Overscan строк свода 2: 8 -> 3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 18:10:21 +04:00
Andrey Epifancev
bdb00afc5a test(table): хелпер createFixedRowVirtualizerOptions без чтения layout
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 18:10:21 +04:00
Andrey Epifancev
b0de763259 perf(dict-vsp): виртуализация строк, состояние модалок вынесено из таблицы
Модалки в DictVspModals (forwardRef), таблица в memo со стабильными колбэками,
enableRowVirtualization, size/minSize/maxSize колонок выверены под grid-раскладку.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 18:09:52 +04:00
Andrey Epifancev
3ab229f6f8 test(dict-vsp): фильтрация ВСП по ССП вынесена в чистую функцию
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 18:09:52 +04:00
PotapovaA
7174703149 изменение дублей accessorKey 2026-10-20 16:21:42 +03:00
PotapovaA
bce897f4ed правки 2026-10-16 14:55:58 +03:00
PotapovaA
6c3cd5b2e0 добавление селекта для изменения разрядности в твблицах 2026-10-16 14:41:19 +03:00
PotapovaA
f3539a5f36 новые своды для проектов 2026-10-01 18:20:30 +03:00
PotapovaA
b8632b445d Merge remote-tracking branch 'origin/test' into add-svod-projects 2026-10-01 15:43:47 +03:00
PotapovaA
633c36787d своды для проектов 2026-10-01 15:43:26 +03:00
172b343c69 export-optimize-refresh: очередь загрузки при экспорте 2026-09-30 20:40:21 +03:00
341e8b3936 last-column: Колонка Сумма оплаты структуры формы 4 2026-09-30 14:02:41 +03:00
PotapovaA
02a24954e5 исправила цвета колонок 2026-09-29 15:48:11 +03:00
PotapovaA
253e5d7c82 удаление задач 2026-09-28 19:12:03 +03:00
PotapovaA
056d00b2b4 Merge branch 'test' into ui-tasks 2026-09-28 17:38:04 +03:00
18faf6a724 svod-fix: свод 2 из формы 2, новый свод 1 для формы 3 2026-09-28 17:01:07 +03:00
1e02b0ca61 fix-columns: добавил комментарий, строки из Лимита не удаляются 2026-09-28 13:19:26 +03:00
PotapovaA
d5728c8e08 изменен список задач + удалила не используемые файлы 2026-09-25 14:45:27 +03:00
d6da54ecf4 form3-expense: добавил новые статьи в форму 3, возможность удаления задач 2026-09-25 14:20:04 +03:00
PotapovaA
bc4fd92791 правки версий библиотек 2026-09-24 16:29:27 +03:00
e01c0c105f Merge pull request 'add-columns-spod-4-form' (#176) from add-columns-spod-4-form into test
Reviewed-on: #176
2026-09-24 15:11:46 +03:00
PotapovaA
b4ba58a8d8 переезд на новую версию либы 2026-09-24 15:11:09 +03:00
PotapovaA
15ac95f7d7 добавила колонки + переехала на @babel/traverse@^7.28.5 2026-09-24 15:10:52 +03:00
adfc2dda81 form3-pages: новая разметка третьей формы, сводные отчеты по третьей форме на бэке 2026-09-24 12:28:27 +03:00
PotapovaA
f87098f11e исправила цвета, сделала поярче breadcrumbs и исправила поиск в этапах 2026-09-18 16:14:52 +03:00
9ea88f99e9 Merge pull request 'fixes-form: добавил новые статьи' (#164) from fixes-form into test
Reviewed-on: #164
2026-09-16 15:44:03 +03:00
96f550caed fixes-form: добавил новые статьи 2026-09-16 15:40:35 +03:00
PotapovaA
7668b0ad70 исправила формат ячейки в ахр лимиты 2026-09-16 13:07:53 +03:00
PotapovaA
02ffff6861 fix 2026-09-16 12:57:34 +03:00
PotapovaA
7bbc1189ec поправила доступ для исполнителй дфипа, отсупы для смет и - вместо 0 в SummaryTable (проекты) 2026-09-16 12:15:54 +03:00
PotapovaA
befbc64837 исправила формат для id нуменклатуры в проектах + убрала админа из фильтра 2026-09-16 11:19:57 +03:00
5effd7b6f4 Merge pull request 'add-stage-front' (#159) from add-stage-front into test
Reviewed-on: #159
2026-09-15 12:45:21 +03:00
PotapovaA
ce31f71e9e fix 2026-09-15 12:44:48 +03:00
PotapovaA
e7f0fb665d добавила страницу с созданием/редактированием для предопрделенных этапов 2026-09-15 12:39:43 +03:00
922add04ef new-rows: новые строки в формах 2026-09-15 10:30:27 +03:00
PotapovaA
e1596e8782 fix style 2026-09-14 12:51:20 +03:00
PotapovaA
37a93f400d исправила цвета в таблице 2026-09-14 11:39:14 +03:00
PotapovaA
51019c16b6 fix button 2026-09-11 15:33:37 +03:00
PotapovaA
9f19695db4 добавить навигацию и отметки последних открытых задач и листов 2026-09-11 15:22:22 +03:00