summaryrefslogtreecommitdiff
path: root/app/Model
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2015-04-11 23:01:17 -0400
committerFrederic Guillot <fred@kanboard.net>2015-04-11 23:01:17 -0400
commit9ca2ba21272ddb1958e0b5b2f5842cde42508139 (patch)
treec6db297008d728a44040af5804386802b457219e /app/Model
parent7df055aff1e1056d87bb720531d60cb079805f94 (diff)
Add burndown chart
Diffstat (limited to 'app/Model')
-rw-r--r--app/Model/ProjectAnalytic.php2
-rw-r--r--app/Model/ProjectDailySummary.php36
2 files changed, 38 insertions, 0 deletions
diff --git a/app/Model/ProjectAnalytic.php b/app/Model/ProjectAnalytic.php
index 46f2242d..a663f921 100644
--- a/app/Model/ProjectAnalytic.php
+++ b/app/Model/ProjectAnalytic.php
@@ -83,6 +83,8 @@ class ProjectAnalytic extends Base
$metric['percentage'] = round(($metric['nb_tasks'] * 100) / $total, 2);
}
+ ksort($metrics);
+
return array_values($metrics);
}
}
diff --git a/app/Model/ProjectDailySummary.php b/app/Model/ProjectDailySummary.php
index 0a06bbd4..9e7c836a 100644
--- a/app/Model/ProjectDailySummary.php
+++ b/app/Model/ProjectDailySummary.php
@@ -20,6 +20,9 @@ class ProjectDailySummary extends Base
/**
* Update daily totals for the project
*
+ * "total" is the number open of tasks in the column
+ * "score" is the sum of tasks score in the column
+ *
* @access public
* @param integer $project_id Project id
* @param string $date Record date (YYYY-MM-DD)
@@ -40,6 +43,7 @@ class ProjectDailySummary extends Base
'project_id' => $project_id,
'column_id' => $column_id,
'total' => 0,
+ 'score' => 0,
));
$db->table(ProjectDailySummary::TABLE)
@@ -47,6 +51,11 @@ class ProjectDailySummary extends Base
->eq('column_id', $column_id)
->eq('day', $date)
->update(array(
+ 'score' => $db->table(Task::TABLE)
+ ->eq('project_id', $project_id)
+ ->eq('column_id', $column_id)
+ ->eq('is_active', Task::STATUS_OPEN)
+ ->sum('score'),
'total' => $db->table(Task::TABLE)
->eq('project_id', $project_id)
->eq('column_id', $column_id)
@@ -92,12 +101,39 @@ class ProjectDailySummary extends Base
ProjectDailySummary::TABLE.'.column_id',
ProjectDailySummary::TABLE.'.day',
ProjectDailySummary::TABLE.'.total',
+ ProjectDailySummary::TABLE.'.score',
Board::TABLE.'.title AS column_title'
)
->join(Board::TABLE, 'id', 'column_id')
->eq(ProjectDailySummary::TABLE.'.project_id', $project_id)
->gte('day', $from)
->lte('day', $to)
+ ->asc(ProjectDailySummary::TABLE.'.day')
+ ->findAll();
+ }
+
+ /**
+ * Get raw metrics for the project within a data range grouped by day
+ *
+ * @access public
+ * @param integer $project_id Project id
+ * @param string $from Start date (ISO format YYYY-MM-DD)
+ * @param string $to End date
+ * @return array
+ */
+ public function getRawMetricsByDay($project_id, $from, $to)
+ {
+ return $this->db->table(ProjectDailySummary::TABLE)
+ ->columns(
+ ProjectDailySummary::TABLE.'.day',
+ 'SUM('.ProjectDailySummary::TABLE.'.total) AS total',
+ 'SUM('.ProjectDailySummary::TABLE.'.score) AS score'
+ )
+ ->eq(ProjectDailySummary::TABLE.'.project_id', $project_id)
+ ->gte('day', $from)
+ ->lte('day', $to)
+ ->asc(ProjectDailySummary::TABLE.'.day')
+ ->groupBy(ProjectDailySummary::TABLE.'.day')
->findAll();
}