Name

global.ScrumUtils

Description

Provides a range of services which can be used by the Scrum application.

Script

var ScrumUtils = Class.create();

ScrumUtils.getSprints = function () {
  var refQual = "sys_class_nameINrm_sprint";
  if (current.release) {
  	refQual += "^parent=";
  	refQual += current.getValue('release');
  }
  return refQual;
};

ScrumUtils.getReleaseDotPoints = function (strReleaseSysId) {
  var cancelledStates = new ScrumStatesUtil('rm_story').getCancelledStates();
  var recRmStory = new GlideAggregate("rm_story");
  
  recRmStory.addQuery("release", strReleaseSysId);
  recRmStory.addQuery("state", "NOT IN", cancelledStates).addOrCondition("state", "NULL");
  recRmStory.addAggregate("SUM", "story_points");
  recRmStory.setGroup(false);
  recRmStory.query ();
  
  return recRmStory.next() ? recRmStory.getAggregate("SUM", "story_points") : 0;
};

ScrumUtils.getSprintDotActualPoints = function (strSprintSysId) {
  var completedStates = new ScrumStatesUtil('rm_story').getCompletedStates();
  var recRmStory = new GlideAggregate("rm_story");
  
  recRmStory.addQuery("sprint", strSprintSysId);
  recRmStory.addQuery("state", "IN", completedStates);
  recRmStory.addAggregate("SUM", "story_points");
  recRmStory.setGroup(false);
  recRmStory.query ();
  
  return recRmStory.next() ? recRmStory.getAggregate("SUM", "story_points") : 0;
};

ScrumUtils.getSprintDotStoryPoints = function (strSprintSysId) {
  var cancelledStates = new ScrumStatesUtil('rm_story').getCancelledStates();
  var recRmStory = new GlideAggregate("rm_story");
  
  recRmStory.addQuery("sprint", strSprintSysId);
  recRmStory.addQuery("state", "NOT IN", cancelledStates).addOrCondition("state", "NULL");
  recRmStory.addAggregate("SUM", "story_points");
  recRmStory.setGroup(false);
  recRmStory.query();
  
  return recRmStory.next() ? recRmStory.getAggregate("SUM", "story_points") : 0;
};

ScrumUtils.handleSprintChanged = function (recOldSprint, recNewSprint) {
  if (recOldSprint && recOldSprint.release) {
  	var recOldRelease = new GlideRecord ("rm_release_scrum");
  	if (recOldRelease.get (recOldSprint.getValue('release'))) {
  		recOldRelease.points = ScrumUtils.getReleaseDotPoints (recOldRelease.sys_id);
  		recOldRelease.update ();
  	}
  }
  
  if (recNewSprint && recNewSprint.release) {
  	var recNewRelease = new GlideRecord ("rm_release_scrum");
  	if (recNewRelease.get (recNewSprint.getValue('release'))) {
  		recNewRelease.points = ScrumUtils.getReleaseDotPoints (recNewRelease.sys_id);
  		recNewRelease.update ();
  	}
  }
};

ScrumUtils.handleStoryChanged = function (recOldStory, recNewStory) {
  
  var recOldSprint;
  if (recOldStory && recOldStory.sprint) {
  	recOldSprint = new GlideRecord ("rm_sprint");
  	if (recOldSprint.get(recOldStory.getValue('sprint'))) {
  		recOldSprint.story_points = ScrumUtils.getSprintDotStoryPoints (recOldSprint.sys_id);
  		recOldSprint.actual_points = ScrumUtils.getSprintDotActualPoints (recOldSprint.sys_id);
  		recOldSprint.update ();
  	}
  }
  
  var recNewSprint;
  if (recNewStory && recNewStory.sprint) {
  	recNewSprint = new GlideRecord ("rm_sprint");
  	if (recNewSprint.get(recNewStory.getValue('sprint'))) {
  		recNewSprint.story_points = ScrumUtils.getSprintDotStoryPoints (recNewSprint.sys_id);
  		recNewSprint.actual_points = ScrumUtils.getSprintDotActualPoints (recNewSprint.sys_id);
  		recNewSprint.update ();
  	}
  }
  
  if (recOldStory && recOldStory.release) {
  	var recOldRelease = new GlideRecord ("rm_release_scrum");
  	if (recOldRelease.get(recOldStory.getValue('release'))) {
  		recOldRelease.points = ScrumUtils.getReleaseDotPoints (recOldRelease.sys_id);
  		recOldRelease.update ();
  	}
  }
  
  if (recNewStory && recNewStory.release) {
  	var recNewRelease = new GlideRecord ("rm_release_scrum");
  	if (recNewRelease.get(recNewStory.getValue('release'))) {
  		recNewRelease.points = ScrumUtils.getReleaseDotPoints (recNewRelease.sys_id);
  		recNewRelease.update ();
  	}
  }
};

Sys ID

adc2777eef330000a7450fa3f8225625

Offical Documentation

Official Docs: