SharePoint Alfresco PHP MySQL
О сайте Контакты
понедельник, 7 апреля 2014 г.

Повторяющиеся задачи в Redmine

Если делить задачи про принципу повторяемости, то можно выделить одноразовые и те, которые повторяются с определенной периодичностью: год, неделя, месяц и т.д. С одноразовыми задачами все понятно, из можно ставить в любом трекере. Вот с повторяющимися может возникнуть проблема, так как не все трекеры позволяют выставить повторяемость у задачи. Рассмотрим решение проблемы повторяющихся задач в среде Redmine.

Redmine является бесспорно одной из лучших систем планирования и учета задач. Однако, в ней (пока) нет возможности делать задачу повторяемой. Например, надо раз в месяц отсылать отчет куда-то, и чтобы не забыть, повторяющаяся задача как раз бы пригодилась. Разумеется, есть плагины, которые позволяют реализовать это. Но чаще всего любой плагин решает задачу своего разработчика, оставляя в стороне потребности обычного среднестатистического пользователя. В общем, не все плагины хорошие и я предлагаю решить проблему своими силами при минимальных затратах времени.

Итак, сформулируем требования. Нужно, чтобы задача давала знать о себе с интервалом в определенный период. При этом не должна порушиться архитектура Redmine. Задача должна быть решена исполнителем, ход решения должен быть прозрачен.

На мой взгляд, решение проблемы очевидно. Нужно просто создавать новые задачи с заданным интервалом. Создание задач обеспечит механизм приема email багтрекера, тем самым мы вообще не ломаем логику Redmine. Содержание задачи и ее параметры можно передавать в письме. Отправлять письма можно с помощью скрипта планировщика задач или кроном. Расписание отправки можно хранить в простенькой базе данных, в которой также будут храниться все параметры создаваемой задачи.

База данных с перечнем повторяющихся задач

Вот структура таблицы MySQL, в которой я храню повторяющиеся задачи:

CREATE TABLE `scheduled_tasks` (
  `Task_name` varchar(50) NOT NULL,
  `Task_subject` varchar(255) DEFAULT NULL,
  `Task_text` mediumtext,
  `Assign_to` varchar(20) DEFAULT NULL,
  `Due` int(11) DEFAULT NULL,
  `Tracker` varchar(20) DEFAULT NULL,
  `Estimated` int(11) DEFAULT NULL,
  `Notes` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Task_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Здесь Task_name — идентификатор задачи, Task_subject — название задачи (тема письма), Task_text — подробное описание задачи (тело письма), Assign_to — кому назначить задачу, Due — сколько дней отводится на выполнение, Tracker — тип задачи, Estimated — оценка задачи в часах, Notes — примечание, что делает данная задача.

Скрипт отправки задач по email

Я написал скрипт на PHP, который вызываю из планировщика задач командным файлом. Собственно, такая команда внутри файла redmine-scheduled-tasks.cmd:

call php.exe redmine-scheduled-tasks.php %1 %2

Первый параметр — идентификатор задачи. По нему идет Select из базы данных. Второй — имя пользователя в Redmine, кому назначается задача.

Архив с файлом redmine-scheduled-tasks.php вы можете скачать, изменяйте и используйте код на свое усмотрение.

Работа с созданными задачами

Командный файл запускается планировщиком задач. Время запуска настраивается в самом планировщике, так же как и два вышеупомянутых параметра. Сколько задач в базе данных, столько и задач надо создать в планировщике. Один раз их создав, мы получаем работающий механизм генерации повторяющихся задач. PHP-скрипт по сути отправляет письмо в Redmine, то есть он сперва должен быть настроен на прием писем. Созданные таким образом задачи работают как напоминания. Сделал задачу, списал время — процедура работы с этими задачами самая обычная. Из минусов можно отметить только то, что не реализован учет праздников — чтобы задачи не сыпались в праздники. Ну не беда, это терпимо.

Sergey Lysenko, понедельник, 7 апреля 2014 г.

Комментарии: