summaryrefslogtreecommitdiff
path: root/assets/js/src/analytic.js
diff options
context:
space:
mode:
Diffstat (limited to 'assets/js/src/analytic.js')
-rw-r--r--assets/js/src/analytic.js206
1 files changed, 187 insertions, 19 deletions
diff --git a/assets/js/src/analytic.js b/assets/js/src/analytic.js
index bec4d76e..a5df0ac6 100644
--- a/assets/js/src/analytic.js
+++ b/assets/js/src/analytic.js
@@ -6,6 +6,9 @@
var metrics = $("#chart").data("metrics");
var columns = [];
var groups = [];
+ var categories = [];
+ var inputFormat = d3.time.format("%Y-%m-%d");
+ var outputFormat = d3.time.format($("#chart").data("date-format"));
for (var i = 0; i < metrics.length; i++) {
@@ -19,7 +22,12 @@
}
}
else {
+
columns[j].push(metrics[i][j]);
+
+ if (j == 0) {
+ categories.push(outputFormat(inputFormat.parse(metrics[i][j])));
+ }
}
}
}
@@ -27,16 +35,13 @@
c3.generate({
data: {
columns: columns,
- x: metrics[0][0],
type: 'area-spline',
groups: [groups]
},
axis: {
x: {
- type: 'timeseries',
- tick: {
- format: $("#chart").data("date-format")
- }
+ type: 'category',
+ categories: categories
}
}
});
@@ -47,6 +52,9 @@
{
var metrics = $("#chart").data("metrics");
var columns = [[$("#chart").data("label-total")]];
+ var categories = [];
+ var inputFormat = d3.time.format("%Y-%m-%d");
+ var outputFormat = d3.time.format($("#chart").data("date-format"));
for (var i = 0; i < metrics.length; i++) {
@@ -66,21 +74,22 @@
columns[0][i] += metrics[i][j];
}
+
+ if (j == 0) {
+ categories.push(outputFormat(inputFormat.parse(metrics[i][j])));
+ }
}
}
}
c3.generate({
data: {
- columns: columns,
- x: metrics[0][0]
+ columns: columns
},
axis: {
x: {
- type: 'timeseries',
- tick: {
- format: $("#chart").data("date-format")
- }
+ type: 'category',
+ categories: categories
}
}
});
@@ -125,11 +134,13 @@
// Draw budget chart
function drawBudget()
{
+ var categories = [];
var metrics = $("#chart").data("metrics");
var labels = $("#chart").data("labels");
+ var inputFormat = d3.time.format("%Y-%m-%d");
+ var outputFormat = d3.time.format($("#chart").data("date-format"));
var columns = [
- [labels["date"]],
[labels["in"]],
[labels["left"]],
[labels["out"]]
@@ -141,30 +152,178 @@
colors[labels["out"]] = '#DF3A01';
for (var i = 0; i < metrics.length; i++) {
- columns[0].push(metrics[i]["date"]);
- columns[1].push(metrics[i]["in"]);
- columns[2].push(metrics[i]["left"]);
- columns[3].push(metrics[i]["out"]);
+ categories.push(outputFormat(inputFormat.parse(metrics[i]["date"])));
+ columns[0].push(metrics[i]["in"]);
+ columns[1].push(metrics[i]["left"]);
+ columns[2].push(metrics[i]["out"]);
}
c3.generate({
data: {
- x: columns[0][0],
columns: columns,
colors: colors,
type : 'bar'
},
+ bar: {
+ width: {
+ ratio: 0.25
+ }
+ },
+ grid: {
+ x: {
+ show: true
+ },
+ y: {
+ show: true
+ }
+ },
axis: {
x: {
- type: 'timeseries',
+ type: 'category',
+ categories: categories
+ }
+ }
+ });
+ }
+
+ // Draw chart for average time spent into each column
+ function drawAvgTimeColumn()
+ {
+ var metrics = $("#chart").data("metrics");
+ var plots = [$("#chart").data("label")];
+ var categories = [];
+
+ for (var column_id in metrics) {
+ plots.push(metrics[column_id].average);
+ categories.push(metrics[column_id].title);
+ }
+
+ c3.generate({
+ data: {
+ columns: [plots],
+ type: 'bar'
+ },
+ bar: {
+ width: {
+ ratio: 0.5
+ }
+ },
+ axis: {
+ x: {
+ type: 'category',
+ categories: categories
+ },
+ y: {
tick: {
- format: $("#chart").data("date-format")
+ format: formatDuration
}
}
+ },
+ legend: {
+ show: false
}
});
}
+ // Draw chart for average time spent into each column
+ function drawTaskTimeColumn()
+ {
+ var metrics = $("#chart").data("metrics");
+ var plots = [$("#chart").data("label")];
+ var categories = [];
+
+ for (var i = 0; i < metrics.length; i++) {
+ plots.push(metrics[i].time_spent);
+ categories.push(metrics[i].title);
+ }
+
+ c3.generate({
+ data: {
+ columns: [plots],
+ type: 'bar'
+ },
+ bar: {
+ width: {
+ ratio: 0.5
+ }
+ },
+ axis: {
+ x: {
+ type: 'category',
+ categories: categories
+ },
+ y: {
+ tick: {
+ format: formatDuration
+ }
+ }
+ },
+ legend: {
+ show: false
+ }
+ });
+ }
+
+ // Draw lead and cycle time for the project
+ function drawLeadAndCycleTime()
+ {
+ var metrics = $("#chart").data("metrics");
+ var cycle = [$("#chart").data("label-cycle")];
+ var lead = [$("#chart").data("label-lead")];
+ var categories = [];
+
+ var types = {};
+ types[$("#chart").data("label-cycle")] = 'area';
+ types[$("#chart").data("label-lead")] = 'area-spline';
+
+ var colors = {};
+ colors[$("#chart").data("label-lead")] = '#afb42b';
+ colors[$("#chart").data("label-cycle")] = '#4e342e';
+
+ for (var i = 0; i < metrics.length; i++) {
+ cycle.push(parseInt(metrics[i].avg_cycle_time));
+ lead.push(parseInt(metrics[i].avg_lead_time));
+ categories.push(metrics[i].day);
+ }
+
+ c3.generate({
+ data: {
+ columns: [
+ lead,
+ cycle
+ ],
+ types: types,
+ colors: colors
+ },
+ axis: {
+ x: {
+ type: 'category',
+ categories: categories
+ },
+ y: {
+ tick: {
+ format: formatDuration
+ }
+ }
+ }
+ });
+ }
+
+ function formatDuration(d)
+ {
+ if (d >= 86400) {
+ return Math.round(d/86400) + "d";
+ }
+ else if (d >= 3600) {
+ return Math.round(d/3600) + "h";
+ }
+ else if (d >= 60) {
+ return Math.round(d/60) + "m";
+ }
+
+ return d + "s";
+ }
+
jQuery(document).ready(function() {
if (Kanboard.Exists("analytic-task-repartition")) {
@@ -182,6 +341,15 @@
else if (Kanboard.Exists("budget-chart")) {
drawBudget();
}
+ else if (Kanboard.Exists("analytic-avg-time-column")) {
+ drawAvgTimeColumn();
+ }
+ else if (Kanboard.Exists("analytic-task-time-column")) {
+ drawTaskTimeColumn();
+ }
+ else if (Kanboard.Exists("analytic-lead-cycle-time")) {
+ drawLeadAndCycleTime();
+ }
});
})();