summaryrefslogtreecommitdiff
path: root/app/Console/TaskOverdueNotification.php
diff options
context:
space:
mode:
authorFrédéric Guillot <fred@kanboard.net>2014-11-29 14:01:03 -0500
committerFrédéric Guillot <fred@kanboard.net>2014-11-29 14:01:03 -0500
commitd6bde1e3ec1d0b0fae7bb85e274e1bebb65d78db (patch)
tree12f26fb81b61a32926cecfd80917a8eb928a4e07 /app/Console/TaskOverdueNotification.php
parente8fa25f9ca246fea085da46ea705a74b6de30d10 (diff)
Add command line export/calculation for daily project summaries
Diffstat (limited to 'app/Console/TaskOverdueNotification.php')
-rw-r--r--app/Console/TaskOverdueNotification.php69
1 files changed, 69 insertions, 0 deletions
diff --git a/app/Console/TaskOverdueNotification.php b/app/Console/TaskOverdueNotification.php
new file mode 100644
index 00000000..aa70fd01
--- /dev/null
+++ b/app/Console/TaskOverdueNotification.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace Console;
+
+use Symfony\Component\Console\Helper\Table;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class TaskOverdueNotification extends Base
+{
+ protected function configure()
+ {
+ $this
+ ->setName('notification:overdue-tasks')
+ ->setDescription('Send notifications for overdue tasks')
+ ->addOption('show', null, InputOption::VALUE_NONE, 'Show sent overdue tasks');
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $projects = array();
+ $tasks = $this->taskFinder->getOverdueTasks();
+
+ // Group tasks by project
+ foreach ($tasks as $task) {
+ $projects[$task['project_id']][] = $task;
+ }
+
+ // Send notifications for each project
+ foreach ($projects as $project_id => $project_tasks) {
+
+ $users = $this->notification->getUsersList($project_id);
+
+ $this->notification->sendEmails(
+ 'task_due',
+ $users,
+ array('tasks' => $project_tasks, 'project' => $project_tasks[0]['project_name'])
+ );
+ }
+
+ if ($input->getOption('show')) {
+ $this->showTable($output, $tasks);
+ }
+ }
+
+ public function showTable(OutputInterface $output, array $tasks)
+ {
+ $rows = array();
+
+ foreach ($tasks as $task) {
+ $rows[] = array(
+ $task['id'],
+ $task['title'],
+ date('Y-m-d', $task['date_due']),
+ $task['project_id'],
+ $task['project_name'],
+ $task['assignee_name'] ?: $task['assignee_username'],
+ );
+ }
+
+ $table = new Table($output);
+ $table
+ ->setHeaders(array('Id', 'Title', 'Due date', 'Project Id', 'Project name', 'Assignee'))
+ ->setRows($rows)
+ ->render();
+ }
+}