Name

global.PercentCompleteHelper

Description

No description available

Script

// PercentComplete Helper
var PercentCompleteHelper = Class.create();
PercentCompleteHelper.prototype = {
  PERCENT_COMPLETE_STACK: "percent_complete_stack_",

  initialize: function() {
      this.json = new JSON();
  },

  getStack: function(sysId) {
      if(JSUtil.notNil(sysId)) {
          var percentCompleteStack = gs.getSession().getProperty(this.PERCENT_COMPLETE_STACK + sysId);
          if(JSUtil.notNil(percentCompleteStack)) {
              return this.json.decode(percentCompleteStack);   
          }
      }
  },
  
  //OOB unused method
  putStack: function(sysId, percentCompleteStack) {
      var percentCompleteStackString = this.json.encode(percentCompleteStack);
      gs.getSession().putProperty(this.PERCENT_COMPLETE_STACK + sysId, percentCompleteStackString);
  },

  //OOB unused method
  clearStack: function(gr) {
      var topTaskId = gr.getValue("top_task");
      gs.print("PercentCompleteHelper.clearStack -> " + topTaskId);
      if(JSUtil.notNil(topTaskId)) {
          var percentCompleteStack = this.getStack(topTaskId);
          if(JSUtil.notNil(percentCompleteStack)) {
              gs.getSession().clearProperty(this.PERCENT_COMPLETE_STACK + topTaskId);
          } // else do nothing
      }
  },

  //OOB unused method
  process: function(gr) {
      var arrayUtil = new ArrayUtil();
      var sysId = gr.getValue("sys_id");
      var topTaskId = gr.getValue("top_task");
      
      var percentCompleteStack;
      if( JSUtil.notNil(topTaskId) ) {
          percentCompleteStack = this.getStack(topTaskId);
          // gs.print("PercentCompleteHelper - percentCompleteStack  -> " + this.json().encode(percentCompleteStack));
          if(JSUtil.nil(percentCompleteStack) || 
              JSUtil.nil(percentCompleteStack.level) || JSUtil.nil(percentCompleteStack.sys_id)){
              percentCompleteStack = {};
              var topTask = new GlideRecord("planned_task");
              topTask.addQuery("top_task", topTaskId);
              topTask.orderByDesc("level");
              topTask.chooseWindow(0, 1, false);
              topTask.query();
              if(topTask.next()) {
                  percentCompleteStack.level = topTask.getValue("level");
                  percentCompleteStack.sys_id = topTask.getValue("sys_id");
              }
              gs.print("PercentCompleteHelper - Saving percentCompleteStack -> " + this.json.encode(percentCompleteStack));
              this.putStack(topTaskId, percentCompleteStack);
          }
      } // else do nothing 
  },

  canRollup: function(gr) {
      var arrayUtil = new ArrayUtil();
      var sysId = gr.getValue("sys_id");
      var topTaskId = gr.getValue("top_task");
      //gs.print("canRollup: sysId: " + sysId + " -- topTaskId: " + topTaskId);
      var percentCompleteStack;
      if( JSUtil.notNil(topTaskId) ) {
          percentCompleteStack = this.getStack(topTaskId);
          if( JSUtil.notNil(percentCompleteStack) ) {
              gs.print("Igonoring Percent Complete -> " + this.json.encode(percentCompleteStack));
              return false;
          }
      }
      gs.print("*** Unable to fetch the percentCompleteStack!! --> Can Rollup -> true");
      return true;
  },

  //OOB unused method
  rollup: function (gr) {
      gs.print("PercentCompleteHelper.rollup -> " + gr.getValue("sys_id"));
      var sysId = gr.getValue("sys_id");
      var topTaskId = gr.getValue("top_task");
      if( JSUtil.notNil(topTaskId) ) {
          var percentCompleteStack = this.getStack(topTaskId);
          if( JSUtil.notNil(percentCompleteStack) && JSUtil.notNil(percentCompleteStack.sys_id) ) {
              gs.print("PercentCompleteHelper.sys_id -> " + percentCompleteStack.sys_id);
              var rollupAPI = new RollupAPI(); 
              var lowestTask = new GlideRecord("planned_task");
              if(lowestTask.get(percentCompleteStack.sys_id)) {
                  rollupAPI.rollup(lowestTask, 'percent_complete', true);
              }
          }
      }
  },

  type: 'PercentCompleteHelper'
};

Sys ID

1be5292d9fe03200598a5bb0657fcf8a

Offical Documentation

Official Docs: