Name
global.ReleaseBurndown
Description
This utility includes is used for release burndown json.
Script
var ReleaseBurndown = Class.create();
ReleaseBurndown.prototype = {
initialize: function ( burndownRequest ) {
this.sysId = burndownRequest['sysId'];
this.burndownMetric = new BurndownMetric(burndownRequest);
this.gsLog = new GSLog(this.burndownMetric.SCRUM_PP_BURNDOWN_LOG, this.type);
this.gsLog.setLevel("debug");
this.gsLog.logDebug('ReleaseBurndown sysId: ' + this.sysId);
},
getBurndownMetric: function() {
return this.burndownMetric;
},
canProcessBurndown: function() {
if (this.burndownMetric.hasMetricData() && this.burndownMetric.hasValidDates()) {
return true;
}
return false;
},
generate: function() {
var actualData = this.actual();
var idealData = this.burndownMetric.getIdeal();
var dailyData = this.burndownMetric.getDailyPoints();
var sprintData = this.sprintDetails();
var jsonOutput = {actual: actualData,
ideal: idealData,
total: dailyData,
sprint: sprintData,
title: this.burndownMetric.getTitle()
};
return jsonOutput;
},
actual: function() {
var data = [];
var dailyTotalsMap = this.burndownMetric.getDailyTotalsMap();
var storyMetrics = this.burndownMetric.getStoryMetrics();
var startDate = new GlideDateTime(this.burndownMetric.getStartDate()).getLocalDate();
var endDate = new GlideDateTime(this.burndownMetric.getEndDate()).getLocalDate();
var today = new GlideDate().getLocalDate();
var points = 0;
/*startDate.addDays(-1);
data.push({
key: String(new GlideDateTime(startDate).getDate()),
value: dailyTotalsMap.startingValue
});
this.gsLog.logDebug('actual { key:' + String(new GlideDateTime(startDate).getDate()) + ' ,value: ' + dailyTotalsMap.startingValue + ' },');
startDate.addDays(1);*/
while (startDate.compareTo(endDate) <= 0 && startDate.compareTo(today) <= 0) {
points += storyMetrics[startDate] ? storyMetrics[startDate] : 0;
data.push({
// key: String(new GlideDateTime(startDate).getDate()),
key: String(startDate),
value: Math.max(dailyTotalsMap[startDate].dailyPoints + points, 0)
});
/*this.gsLog.logDebug('actual { key:' + String(new GlideDateTime(startDate).getDate()) + ' ,value: ' + Math.max(dailyTotalsMap[startDate].dailyPoints + points, 0) + ' },');*/
startDate.addDays(1);
}
return data;
},
sprintDetails: function() {
var sprintCount = 0;
var sprintData = [];
var gr = new GlideRecord('rm_sprint');
gr.addQuery('release', this.sysId);
gr.orderBy('start_date');
gr.query();
while ( gr.next() ) {
//fetch the mid day
sprintCount++;
var startDate = new GlideDateTime(gr.getValue('start_date'));
var endDate = new GlideDateTime(gr.getValue('end_date'));
var diff = GlideDateTime.subtract(startDate, endDate);
diff = diff.getDayOfMonthLocalTime();
var midDay = new GlideDateTime(startDate);
midDay.addDaysLocalTime(diff/2);
var tooltip = (startDate.getLocalDate().getDisplayValue()) +
" - " + (endDate.getLocalDate().getDisplayValue());
sprintData.push({
key: String(midDay.getDate()),
sprint: gr.getValue('short_description'),
sysId: gr.getValue('sys_id'),
state: gr.getDisplayValue('state'),
startDate: String(startDate.getLocalDate()),
endDate: String(endDate.getLocalDate()),
tooltip: tooltip
});
/*this.gsLog.logDebug('sprints { key:' + String(midDay.getDate()) + ' ,sprint: ' + gr.getValue('short_description') +
' ,sysId: ' + gr.getValue('sys_id') + ' ,startDate: ' + String(startDate.getDate()) +
' ,endDate: ' + String(endDate.getDate()) + ' },');*/
}
return sprintData;
},
type: 'ReleaseBurndown'
};
Sys ID
1118e0629f022100598a5bb0657fcffe