# План реорганизации Manager 2.0 Рабочая папка рефакторинга: `docs/refactor/`. Связанные документы: - [Исходное ТЗ](source-tz.md) - [Карта нового меню](menu.md) - [ТЗ: ДКР](tz-dkr.md) - [ТЗ: Каталог общий](tz-catalog-common.md) - [ТЗ: Графики](tz-schedules.md) - [ТЗ: Рекламации](tz-reclamations.md) - [ТЗ: Запчасти](tz-spare-parts.md) - [ТЗ: Склад наличие](tz-stock-availability.md) - [ТЗ: Документация](tz-documents.md) - [ТЗ: Технич. описание](tz-technical-description.md) - [ТЗ: Калькуляции](tz-calculations.md) - [ТЗ: Администратор](tz-admin.md) ## Цель Перевести текущую CRM в структуру Manager 2.0: реорганизовать верхнее меню, сохранить самостоятельный модуль ДКР с его собственным каталогом, добавить отдельный `Каталог общий`, добавить заглушки для новых модулей и подготовить отдельные ТЗ по каждому разделу перед глубокой разработкой. ## Принятые решения - [x] ДКР остается самостоятельным модулем. - [x] Каталог ДКР и `Каталог общий` — разные сущности. - [x] Каталог ДКР остается внутри меню ДКР. - [x] `Каталог общий` реализуется отдельно как общий справочник платформы. - [x] `Запчасти` — общий модуль для всей платформы, включая ДКР. - [x] `Склад наличие` должен быть реализован полностью по образцу раздела `Запчасти`, с адаптацией под МАФ/позиции из `Каталог общий`. - [x] Новые модули на первом этапе получают страницы-заглушки `В разработке`. - [x] Основная карта меню хранится в [docs/refactor/menu.md](menu.md). - [x] Текущие рабочие маршруты оставляем без переименования. - [x] На первом этапе оставляем текущие права доступа. - [x] Реорганизацию меню делаем сразу общей для всей платформы Manager 2.0. - [x] Заглушки новых модулей показываем всем авторизованным пользователям. - [x] На новые модули выбранный год не влияет. - [x] `Технич. описание`, вероятно, будет поглощено модулем `Каталог общий`; готовый Laravel-модуль используем как источник экспорта. - [x] `Калькуляции` работают через внешний API: запрос по артикулу, возврат калькуляции при наличии. - [x] `Рекламации -> ДКР` реализуется как фильтр текущего списка. - [x] Источник рекламации хранится отдельным полем: при создании из площадки — `ДКР`, иначе `Прочее`. - [x] Маршруты `Каталог общий` используют префикс `common-catalog/...`. - [x] Таблицы и права `Каталог общий` используют техническое имя `common-catalog`. - [x] Техническое имя модуля `Склад наличие`: `stock`. - [x] Роль `помощник руководителя`: `assistant_head`. ## Этап 0. Документация - [x] Изучить ТЗ Manager 2.0 и схему зависимостей. - [x] Составить карту нового меню. - [x] Перенести карту меню в `docs/refactor/menu.md`. - [x] Создать общий план реализации в `docs/refactor/plan.md`. - [x] Написать отдельное ТЗ для модуля `ДКР`: [tz-dkr.md](tz-dkr.md). - [x] Написать отдельное ТЗ для модуля `Каталог общий`: [tz-catalog-common.md](tz-catalog-common.md). - [x] Написать отдельное ТЗ для модуля `Графики`: [tz-schedules.md](tz-schedules.md). - [x] Написать отдельное ТЗ для модуля `Рекламации`: [tz-reclamations.md](tz-reclamations.md). - [x] Написать отдельное ТЗ для модуля `Запчасти`: [tz-spare-parts.md](tz-spare-parts.md). - [x] Написать отдельное ТЗ для модуля `Склад наличие`: [tz-stock-availability.md](tz-stock-availability.md). - [x] Написать отдельное ТЗ для модуля `Документация`: [tz-documents.md](tz-documents.md). - [x] Написать отдельное ТЗ для модуля `Технич. описание`: [tz-technical-description.md](tz-technical-description.md). - [x] Написать отдельное ТЗ для модуля `Калькуляции`: [tz-calculations.md](tz-calculations.md). - [x] Написать отдельное ТЗ для модуля `Администратор`: [tz-admin.md](tz-admin.md). ## Этап 1. Реорганизация меню - [ ] Проверить текущие permissions для всех существующих пунктов меню. - [ ] Для новых пунктов-заглушек открыть доступ всем авторизованным пользователям. - [ ] Добавить общий механизм страницы `В разработке`. - [ ] Добавить маршруты для новых разделов-заглушек. - [ ] Перестроить `resources/views/layouts/menu.blade.php` под новую древовидную структуру. - [ ] Сгруппировать существующие пункты ДКР внутрь верхнего меню `ДКР`. - [ ] Оставить `Каталог` внутри меню `ДКР`. - [ ] Добавить отдельный верхний пункт `Каталог общий`. - [ ] Сгруппировать `График монтажей` внутрь верхнего меню `Графики`. - [ ] Добавить заглушки `График заказов` и `График доставок`. - [ ] Разложить `Рекламации` на `Все` и `ДКР`. - [ ] Оставить `Запчасти` отдельной верхней группой с текущими вкладками. - [ ] Добавить заглушки `Склад наличие -> Наличие` и `Склад наличие -> Заказы`. - [ ] Добавить заглушки `Документация`, `Каталог общий`, `Технич. описание`, `Калькуляции`. - [ ] Проверить, что выбранный год не скрывает и не фильтрует новые модули. - [ ] Переименовать группу `Администрирование` в `Администратор`. - [ ] Проверить отображение меню для основных ролей. ## Этап 2. Каталог общий - [ ] Зафиксировать, что текущий `catalog.*` относится к каталогу ДКР. - [ ] Спроектировать маршруты с префиксом `common-catalog/...`, таблицы и права с техническим именем `common-catalog`. - [ ] Сверить текущую модель каталога ДКР с требованиями общего каталога как источник паттернов, без смешивания данных. - [ ] Определить недостающие поля по шаблону калькулятора. - [ ] Использовать текущий файловый механизм для хранения фото и документов позиции. - [ ] Доработать импорт/экспорт позиций. - [ ] Доработать карточку позиции. - [ ] Определить встраивание `Технич. описание` в карточку общего каталога. - [ ] Добавить интеграцию с `Калькуляции` через внешний API по артикулу. - [ ] Проверить связи с графиками, рекламациями и складом наличия. ## Этап 3. Склад наличие - [ ] Разобрать текущую реализацию `Запчасти` как эталон. - [ ] Зафиксировать соответствие сущностей `Запчасти` -> `Склад наличие`. - [ ] Спроектировать таблицы/модели `stock` для заказов, остатков, броней, списаний и истории. - [ ] Реализовать подвкладку `Наличие`. - [ ] Реализовать подвкладку `Заказы`. - [ ] Реализовать карточку позиции. - [ ] Реализовать бронирование. - [ ] Реализовать списание с конкретных заказов. - [ ] Реализовать отмену брони. - [ ] Реализовать историю движений. - [ ] Реализовать импорт заказов/остатков. - [ ] Реализовать экспорт наличия в PDF по шаблону. - [ ] Настроить права: `Наличие` всем, `Заказы` админу и роли `assistant_head`. - [ ] Покрыть критичную логику расчетов тестами. ## Этап 4. Графики - [ ] Описать источник данных для `График заказов`. - [ ] Спроектировать загрузку данных через 1С. - [ ] Реализовать или перенести `График заказов`. - [ ] Реализовать `График доставок` в виде недельного списка. - [ ] Добавить ручное планирование занятости водителей. - [ ] Связать доставки с адресами из графика заказов. - [ ] Перенести текущий `График монтажей` в новую группу без потери логики. - [ ] Проверить связи монтажей с ДКР-площадками и графиком заказов. ## Этап 5. Рекламации - [ ] Разделить представление на `Все` и `ДКР`. - [ ] Реализовать `ДКР` как фильтр текущего списка. - [ ] Добавить отдельное поле источника рекламации: `ДКР` / `Прочее`. - [ ] Проверить создание рекламаций по площадкам ДКР. - [ ] Проверить связь рекламаций с графиком заказов. - [ ] Проверить формирование запросов на запчасти из рекламации. - [ ] Сохранить текущую рабочую логику рекламаций. ## Этап 6. Запчасти - [ ] Перенести раздел в новую структуру меню без изменения бизнес-логики. - [ ] Проверить вкладки `Каталог`, `Заказы запчастей`, `Контроль наличия`, `Справочник расшифровок`, `Справка`. - [ ] Проверить, что `Запчасти` используются как общий модуль, включая ДКР. - [ ] Использовать реализацию раздела как эталон для `Склад наличие`. - [ ] После внедрения склада проверить, что логика запчастей не изменилась. ## Этап 7. Информационные разделы - [ ] Реализовать модуль `Документация`: папки и файлы. - [ ] Изучить готовый Laravel-модуль техописаний. - [ ] Перенести/адаптировать экспорт техописаний в карточку общего каталога. - [ ] Подготовить заглушку для `Калькуляции`. - [ ] После получения подробного описания API калькуляций реализовать запрос из карточки позиции по артикулу. ## Этап 8. Администратор - [ ] Переименовать меню `Администрирование` в `Администратор`. - [ ] Сохранить текущие пункты администрирования. - [ ] Проверить доступы для пользователей, ролей и настроек. - [ ] При необходимости добавить права для новых разделов Manager 2.0. ## Этап 9. Проверка - [ ] Запустить `make test` внутри контейнеров. - [ ] Проверить меню в браузере под админом. - [ ] Проверить меню под пользователем с ограниченными правами. - [ ] Проверить, что существующие маршруты ДКР работают после перегруппировки меню. - [ ] Проверить, что текущий каталог доступен внутри ДКР. - [ ] Проверить, что `Каталог общий` открыт как отдельный новый раздел/заглушка. - [ ] Проверить, что все новые пункты-заглушки открываются у авторизованных пользователей и не дают 404/403. - [ ] Проверить, что выбранный год не влияет на новые модули. - [ ] Зафиксировать результат проверки в этом плане. ## Открытые вопросы - [ ] Оставлять ли `Технич. описание` отдельным пунктом меню или полностью встроить в `Каталог общий`? - [ ] Какой точный контракт внешнего API калькуляций?