| | <?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(); |
| | } |
| | } |
| |
|