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