Интеграция Drupal с внешней SQLite БД (Production Monitor)

Алексей5 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
20.12.2025

Цель тестового задания

Реализовать 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 приветствуется, но не обязателен.



Авторизуйтесь для подачи заявки

Заявки фрилансеров