Цель тестового задания Реализовать Drupal-модуль, который выступает в роли моста между: внешней SQLite БД (production monitor), и базой данных Drupal. Модуль должен: читать данные об изделии из SQLite, выполнять расчёты на стороне PHP, сохранять агрегированную информацию в Drupal, выводить таблицу операций изделия. ❗ Задание является частью будущего переноса всей системы на Drupal. Важно не только «чтобы работало», но и как это реализовано.
Общие условия CMS: Drupal 10 или 11 Источник данных: SQLite (workshop_bot.db) Дизайн / верстка: не важны Twig: только отображение, без логики Фокус: архитектура, чистота кода, расчёты
Архитектура подключения к SQLite Модуль должен получать данные из внешней SQLite БД, используя: Drupal Database API; централизованное подключение (не в контроллере). ❌ Запрещено: прямые вызовы PDO в контроллерах; sqlite_open, new PDO() в бизнес-логике; SQL в Twig.
Модуль Название: factory_bridge Структура ожидаемо включает: сервис для работы с SQLite; контроллер (или блок) для вывода данных; при необходимости — entity или node.
Данные, используемые в тестовом задании Используемые таблицы SQLite (обязательно): order_items assigned_tasks work_sessions ❌ Остальные таблицы, описанные в DATABASE_SCHEMA.md, в рамках тестового задания использовать не требуется.
Алгоритмы расчёта (обязательные) Для выбранного изделия (order_items.internal_id): 1. Операции Операция = одна запись из assigned_tasks, связанная с изделием. 2. НЧ План Берётся напрямую из: assigned_tasks.applied_norm_hours
3. Ч Факт Сумма длительности всех рабочих сессий операции: Σ (work_sessions.end_time - work_sessions.start_time)
если end_time = NULL — сессия считается активной; расчёт выполняется на стороне PHP. 4. Дельта Δ = План – Факт
Вывод данных Реализовать страницу или блок, который выводит таблицу операций изделия. Минимальный набор колонок: Код / Название операции НЧ План Ч Факт Δ (дельта) Скриншот текущей реализации (не на Drupal) приложен только как пример структуры данных, визуальное совпадение не требуется.
Сохранение в Drupal При импорте данных: создать или обновить сущность в Drupal: Node типа «Изделие» или Custom Entity (по выбору разработчика). Сохранить минимум: название изделия, артикул / код, статус (произвольная логика допустима).
Критерии приёмки (на что смотрим) ✔ Drupal Coding Standards ✔ Использование Services и Dependency Injection ✔ Отсутствие прямых SQL-инъекций в БД Drupal ✔ Корректная работа с датами и таймзонами (ISO) ✔ Вся бизнес-логика в PHP, не в Twig ✔ Читаемость и структура кода
Формат сдачи Git-репозиторий или архив с модулем factory_bridge. README приветствуется, но не обязателен.