Часто так получается, что не про все выполненные проекты мы успеваем рассказывать в нашем блоге сразу. Сегодня я хочу восполнить подобный пробел по одному из самых интересных лично для нас проектов, который мы успешно разработали и сдали еще в прошлом году. RedReport — система автоматизации генерации отчетов по продвижению, выполненную для компании Kelnik Studios.

Задача

Задача проекта RedReport проста — максимально упростить и оптимизировать работу отдела продвижения по генерации отчетов клиентам.

Kelnik – одна из лидирующих компаний Санкт-Петербурга по продвижению, число их клиентов измеряется даже не десятками. И каждый месяц чуть ли на целую неделю все силы отдела были направлены только на то, чтобы подготовить каждому клиенту отчет по результатам работы за месяц. С графиками, таблицами, проделанными работами и выводами, всё это в фирменном стиле в специальном вордовском документе.

Глобальную задачу разбили на составляющие, вот основные:

  • управление проектами клиентов, возможность заполнения информации
  • сбор данных по проекту с liveinternet
  • сбор данных по проекту с google analytics
  • генерация веб-версии отчетов с таблицами, графиками, текстовыми данными и возможностью все это гибко редактировать
  • генерация документа Microsoft Word в фирменном стиле Kelnik Studios для отправки клиентам

Взаимодействие на проекте

С самого начала мы договорились работать итерационно. Полного ТЗ на проект не было. Мы просто встречались с Леной Михайловой (руководителем отдела), обсуждали, рисовали на бумаге, затем это формализовали в список задач, фиксировали его в виде соглашений, по нему потом и сверялись. Постепенно от бумаги мы перешли уже к обзору готового функционала тестовой версии. А еще через несколько месяцев, когда запустили тестовую версию, обсуждали потребности, обнаруженные при непосредственной эксплуатации.

Каждая итерация занимала примерно месяц. Разработка базовой тестовой версии заняла примерно 3 месяца, еще примерно столько же работали над совершенствованием. После чего последовал небольшой период сопровождения. И в конце мы передали проект на поддержку уже самой компании, которая предусмотрительно наняла выделенного программиста под нужды отдела.

Вся работа с заказчиком была организована в basecamp, куда был доступ нескольким сотрудникам Kelnik и всей нашей команде. Мы фиксировали задачи на этап в виде списков todo, по мере готовности сообщали об этом, оставляя комментарии. Обратная связь, новые идеи, просьбы и сообщения о багах по договоренности также заводились в специальные листы задач. Каждый мог в любой момент уточнить какие-либо детали, поделиться информацией и сориентироваться по текущему прогрессу.

Технологии

Проект разработан на Symfony версии 2.3. Работа с базой через Doctrine. Вот список, использованных бандлов Symfony:

  • friendsofsymfony/user-bundle – для организации работы пользователей, разделения прав доступа на сотрудников и админов
  • friendsofsymfony/jsrouting-bundle — для организации динамических действий в конструкторе отчетов
  • knplabs/knp-paginator-bundle — пагинация списков проектов и отчетов
  • knplabs/knp-menu-bundle — работа меню системы
  • doctrine/doctrine-fixtures-bundle — для организации тестовых данных
  • doctrine/doctrine-migrations-bundle — правильное управление изменениями структуры базы, используется по умолчанию во всех наших проектах на Symfony2
  • avalanche123/imagine-bundle — работа с изображениями
  • sensio/buzz-bundle — коннектор для библиотеки Buzz, используемой для сбора данных из внешних систем
  • fabpot/goutte — умная и легкая работа с парсингом данных
  • widop/google-analytics-bundle — работа с Google Analytics API
  • oldsound/rabbitmq-bundle — работа очереди для сбора данных
  • evercodelab/hipchat-monolog-bundle — наш бандл для отправки ошибок работы проект в рабочий чат
  • exercise/htmlpurifier-bundle — очистка данных

Для генерации графиков использовалась библиотека jpgraph. Нам было необходимо кастомизируемое решение, которое позволяло генерировать изображения на стороне сервера, так как изображения затем нужно было экспортировать в docx версию отчета.

Особое внимание, конечно, пришлось уделить генерации отчетов в формате Microsoft Word. Мы перепробовали все доступные варианты, которые только смогли найти. В итоге остановились на платной библиотеке phpdocx. Даже с ней работа была не простой. В процессе пришлось местами влезать в исходный код самой библиотеки, чтобы одолеть правильные стили. Возможно, как-нибудь мы еще расскажем отдельно про этот опыт. С момента сдачи проекта, библиотека активно развивалась, выпустив в этом году новую мажорную версию.

В целях ускорения разработки, с дизайном решили не заморачиваться, все оформление сделано на twitter bootstrap.

Результат

К результату мы двигались упорно, дорога не всегда была простой. Но мы его добились. Более того, позволив частичное использование системы еще до полной ее готовности. Теперь работа над созданием отчета сводилась к тому, чтобы сгенерировать отчет всего одной кнопкой.

Конечно, при необходимости можно в отчете поменять заведенные через настройки тексты, проставить даты графиков и таблиц под нужные интервалы и сделать прочие кастомизации. Главное, что ушла необходимость собирать скриншоты графиков, копипастить данные таблиц с кучи сайтов и источников. Проверить достоверность данных можно перейдя по быстрым ссылкам прямо рядом с графиком или таблицей.

Ниже скриншоты только некоторых экранов системы.

Отзыв

А вот какой отзыв нам оставила Елена, руководитель отдела продвижения Интерактивного агентства «Кельник»:

Огромное спасибо Роману и команде программистов Evercode за профессионализм и ответственное и трепетное отношение к качеству своих проектов. При условиях неполного ТЗ на разработку и большого количества незафиксированных идей, когда многое приходилось обсуждать и делать «на ходу», специалистам Evercode удалось учесть в разработке весь необходимый объем информации, предложить наиболее подходящие и современные технологии и реализовать все наши идеи в полноценный рабочий продукт при минимальных усилиях с нашей стороны. Это особенно актуально при условии ограниченного количества выделенного времени. Очень хочется отметить качество нашего взаимодействия с компанией – отдельное спасибо Роману за внимательное отношение к нам, как к клиентам, «улавливание» иногда даже неоговоренных деталей, оперативность при решении срочных задач, возможность регулярных встреч, которые помогли охватить весь спектр важных деталей. Особенно хочется подчеркнуть, что с Evercode мы всегда находили оптимальное решение без торможения процесса — это было для нас очень важно в условиях сложности проекта. Кажется, что если специалисты Evercode берутся за проект, то приложат все усилия, и сделают его максимально профессионально, качественно, аккуратно и с душой :). Спасибо вам! Желаем больших и интересных проектов в настоящем и будущем! 🙂