Skip to content

Commit 8c31a15

Browse files
committed
Fixed wip
1 parent 0e3801a commit 8c31a15

File tree

4 files changed

+120
-5
lines changed

4 files changed

+120
-5
lines changed

src/public/javascript/dashboard.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const Dashboard = ((window, document, $, Promise, toastr, Chart, randomColor, Co
22
/* Charts */
33
let cfdChart;
44
let wipChart;
5+
let leadTimeChart;
56

67
/* Elements */
78
let reportForm;
@@ -294,6 +295,8 @@ const Dashboard = ((window, document, $, Promise, toastr, Chart, randomColor, Co
294295
*
295296
*/
296297
const loadLeadTime = () => {
298+
leadTimeChart.data = ReportService.getLeadTimeData(report, getCurrentProject(), columns, fromDate.val(), toDate.val());
299+
leadTimeChart.update();
297300
};
298301

299302
/**
@@ -409,6 +412,38 @@ const Dashboard = ((window, document, $, Promise, toastr, Chart, randomColor, Co
409412
},
410413
});
411414

415+
leadTimeChart = new Chart(leadTimeCanvas[0], {
416+
type: 'line',
417+
options: {
418+
responsive: true,
419+
legend: {
420+
labels: {
421+
usePointStyle: false,
422+
},
423+
pointStyle: 'rectRot',
424+
},
425+
elements: {
426+
line: {
427+
tension: 0,
428+
},
429+
},
430+
scales: {
431+
xAxes: [{
432+
scaleLabel: {
433+
display: true,
434+
labelString: 'Weeks',
435+
},
436+
}],
437+
yAxes: [{
438+
scaleLabel: {
439+
display: true,
440+
labelString: 'Issues',
441+
},
442+
}],
443+
},
444+
},
445+
});
446+
412447
wipChart = new Chart(wipCanvas[0], {
413448
type: 'bar',
414449
options: {

src/public/javascript/services/report.js

Lines changed: 82 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const ReportService = (($, _, App) => ({
3131
move.month = date.month() + 1;
3232
move.year = date.year();
3333
move.dayOfYear = date.dayOfYear();
34+
move.weekOfYear = date.week();
3435
move.millis = date.valueOf();
3536
move.formatedDate = date.format('DD/MM/YYYY');
3637

@@ -119,7 +120,7 @@ const ReportService = (($, _, App) => ({
119120
return {
120121
data,
121122
order: column.order,
122-
visible: true,
123+
visible: column.visible,
123124
label: column.name,
124125
borderColor: column.color,
125126
backgroundColor: Color(column.color).alpha(0.3).rgbString(),
@@ -136,6 +137,85 @@ const ReportService = (($, _, App) => ({
136137
};
137138
},
138139

140+
/**
141+
* @param data
142+
* @param project
143+
* @param columns
144+
* @return {{labels, datasets}}
145+
*/
146+
getLeadTimeData: (data, project, columns) => {
147+
const summaries = ReportService._normalizeData(data, project, columns);
148+
149+
const labels = _(summaries)
150+
.map('board_moves')
151+
.flatten()
152+
.sortBy('millis')
153+
.map('weekOfYear')
154+
.uniq()
155+
.value();
156+
157+
const weeks = _(summaries)
158+
.map((summ) => {
159+
summ.board_moves.forEach((move) => {
160+
move.issue = summ.issue.number;
161+
});
162+
return summ.board_moves;
163+
})
164+
.flatten()
165+
.filter(move => move.column.visible)
166+
.groupBy('issue')
167+
.filter((issue) => {
168+
const hasFirst = issue.find((move) => move.column.order === _(columns).filter('visible').filter(move => move.order > 0).minBy('order').order);
169+
const hasLast = issue.find((move) => move.column.order === _(columns).filter('visible').filter(move => move.order > 0).maxBy('order').order);
170+
return hasFirst && hasLast;
171+
})
172+
.map((issue) => {
173+
const first = issue.find((move) => move.column.order === _(columns).filter('visible').filter(move => move.order > 0).minBy('order').order);
174+
const last = issue.find((move) => move.column.order === _(columns).filter('visible').filter(move => move.order > 0).maxBy('order').order);
175+
const leadTime = last.dayOfYear - first.dayOfYear;
176+
177+
return {
178+
week: last.weekOfYear,
179+
leadTime,
180+
};
181+
})
182+
.groupBy('week')
183+
.value();
184+
185+
const datasets = labels.map((week, index) => {
186+
let totalWeeksLeadTime = 0;
187+
let totalIssuesFromWeeks = 0;
188+
189+
const data = [];
190+
191+
for (let i = 0; i <= index; i += 1) {
192+
const weekNumber = labels[i];
193+
194+
(weeks[weekNumber] || []).forEach((issue) => {
195+
totalIssuesFromWeeks += 1;
196+
totalWeeksLeadTime += issue.leadTime;
197+
});
198+
199+
const leadTime = (totalWeeksLeadTime / totalIssuesFromWeeks) || 0;
200+
data.push(leadTime.toFixed(2));
201+
}
202+
203+
return {
204+
data,
205+
label: week,
206+
fill: false,
207+
borderColor: randomColor(),
208+
pointStyle: 'crossRot',
209+
pointRadius: 10,
210+
};
211+
});
212+
213+
return {
214+
labels,
215+
datasets,
216+
};
217+
},
218+
139219
/**
140220
* @param data
141221
* @param project
@@ -190,7 +270,7 @@ const ReportService = (($, _, App) => ({
190270
return {
191271
data,
192272
order: column.order,
193-
visible: true,
273+
visible: column.visible,
194274
label: column.name,
195275
borderColor: column.color,
196276
backgroundColor: column.color,

src/services/v1/feed.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ const logger = require('../../config/logger');
1414

1515
const _saveOrUpdate = Schema => (oldObj, newObj) => {
1616
debug('saving data for entity', Schema.modelName);
17-
if (oldObj) return Object.assign(oldObj, newObj).save();
18-
return new Schema(newObj).save();
17+
if (oldObj) return new Schema(Object.assign(oldObj, newObj), { versionKey: false }).save();
18+
return new Schema(newObj, { versionKey: false }).save();
1919
};
2020

2121
const _validateDelivery = Schema => async (delivery) => {

src/views/index.pug

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ block content
2727
.card-body
2828
canvas#cfd
2929

30-
.card(style='display: none;')
30+
.card
3131
.card-header#heading_lead_time(role='tab')
3232
h5.mb-0
3333
a#lead_time_card(data-toggle='collapse' href='#collapseLeadTime' aria-expanded='true' aria-controls='collapseLeadTime') Lead Time

0 commit comments

Comments
 (0)