| <?php |
|
|
| namespace Kanboard\Analytic; |
|
|
| use Kanboard\Core\Base; |
| use Kanboard\Model\TaskModel; |
|
|
| |
| |
| |
| |
| |
| |
| class AverageLeadCycleTimeAnalytic extends Base |
| { |
| |
| |
| |
| |
| |
| |
| |
| public function build($project_id) |
| { |
| $stats = array( |
| 'count' => 0, |
| 'total_lead_time' => 0, |
| 'total_cycle_time' => 0, |
| 'avg_lead_time' => 0, |
| 'avg_cycle_time' => 0, |
| ); |
|
|
| $tasks = $this->getTasks($project_id); |
|
|
| foreach ($tasks as &$task) { |
| $stats['count']++; |
| $stats['total_lead_time'] += $this->calculateLeadTime($task); |
| $stats['total_cycle_time'] += $this->calculateCycleTime($task); |
| } |
|
|
| $stats['avg_lead_time'] = $this->calculateAverage($stats, 'total_lead_time'); |
| $stats['avg_cycle_time'] = $this->calculateAverage($stats, 'total_cycle_time'); |
|
|
| return $stats; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| private function calculateAverage(array &$stats, $field) |
| { |
| if ($stats['count'] > 0) { |
| return (int) ($stats[$field] / $stats['count']); |
| } |
|
|
| return 0; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| private function calculateLeadTime(array &$task) |
| { |
| $end = $task['date_completed'] ?: time(); |
| $start = $task['date_creation']; |
|
|
| return $end - $start; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| private function calculateCycleTime(array &$task) |
| { |
| $end = (int) $task['date_completed'] ?: time(); |
| $start = (int) $task['date_started']; |
|
|
| |
| if ($start > 0 && $end > $start) { |
| return $end - $start; |
| } |
|
|
| return 0; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| private function getTasks($project_id) |
| { |
| return $this->db |
| ->table(TaskModel::TABLE) |
| ->columns('date_completed', 'date_creation', 'date_started') |
| ->eq('project_id', $project_id) |
| ->desc('id') |
| ->limit(1000) |
| ->findAll(); |
| } |
| } |
|
|