Name
global.ProjectRecalculateAJAX
Description
Ajax Helper for Project Recalculate
Script
var ProjectRecalculateAJAX = Class.create();
ProjectRecalculateAJAX.prototype = Object.extendsObject(AbstractAjaxProcessor, {
json: function () {
return (new JSON());
},
recalculate: function () {
var topTaskId = this.getParameter("sysparm_sys_id");
gs.eventQueue('pm_project.recalculate', "pm_project", topTaskId, topTaskId);
gs.info("recalculate topTaskId -> " + topTaskId);
var eventId = this.getEventId('pm_project.recalculate', "pm_project", topTaskId);
gs.info("eventId -> " + eventId);
return this.respond(eventId);
},
checkCycles: function() {
var topTaskId = this.getParameter('sysparm_sys_id');
var cycleDetector = new CycleDetector();
cycleDetector.processProject(topTaskId);
var result = {};
if ( cycleDetector.isCyclic() ) {
var tasks = cycleDetector.getCyclicTasks();
result = { status: true, tasks: tasks };
}
else {
result = { status: false };
}
return this.json().encode(result);
},
validateParents: function() {
var topTaskId = this.getParameter('sysparm_sys_id');
var projectData = new ProjectData(topTaskId);
var parentValidator = new ProjectParentValidator(projectData);
var tasksWithEmptyParents = [];
var tasksWithInvalidParents = [];
var status = '';
if ( parentValidator.hasEmptyParents() ) {
status += '_empty_parents';
tasksWithEmptyParents = parentValidator.getInvalidTasksWithEmptyParents();
}
if ( parentValidator.hasInvalidParents() ) {
status += '_invalid_parents';
tasksWithInvalidParents = parentValidator.getTasksWithInvalidParents();
}
if ( status == '' )
status = 'valid';
var result = {
status: status,
tasksWithEmptyParents: tasksWithEmptyParents,
tasksWithInvalidParents: tasksWithInvalidParents
};
return this.json().encode(result);
},
getEventId: function (name, table, topTaskId) {
var gr = this.getEvent(name, table, topTaskId);
if(JSUtil.notNil(gr))
return gr.getValue("sys_id");
},
getEvent: function (name, table, topTaskId) {
var gr = new GlideRecord("sysevent");
gr.addQuery("name", name);
gr.addQuery("table", table);
gr.addQuery("param1", topTaskId);
gr.orderByDesc("sys_created_on");
gr.query();
if(gr.next())
return gr;
},
respond: function (eventId) {
var result = {status: false,
message: "Unable to recalculate"
};
if(JSUtil.notNil(eventId)) {
result = { status: true,
event_id: eventId,
message: "Recalculation has been triggered"
};
}
gs.info(this.json().encode(result));
return this.json().encode(result);
},
checkIfSessionComplete: function () {
var topTaskSysId = this.getParameter("sysparm_sys_id");
var eventId = this.getParameter("sysparm_event_id");
gs.info("checkIfSessionComplete eventId -> " + eventId);
var gr = new GlideRecord("sysevent");
if(gr.get(eventId)) {
if(gr.getValue("state") == 'processed') {
gs.info("checkIfSessionComplete -> Event Processed!");
return true;
}
}
gs.info("checkIfSessionComplete -> Event NOT Processed!");
return false;
},
loadLatestTasks: function () {
var topTaskSysId = this.getParameter("sysparm_sys_id");
gs.info("latestTasks topTaskSysId -> " + topTaskSysId);
var tasks = [];
var topTask = new GlideRecord("planned_task");
if(topTask.get(topTaskSysId)) {
var startDate = topTask.getValue("start_date");
var gr = new GlideRecord("planned_task");
gr.addQuery("top_task", topTaskSysId);
gr.addQuery("start_date", startDate);
gr.query();
gs.info("Tasks query -> " + gr.getRowCount() + " - " + gr.getEncodedQuery() );
while(gr.next()) {
tasks.push({
sys_id: gr.getValue("sys_id"),
number: gr.getValue("number"),
short_description: gr.getValue("short_description"),
start_date: gr.getDisplayValue("start_date"),
end_date: gr.getDisplayValue("end_date"),
work_start: gr.getDisplayValue("work_start"),
work_end: gr.getDisplayValue("work_end"),
});
}
}
var result = { status: true,
tasks: tasks
};
gs.info("Tasks ->" + this.json().encode(result));
return this.json().encode(result);
},
checkRedunantRelations: function() {
var topTaskId = this.getParameter('sysparm_sys_id');
var redundantRelationChecker = new RedundantRelationsChecker();
var redudantRelations = redundantRelationChecker.checkRelations(topTaskId);
var result = {};
if ( JSUtil.notNil(redudantRelations) && redudantRelations.length > 0) {
result = { status: true, relations: redudantRelations };
}
else {
result = { status: false };
}
return this.json().encode(result);
},
type: 'ProjectRecalculateAJAX'
});
Sys ID
ce37d6939f75220088265bb0657fcff1