Name
global.ProjectParentValidator
Description
Project Parent Validator for Project Diagnosis
Script
var ProjectParentValidator = Class.create();
ProjectParentValidator.prototype = {
initialize: function(projectData) {
this.projectData = projectData;
var plannedTaskRecalculationExclusion = new PlannedTaskRecalculationExclusion();
this.excludedTables = plannedTaskRecalculationExclusion.getExclusions();
this.invalidTasksWithEmptyParents = [];
this.tasksWithInvalidParents = [];
this.validateEmptyParents();
this.validateInvalidParents();
},
validateEmptyParents: function() {
var tasks = this.projectData.getTasks();
var taskSysIdes = tasks['sys_ids'];
var topTaskId = this.projectData.getTopTaskId();
var gr = new GlideRecord("planned_task");
gr.addQuery("top_task", topTaskId);
gr.addQuery("sys_id", "!=", topTaskId);
if(JSUtil.notNil(this.excludedTables))
gr.addQuery("sys_class_name", "NOT IN", this.excludedTables);
gr.addEncodedQuery("^parentISEMPTY");
gr.query();
PPMDebug.log("validateEmptyParents Tasks -> " + gr.getRowCount() + " -> " + gr.getEncodedQuery());
while(gr.next()) {
this.invalidTasksWithEmptyParents.push({
sys_id: gr.getValue("sys_id"),
number: gr.getValue("number"),
short_description: gr.getValue("short_description"),
parent: gr.getValue("parent"),
top_task: gr.getValue("top_task")
});
}
},
validateInvalidParents: function() {
var topTaskId = this.projectData.getTopTaskId();
var gr = new GlideRecord("planned_task");
gr.addQuery("top_task", topTaskId);
gr.addQuery("sys_id", "!=", topTaskId);
gr.addNotNullQuery('parent');
if(JSUtil.notNil(this.excludedTables))
gr.addQuery("sys_class_name", "NOT IN", this.excludedTables);
gr.query();
PPMDebug.log("validateInvalidParents Tasks -> " + gr.getRowCount() + " -> " + gr.getEncodedQuery());
var allTasksByTopTask = {};
var allParents = {};
while ( gr.next() ) {
allTasksByTopTask[gr.getValue('sys_id')] = '1';
allParents[gr.getValue('parent')] = '1';
}
for ( var parent in allParents ) {
if ( JSUtil.nil(allTasksByTopTask[parent]) && parent != topTaskId ) {
gr = new GlideRecord('planned_task');
gr.addQuery('top_task', topTaskId);
gr.addQuery('parent', parent);
gr.query();
while ( gr.next() ) {
var obj = {
sys_id: gr.getValue("sys_id"),
number: gr.getValue("number"),
short_description: gr.getValue("short_description"),
parent: gr.getDisplayValue("parent")
};
if ( JSUtil.nil(gr.getDisplayValue('parent')) )
obj.parent = gr.getValue('parent');
else
obj.parent = gr.getDisplayValue('parent');
this.tasksWithInvalidParents.push(obj);
}
}
}
},
getInvalidTasksWithEmptyParents: function() {
return this.invalidTasksWithEmptyParents;
},
getTasksWithInvalidParents: function() {
return this.tasksWithInvalidParents;
},
hasEmptyParents: function() {
if ( this.invalidTasksWithEmptyParents.length == 0 )
return false;
else
return true;
},
hasInvalidParents: function() {
if ( this.tasksWithInvalidParents.length == 0 )
return false;
else
return true;
},
type: 'ProjectParentValidator'
};
Sys ID
769f81cf9f31220088265bb0657fcf80