From 583e6bf064bbbdd0b031ea429fb1de949ddf64a7 Mon Sep 17 00:00:00 2001 From: Matthew Cillo Date: Mon, 7 Dec 2015 22:40:55 -0500 Subject: added working template of compare hours --- app/Controller/Analytic.php | 24 ++++++++++++++ app/Model/ProjectAnalytic.php | 40 +++++++++++++++++++++++ app/Model/TaskFinder.php | 1 + app/Template/analytic/compare_hours.php | 57 +++++++++++++++++++++++++++++++++ app/Template/analytic/sidebar.php | 5 ++- 5 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 app/Template/analytic/compare_hours.php (limited to 'app') diff --git a/app/Controller/Analytic.php b/app/Controller/Analytic.php index e03d8cab..603ace01 100644 --- a/app/Controller/Analytic.php +++ b/app/Controller/Analytic.php @@ -1,6 +1,7 @@ t($title, $project['name']), ))); } + + public function compareHours() + { + $project = $this->getProject(); + $params = $this->getProjectFilters('analytic', 'compareHours'); + $query = $this->taskFilter->search('status:all')->filterByProject($params['project']['id'])->getQuery(); + + + $paginator = $this->paginator + ->setUrl('analytics', 'compare_hours') + ->setMax(30) + ->setOrder(TaskModel::TABLE.'.id') + ->setQuery($query) + ->calculate(); + + $stats = $this->projectAnalytic->getHoursByStatus($project['id']); + + $this->response->html($this->layout('analytic/compare_hours', array( + 'project' => $project, + 'paginator' => $paginator, + 'metrics' => $stats, + ))); + } } diff --git a/app/Model/ProjectAnalytic.php b/app/Model/ProjectAnalytic.php index e77a0368..8a982bd7 100644 --- a/app/Model/ProjectAnalytic.php +++ b/app/Model/ProjectAnalytic.php @@ -179,4 +179,44 @@ class ProjectAnalytic extends Base return $stats; } + + + public function getHoursByStatus($project_id) + { + $stats = array(); + $columns = $this->board->getColumnsList($project_id); + + // Get the time spent of the last move for each tasks + $tasks = $this->db + ->table(Task::TABLE) + ->columns('id', 'time_estimated', 'time_spent', 'is_active') + ->eq('project_id', $project_id) + ->desc('id') + ->limit(1000) + ->findAll(); + + // Init values + $stats['closed'] = array( + 'time_spent' => 0, + 'time_estimated' => 0, + ); + $stats['open'] = array( + 'time_spent' => 0, + 'time_estimated' => 0, + ); + + + // Get time spent foreach task/column and take into account the last move + foreach ($tasks as &$task) { + if ($task['is_active']) { + $stats['open']['time_estimated'] += $task['time_estimated']; + $stats['open']['time_spent'] += $task['time_spent']; + } else { + $stats['closed']['time_estimated'] += $task['time_estimated']; + $stats['closed']['time_spent'] += $task['time_spent']; + } + } + + return $stats; + } } diff --git a/app/Model/TaskFinder.php b/app/Model/TaskFinder.php index 9514fe4a..836fbe46 100644 --- a/app/Model/TaskFinder.php +++ b/app/Model/TaskFinder.php @@ -122,6 +122,7 @@ class TaskFinder extends Base 'tasks.recurrence_parent', 'tasks.recurrence_child', 'tasks.time_estimated', + 'tasks.time_spent', User::TABLE.'.username AS assignee_username', User::TABLE.'.name AS assignee_name', Category::TABLE.'.name AS category_name', diff --git a/app/Template/analytic/compare_hours.php b/app/Template/analytic/compare_hours.php new file mode 100644 index 00000000..c52023c8 --- /dev/null +++ b/app/Template/analytic/compare_hours.php @@ -0,0 +1,57 @@ + + +
+ +
+ + +

+ +
+
+ + isEmpty()): ?> +

+ isEmpty()): ?> + + + + + + + + + getCollection() as $task): ?> + + + + + + + + +
order(t('Id'), 'tasks.id') ?>order(t('Title'), 'tasks.title') ?>order(t('Status'), 'tasks.is_active') ?>order(t('Estimated Time'), 'tasks.time_estimated') ?>order(t('Actual Time'), 'tasks.time_spent') ?>
+ url->link('#'.$this->e($task['id']), 'task', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id']), false, '', t('View this task')) ?> + + url->link($this->e($task['title']), 'task', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id']), false, '', t('View this task')) ?> + + + + + + + + e($task['time_estimated']) ?> + + e($task['time_spent']) ?> +
+ + + +
+ diff --git a/app/Template/analytic/sidebar.php b/app/Template/analytic/sidebar.php index c942f7ed..746fcebb 100644 --- a/app/Template/analytic/sidebar.php +++ b/app/Template/analytic/sidebar.php @@ -19,7 +19,10 @@
  • app->getRouterAction() === 'leadandcycletime' ? 'class="active"' : '' ?>> url->link(t('Lead and cycle time'), 'analytic', 'leadAndCycleTime', array('project_id' => $project['id'])) ?>
  • +
  • app->getRouterAction() === 'comparehours' ? 'class="active"' : '' ?>> + url->link(t('Compare hours'), 'analytic', 'compareHours', array('project_id' => $project['id'])) ?> +
  • - \ No newline at end of file + -- cgit v1.2.3 From c72e13a976a64feee992b77b1d676bf584e44c47 Mon Sep 17 00:00:00 2001 From: Matthew Cillo Date: Fri, 11 Dec 2015 21:16:00 -0500 Subject: removed debug line and added title --- app/Controller/Analytic.php | 1 + assets/js/src/CompareHoursColumnChart.js | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/Controller/Analytic.php b/app/Controller/Analytic.php index 603ace01..62f55f8d 100644 --- a/app/Controller/Analytic.php +++ b/app/Controller/Analytic.php @@ -188,6 +188,7 @@ class Analytic extends Base 'project' => $project, 'paginator' => $paginator, 'metrics' => $stats, + 'title' => t('Compare hours for "%s"', $project['name']), ))); } } diff --git a/assets/js/src/CompareHoursColumnChart.js b/assets/js/src/CompareHoursColumnChart.js index fca67689..d40809d2 100644 --- a/assets/js/src/CompareHoursColumnChart.js +++ b/assets/js/src/CompareHoursColumnChart.js @@ -14,7 +14,6 @@ CompareHoursColumnChart.prototype.execute = function() { categories.push(status); } - console.log(spent); c3.generate({ data: { columns: [spent, estimated], -- cgit v1.2.3 From b2b75a4a6e58ffda180e148fe87f996a24fa6973 Mon Sep 17 00:00:00 2001 From: Matthew Cillo Date: Fri, 11 Dec 2015 21:33:27 -0500 Subject: added/reworded some comments --- app/Controller/Analytic.php | 6 ++++++ app/Model/ProjectAnalytic.php | 13 +++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) (limited to 'app') diff --git a/app/Controller/Analytic.php b/app/Controller/Analytic.php index 62f55f8d..80ef3918 100644 --- a/app/Controller/Analytic.php +++ b/app/Controller/Analytic.php @@ -168,6 +168,12 @@ class Analytic extends Base ))); } + /** + * Show comparison between actual and estimated hours chart + * + * @access public + */ + public function compareHours() { $project = $this->getProject(); diff --git a/app/Model/ProjectAnalytic.php b/app/Model/ProjectAnalytic.php index 8a982bd7..79277e79 100644 --- a/app/Model/ProjectAnalytic.php +++ b/app/Model/ProjectAnalytic.php @@ -180,13 +180,18 @@ class ProjectAnalytic extends Base return $stats; } - + /** + * Get the time spent and estimated into each status + * + * @access public + * @param integer $project_id + * @return array + */ public function getHoursByStatus($project_id) { $stats = array(); - $columns = $this->board->getColumnsList($project_id); - // Get the time spent of the last move for each tasks + // Get the times related to each task $tasks = $this->db ->table(Task::TABLE) ->columns('id', 'time_estimated', 'time_spent', 'is_active') @@ -206,7 +211,7 @@ class ProjectAnalytic extends Base ); - // Get time spent foreach task/column and take into account the last move + // Add times spent and estimated to each status foreach ($tasks as &$task) { if ($task['is_active']) { $stats['open']['time_estimated'] += $task['time_estimated']; -- cgit v1.2.3