Обычно мы рассказываем, как помогаем нашим клиентам. Но сегодня разговор особенный — заказчиком биллинговой системы для ИТ-компании выступила сама ИНТЕРВОЛГА!
Когда мы увидели, что наши клиенты готовы работать по Agile-методологии и модели Time & Material (почасовая оплата), мы столкнулись с новым вызовом: управление проектами стало сложнее, а объем отчетности существенно вырос.
Один из наших ключевых принципов в работе с заказчиками — всегда говорить правду. В формате Time & Material это особенно важно: прозрачность должна быть полной — как в части “Time” (затраченное время), так и “Material” (стоимость работ).
В вопросах учета рабочего времени мы уже давно доверяем системе JetBrains YouTrack, поэтому точный подсчет часов по задачам для нас не был проблемой. Настоящая сложность скрывалась в другом — в расчете стоимости.
На первый взгляд задача казалась простой:
ОБЩЕЕ ВРЕМЯ × СТАВКА ЧАСА = ОБЩАЯ СТОИМОСТЬ
Но на практике все оказалось куда сложнее. В разных проектах и отделах применялись разные ставки. Были “бесплатные” задачи — ведь мы всегда бесплатно исправляем собственные ошибки — и задачи, требующие уникальной экспертизы. Простого умножения было явно недостаточно.
Проектные менеджеры буквально становились магами Excel, применяя сложные формулы и сводные таблицы. Создание одного отчета занимало от 30 до 50 минут, а у каждого менеджера было несколько клиентов.
Так перед нами и встала новая задача: выстроить полноценный процесс биллинга внутри компании.
Поиск решения
Первое, что пришло в голову, — добавить ставки часа прямо в YouTrack. Ведь все остальные данные уже были там.

Если бы на месте YouTrack была другая система, мы бы так и поступили. Но у YouTrack закрытая архитектура — сильно не доработаешь ни плагинами, ни расширениями. А отказаться от него мы не могли: он глубоко интегрирован с системами наших заказчиков. Поэтому мы решили пойти другим путем — создать отдельную систему, которая через REST API будет работать с YouTrack.
Сегодня подобную задачу мы бы решали средствами 1С, но на тот момент в ИНТЕРВОЛГЕ таких компетенций ещё не было. Зато опыт веб-разработки уже был, поэтому выбор пал на проверенный и популярный фреймворк Laravel.
Почему не "1С-Битрикс: Управление сайтом"?
Во-первых, мы понимали, что биллинговая система должна будет обрабатывать очень большие объемы данных, особенно в конце отчетных периодов. Уже тогда в компании работало 130 человек, и каждый ежедневно "трекивал" по 8 часов в YouTrack. Нагрузка постоянно росла, а значит, нам бы всё равно пришлось переписывать стандартные компоненты Битрикса под себя. Решили сразу делать систему на чистом коде.
Во-вторых, Битрикс — не единственная наша технологическая платформа. Мы активно развиваем экспертизу и в других направлениях: Laravel, OpenCart, Symfony и др. Такие внутренние проекты — отличный способ прокачивать команду.
В-третьих, решение писать на Laravel родилось по инициативе самой команды :)
Проектирование и разработка
Нашу новую биллинговую систему мы назвали “Проект 42” — в честь ответа на главный вопрос жизни, вселенной и всего остального.
Редкий случай, когда руководитель проекта — его же главный пользователь и бенефициар. Казалось бы, никаких долгих интервью и согласований: все требования к системе у него "в голове", можно сразу писать техническое задание.
Но оказалось, что у каждого проекта и менеджера есть свои нюансы и ожидания от отчетов. Поэтому все же пришлось провести серию интервью.
В процессе проектирования стало ясно: одних данных из YouTrack недостаточно. Нужно было учитывать внутреннюю структуру компании — кто в какой команде, кто чей руководитель. И не столько для разграничения прав доступа, сколько для упрощения отчетности и минимизации лишней информации.
Создавать отдельную базу сотрудников мы не стали. Вся необходимая информация уже была в нашем корпоративном Битрикс24, с которым мы тоже могли работать через REST API. Оставалось только сопоставить сотрудников из YouTrack и Битрикс24 — и здесь нам помог одинаковый e-mail в обеих системах.
Одним из частых аргументов против Laravel называют отсутствие готового административного раздела. Но в нашем случае это было не критично. Во-первых, при желании его можно добавить. Во-вторых, в “Проекте 42” пользователь решает всего две основные задачи: задает ставки часов и формирует отчет по проекту за выбранный период. Управление ставками мы органично встроили прямо в публичную часть интерфейса.
На этом мы не остановились. Чтобы убрать все лишние ручные действия, мы решили, что отчеты должны не только формироваться в "Проекте 42" и экспортироваться в Excel, но и автоматически выгружаться в Google Таблицы. Именно в таком формате большинство наших клиентов привыкли с ними работать.
Итоговая схема выглядит так:

Структура сайта:
Главная страница (/)
Авторизация через YouTrack (/auth/login)
Сводный отчет по проектам (/projects)
Сводный отчет по задачам (/projects/issues/{Проект})
Настройки ставок (/projects/{Проект}/bet/setting)
Мы реализовали 3 нетиповых обмена:
Laravel и YouTrack
YouTrack используется как сервер авторизации. Регистрировать новых пользователей или удалять старых отдельно для “Проекта 42” не нужно.
Laravel по расписанию через REST API из YouTrack забирает список проектов, по каждому проекту — список задач.
Laravel по расписанию через XML-API из YouTrack забирает временные затраты для каждой задачи каждого проекта.
Спустя несколько месяцев активного использования системы руководители проектов попросили добавить возможность точечной актуализации данных и мы добавили возможность ручного запуска обмена по каждому проекту отдельно.
Laravel и Битрикс24
Laravel по расписанию через REST API Битрикс24 забирает данные о структуре компании, определяя области видимости отчетов.
Laravel и Google Таблицы
Laravel вручную по запросу пользователя подключается к указанной Google-таблице и заполняет лист данными отчета. К этому файлу заранее может быть выдан доступ заказчику.
Как это выглядит
Главное требование к интерфейсу было простым и понятным: максимальная информативность и удобство работы. В качестве каркаса для сайта мы выбрали проверенный и надежный Bootstrap.
На скриншоте — сводный отчет по проектам. Этот раздел предоставляет руководителю проектов наглядный обзор всех его активных клиентов с ключевыми показателями: общая выработка, доля платной работы, средняя ставка часа и текущий финансовый баланс. Из этого отчета можно быстро перейти к детализации по каждому проекту или сразу скачать полный отчет.

Это детализация работ по одному проекту за период. Руководитель проекта видит список задач, статус, оценку и фактические трудозатраты.

Отчет для отправки клиенту можно скачать в CSV-файле или выгрузить в Google-Таблицу, и выглядит он так:

Если нужно скорректировать ставку часа, это можно сделать и точечно, и массово. Laravel хранит всю историю ставок, чтобы была возможность пересчитать баланс проекта за все его время.

Что в итоге
Всего за несколько месяцев мы разработали MVP, который успешно используем до сих пор. По самым скромным подсчетам, только за прошлый год наша система сэкономила руководителям проектов более 300 часов на подготовке отчетности. И это только прямые выгоды: ведь помимо стандартных отчетов появились также модули для взаиморасчетов между отделами, оценки эффективности команд, ежемесячные отчеты по отделам, круговые диаграммы занятости и многое другое, что мы добавляли в систему по мере роста компании.
Laravel в этом проекте проявил себя наилучшим образом. Он позволил сосредоточиться на глубокой, "низкоуровневой" разработке: создать собственный механизм кэширования, построить сложную структуру данных (более 50 таблиц), адаптироваться под высокую нагрузку и даже выделить отдельные части биллинга в микросервисы. Это отличный выбор, когда требуются высокая производительность, максимальная гибкость и нет нужды в готовых решениях.
Хотите заказать разработку или поддержку проекта на Laravel? Заполните форму на нашем сайте.