diff --git a/docs/MIGRATION-CHECKLIST.md b/docs/MIGRATION-CHECKLIST.md index 74779e9..0750689 100644 --- a/docs/MIGRATION-CHECKLIST.md +++ b/docs/MIGRATION-CHECKLIST.md @@ -14,6 +14,8 @@ ## 0. Общее (оболочка) +> 🔧 **Исправлено при проверке T-RPL (2026-10-19):** «Отчёты по проекту» и форма отчёта брали id пользователя из контекста страницы (`legacyPageContext.userId`) и путь к DocLib — от сайта страницы. У каждого сайта свой id пользователя, поэтому в workbench корневого сайта «Отчёты» показывали «Нет доступа». Теперь всё — от сайта со списками (`settings.siteUrl`): id через `_api/web/currentuser`, путь папки фото — от `siteUrl`. Workbench по умолчанию открывается на `/sites/stroy`. + - [ ] Одна web part, разделы переключаются через `?page=…`, проект — через `?projectId=…` - [ ] Кнопки «назад/вперёд» браузера переключают разделы - [ ] Ссылку на любой раздел можно скопировать и открыть в новой вкладке @@ -185,18 +187,25 @@ ### Сохранение - [ ] Валидация (все сообщения из исходника) -- [ ] Номер = количество неудалённых отчётов проекта + 1 +- [ ] Номер = наибольший номер в проекте (включая удалённые) + 1 — в старом коде «количество неудалённых + 1», см. 🔧 ниже - [ ] При правке — удалить все старые строки (сначала дочерние), создать заново - [ ] Фото → `DocLib/{projectId}_{number}` - [ ] «Отчет успешно сохранен!», кнопка меняется на «← Вернуться назад» - [ ] Утверждение: подтверждение → `cree9_aprooved = true` → «Отчет утвержден!» - [ ] Права: «Доступы» `projectId` + `userId*` (несколько вариантов имени поля) -🐞 Create без проверки NoAccess. 🐞 Номер может совпасть после мягкого удаления. 🐞 Дата «сегодня» — UTC. +🐞 Create без проверки NoAccess. 🐞 Дата «сегодня» — UTC. + +🔧 **Исправлено при проверке T-REP (2026-10-19):** +- Только что созданная из пикера работа попадала в карточку с полным путём вместо названия, без ед. изм. и с планом 0 (в старом коде так же). +- Окно выбора на экране шире 640px — по центру (было всегда прижато к низу), поле «Значение» не вылезает за карточку. +- После «Утвердить отчет» бейдж оставался «На утверждении» до F5 — теперь сразу «Утверждён». +- «← Вернуться назад» во вкладке, открытой из списка отчётов (истории нет), ничего не делал — теперь ведёт в «Отчёты по проекту». +- Номер отчёта повторялся после мягкого удаления (номер = количество неудалённых + 1), а вместе с ним и папка фото `{projectId}_{номер}`. Теперь номер = наибольший номер в проекте, включая удалённые, + 1. Как нумерует отчёты Telegram-бот — уточнить у команды API. **Сознательные отличия от report:** - `confirm('Утвердить отчет? …')` → `confirmModal` из ui-kit, текст тот же. -- Адрес сайта для списков и ссылки на папку фото — настройка «URL сайта SharePoint» (раньше `pageContext.web.absoluteUrl`); путь папки при создании — по-прежнему от сайта, где стоит страница (`web.serverRelativeUrl`). По умолчанию это один и тот же сайт `/sites/stroy`. +- Адрес сайта для списков и ссылки на папку фото — настройка «URL сайта SharePoint» (раньше `pageContext.web.absoluteUrl`); путь папки при создании и id пользователя для проверки прав — тоже от этого сайта (раньше — от сайта, где стоит страница). По умолчанию это один и тот же сайт `/sites/stroy`. - Если Dataverse ответит на создание записи `204` без тела, старый код брал id из заголовка `OData-EntityId`, а новый клиент заголовков не видит. С `Prefer: return=representation` Dataverse отвечает `201` с телом, поэтому на практике не встречается; при пустом id сохранение останавливается той же ошибкой `reportId is empty`. - Логика режимов, валидации, сборки строк и порядка записи / удаления сверена со старым кодом построчно и покрыта тестами (45 тестов). diff --git a/docs/TEST-PLAN.md b/docs/TEST-PLAN.md index 68260fc..f0aa417 100644 --- a/docs/TEST-PLAN.md +++ b/docs/TEST-PLAN.md @@ -120,6 +120,9 @@ - [ ] **T-WRK-09** Роль **Р** → нет кнопок добавления и меню ⋮. ## 7. Импорт работ — `T-IMP` + +> ⛔ **T-IMP-02…07 заблокированы (2026-10-19):** сначала `GET https://api.tnsu.kz/Project/{oid}/works` отвечал 500 `42703: column l.name does not exist` — команда API исправила. Теперь он отвечает 200, но `totalCount: 0` у всех проектов: сметы в справочник ещё не загружены. Старый web part показывает то же «Работы не найдены». Повторить, когда появится хотя бы один проект со сметой (тестовый проект 51 привязать к нему; настоящие проекты не привязывать). T-IMP-01 ✅. +> Проверено по коду: API урезает `pageSize=200` до 100, но число страниц берётся из `totalPages` ответа — работы не теряются. - [ ] **T-IMP-01** Проект без привязки к справочнику → «Проект не привязан к справочнику…». - [ ] **T-IMP-02** Большой привязанный проект: «Загрузка работ… X из Y», затем число работ совпадает со старой страницей. - [ ] **T-IMP-03** Поиск (код СНБ, объём, название), страницы по 100. @@ -158,6 +161,7 @@ - [ ] **T-REP-18** Роль **Р** → отчёт только для чтения, кнопок нет. - [ ] **T-REP-19** Роль **Н** → «Нет доступа» при открытии существующего отчёта. - [ ] **T-REP-20** Большой проект: открыть 3 разных старых отчёта → всё совпадает со старой формой (план-факт, персонал, техника, фото-папка). + - Проверено на проекте 17: №2030 и ещё 2 отчёта совпали, режим правки тот же. Отчёт с персоналом/техникой **внутри работы** найти не удалось (прямого доступа к Dataverse нет) — вложенные строки проверены только на тестовом проекте (T-REP-10/11). Дополнительно: встретится такой отчёт — сверить со старой формой. - [ ] **T-REP-21** «← Вернуться назад» → вернулись туда, откуда пришли. - [ ] **T-REP-22** Enter в любом поле не перезагружает страницу. - [ ] ✍️ **T-REP-23** Удалить тестовый отчёт из «Отчёты по проекту» → «Удалить отчёт?» → пропал из списка (мягкое удаление).