| <?php |
|
|
| namespace Kanboard\Analytic; |
|
|
| use Kanboard\Core\Base; |
| use Kanboard\Model\TaskModel; |
|
|
| |
| |
| |
| |
| |
| |
| class AverageTimeSpentColumnAnalytic extends Base |
| { |
| |
| |
| |
| |
| |
| |
| |
| public function build($project_id) |
| { |
| $stats = $this->initialize($project_id); |
|
|
| $this->processTasks($stats, $project_id); |
| $this->calculateAverage($stats); |
|
|
| return $stats; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| private function initialize($project_id) |
| { |
| $stats = array(); |
| $columns = $this->columnModel->getList($project_id); |
|
|
| foreach ($columns as $column_id => $column_title) { |
| $stats[$column_id] = array( |
| 'count' => 0, |
| 'time_spent' => 0, |
| 'average' => 0, |
| 'title' => $column_title, |
| ); |
| } |
|
|
| return $stats; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| private function processTasks(array &$stats, $project_id) |
| { |
| $tasks = $this->getTasks($project_id); |
|
|
| foreach ($tasks as &$task) { |
| foreach ($this->getTaskTimeByColumns($task) as $column_id => $time_spent) { |
| if (isset($stats[$column_id])) { |
| $stats[$column_id]['count']++; |
| $stats[$column_id]['time_spent'] += $time_spent; |
| } |
| } |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| private function calculateAverage(array &$stats) |
| { |
| foreach ($stats as &$column) { |
| $this->calculateColumnAverage($column); |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| private function calculateColumnAverage(array &$column) |
| { |
| if ($column['count'] > 0) { |
| $column['average'] = (int) ($column['time_spent'] / $column['count']); |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| private function getTaskTimeByColumns(array &$task) |
| { |
| $columns = $this->transitionModel->getTimeSpentByTask($task['id']); |
|
|
| if (! isset($columns[$task['column_id']])) { |
| $columns[$task['column_id']] = 0; |
| } |
|
|
| $columns[$task['column_id']] += $this->getTaskTimeSpentInCurrentColumn($task); |
|
|
| return $columns; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| private function getTaskTimeSpentInCurrentColumn(array &$task) |
| { |
| $end = $task['date_completed'] ?: time(); |
| return $end - $task['date_moved']; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| private function getTasks($project_id) |
| { |
| return $this->db |
| ->table(TaskModel::TABLE) |
| ->columns('id', 'date_completed', 'date_moved', 'column_id') |
| ->eq('project_id', $project_id) |
| ->desc('id') |
| ->limit(1000) |
| ->findAll(); |
| } |
| } |
|
|