Name

global.ScrumAjaxDragUpdateHandler

Description

ScrumAjaxDragUpdateHandler

Script

var ScrumAjaxDragUpdateHandler = Class.create();

ScrumAjaxDragUpdateHandler.prototype = Object.extendsObject(AbstractAjaxListDragChecker, {
 draft_state: -6,
 ready_state: 1,
 
 getSprintPercentage: function(){
    var sprintID = this.getParameter("sysparm_sprint_id");
    
    var percentage = "-1";
    var storyPoints;
    var teamPoints;
    var gr = new GlideRecordSecure("rm_sprint");
    gr.addQuery("sys_id", sprintID);
    gr.query();
    if (gr.next()) {
       teamPoints = gr["team_points"];
       storyPoints = gr["story_points"];
       if (teamPoints)
           percentage = (100 / teamPoints) * storyPoints;
    }
    var item = this.newItem("precentage_item");
    item.setAttribute("percentage", percentage);
    item.setAttribute("story_points", storyPoints);
    item.setAttribute("team_points", teamPoints);
 },   

 _decode: function(str){
    if (str != null && str.startsWith("__ENC__")){
       str = GlideStringUtil.base64Decode(str.substring("__ENC__".length));
       str = str.substring(0, 32);
    }
    return str;
 },

 updateItems: function() { 
    var recordClass = this.getParameter('sysparm_record_class');
    var action = this.getParameter('sysparm_action');
    var idArray = this.getParameter('sysparm_drag_item_ids').split(",");
    for (var i = 0; i < idArray.length; i++) {
       var gr = new GlideRecordSecure(recordClass);
  	 if(!gr.isValid())
  		 return;
       gr.addQuery("sys_id", this._decode(idArray[i]));
       gr.query();
       if (gr.next())
          if (action == "set_progress_details") {
             if (recordClass == "rm_story"){
                gr.story_points = this.getParameter('sysparm_value');
                gr.classification = this.getParameter('sysparm_classification');
                if (this.getParameter('sysparm_acceptance_criteria') != "")
                   gr.acceptance_criteria = this.getParameter('sysparm_acceptance_criteria');
             }
             if (recordClass == "rm_scrum_task"){
                if (this.getParameter('sysparm_value'))
                   gr.hours = this.getParameter('sysparm_value');
                gr.planned_hours = this.getParameter('sysparm_value_planned');
                gr.remaining_hours = this.getParameter('sysparm_value_remaining');
                gr.test_result = this.getParameter('sysparm_test_result');
             }
             if (this.getParameter('sysparm_assigned_to') == "")
                gr.setValue("assigned_to", "");
             else
                gr.assigned_to = this.getParameter('sysparm_assigned_to');
             gr.short_description = this.getParameter('sysparm_short_description');
             gr.state = this.getParameter('sysparm_state');
             gr.blocked = this.getParameter('sysparm_blocked');
             gr.blocked_reason = this.getParameter('sysparm_blocked_reason');
             gr.type = this.getParameter('sysparm_type');
             gr.update();
          } else
             this.transferItem(gr, action, this.getParameter('sysparm_parent_id'));
    }
 },

 transferItem: function(gr, action, parentID){
    var product;
    var release;
    var sprint;
    if (action == "clear_and_set_product"){
       product = parentID;
       gr.product = product;
       gr.release = "";
       gr.sprint = "";
       gr.parent = "";
       gr.update();
    }else if (action == "set_product"){
       product = parentID;
       if (gr.product == product)
          return;
       gr.product = product;
       gr.release = "";
       gr.sprint = "";
       gr.parent = "";
       gr.update();
    } else if (action == "set_release"){
       release = parentID;
       if (gr.release == release)
          return;
       gr.release = release;
       if (gr.state == this.draft_state)
          gr.state = this.ready_state;
       gr.sprint = "";
       gr.parent = "";
       gr.update();
    } else if (action == "clear_release"){
       gr.release = "";
       gr.sprint = "";
       gr.parent = "";
       gr.update();
    } else if (action == "set_sprint_and_release"){
       sprint = parentID;
       if (gr.sprint == sprint)
          return;
       if (!this.sprintRelease){
          this.sprintRelease = "";
          var sp = new GlideRecordSecure("rm_sprint");
          sp.addQuery("sys_id", sprint);
          sp.query();
          if (sp.next())
             this.sprintRelease = sp.release;
       }
       gr.release = this.sprintRelease;
       gr.sprint = sprint;
       gr.parent = sprint;
       gr.update();
    } else if (action == "set_sprint"){
       sprint = parentID;
       if (gr.sprint == sprint)
          return;
       gr.sprint = sprint;
       gr.parent = sprint;
       gr.update();
    } else if (action == "clear_sprint"){
       gr.sprint = "";
       gr.parent = "";
       gr.update();
    }
 }, 

 getAJAXReleaseRecordsScriptBlock: function(){
    var script = this.getReleaseRecordsScriptBlock(this.getParameter("sysparm_release_id"));
    var item = this.newItem("script_block");
    item.setAttribute("text", script);
 },

 getReleaseRecordsScriptBlock: function(){
    var releases = {};
    var rl = new GlideRecordSecure("rm_release_scrum");
    rl.addActiveQuery();
    rl.orderBy("start_date");
    rl.query();        
    while (rl.next()){
       releases[rl.sys_id] = { 'sys_id'           : rl.getValue('sys_id'),
                               'short_description': escape(rl.getValue('short_description')),
                               'start_date'       : rl.getValue('start_date')
                             };
       var m2m = new GlideRecordSecure("m2m_product_release");
       m2m.addQuery("release", rl.sys_id);
       m2m.query();
       var productsMap = {};
       while(m2m.next()){
          var pr = new GlideRecordSecure("cmdb_model");
          pr.addQuery("sys_id", m2m.model.sys_id );
          pr.query();
          if (pr.next()){
             productsMap[pr.sys_id] = { 'sys_id'        : pr.getValue('sys_id'),
                                        'name'          : escape(pr.getValue('name')),
                                        'release_sys_id': rl.getValue('sys_id')
                                      };
          }
       }
       releases[rl.sys_id]['productsMap'] = productsMap;
       var sp = new GlideRecordSecure("rm_sprint");
       sp.addActiveQuery();
       sp.addQuery("release", rl.sys_id);
       sp.orderBy("short_description");
       sp.query();
       var sprints = {};
       while(sp.next()){
          sprints[sp.sys_id] = {  'sys_id'              : sp.getValue('sys_id'),
                                  'short_description'   : escape(sp.getValue('short_description')),
                                  'release_sys_id'      : rl.getValue('sys_id'),
                                  'start_date'          : sp.getValue('start_date')
                               };
       }
       releases[rl.sys_id]['sprints'] = sprints;
    }
    var jsonParser = new JSON();
    return jsonParser.encode(releases);
 }
});

Sys ID

d6158010ff111000dadaefff0efe1eeb

Offical Documentation

Official Docs: