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

Offical Documentation

Official Docs: