Name
global.ProgramRecalculationConstraints
Description
No description available
Script
var ProgramRecalculationConstraints = Class.create();
ProgramRecalculationConstraints.prototype = Object.extendsObject(BaseRecalculationConstraints, {
projects: function(programRecord) {
if(!gs.tableExists("pm_project"))
return null;
var gr = new GlideRecord('pm_project');
gr.addQuery('top_program', programRecord.getValue('sys_id'));
gr.query();
return gr;
},
demands: function(programRecord) {
if(!gs.tableExists("dmn_demand"))
return null;
var gr = new GlideRecord('dmn_demand');
gr.addQuery('primary_program', programRecord.getValue('sys_id'));
gr.query();
return gr;
},
programTasks: function(programRecord, current) {
if(!gs.tableExists("pm_program_task"))
return null;
var gr = new GlideRecord('pm_program_task');
gr.addQuery('parent', programRecord.getValue('sys_id'));
if (current)
gr.addQuery('sys_id','!=',current.sys_id);
gr.query();
return gr;
},
hasProjectsDemands: function(programRecord) {
var projectsGr = this.projects(programRecord);
if( projectsGr !== null && projectsGr.getRowCount() > 0) return true;
var demandsGr = this.demands(programRecord);
return demandsGr !== null && demandsGr.getRowCount() > 0;
},
hasProgramTasks:function(programRecord) {
var programTasksGr = this.programTasks(programRecord);
return programTasksGr !== null && programTasksGr.getRowCount() > 0;
},
leastStartDate: function(gr, column, leastStartDate) {
var leastStart = leastStartDate;
if (gr === null)
return leastStart;
while(gr.next()) {
var startDate = gr.getValue(column);
if(JSUtil.notNil(startDate)) {
var gdt = new GlideDateTime(startDate);
if(gdt.compareTo(leastStartDate) < 0) {
leastStart = gdt;
}
}
}
return leastStart;
},
maxDate: function(gr, column, baseDate) {
var maxDate = baseDate;
if (gr === null)
return maxDate;
while ( gr.next() ) {
var date = gr.getValue(column);
if(JSUtil.notNil(date)) {
var gdt = new GlideDateTime(date);
if(gdt.compareTo(maxDate) > 0)
maxDate = gdt;
}
}
return maxDate;
},
getLeastStartDate: function(programRecord) {
var leastStartDate = new GlideDateTime(programRecord.getValue('start_date'));
var projectsGr = this.projects(programRecord);
leastStartDate = this.leastStartDate(projectsGr, 'start_date', leastStartDate);
var demandsGr = this.demands(programRecord);
leastStartDate = this.leastStartDate(demandsGr, 'start_date', leastStartDate);
var programTasksGr = this.programTasks(programRecord);
leastStartDate = this.leastStartDate(programTasksGr, 'start_date', leastStartDate);
return leastStartDate;
},
getLeastEndDate: function(programRecord, current) {
var leastEndDate = new GlideDateTime(programRecord.getValue('end_date'));
var projectsGr = this.projects(programRecord);
leastEndDate = this.maxDate(projectsGr, 'end_date', leastEndDate);
var demandsGr = this.demands(programRecord);
leastEndDate = this.maxDate(demandsGr, 'requested_by', leastEndDate);
var programTasksGr = this.programTasks(programRecord, current);
leastEndDate = this.maxDate(programTasksGr, 'end_date', leastEndDate);
return leastEndDate;
},
getConstraints: function(programRecord, current) {
//gs.info('Into ProgramRecalculationConstraints '+this.hasProjectsDemands(programRecord));
var recalculationConstraint = new SNC.RecalculationConstraint();
if(this.hasProjectsDemands(programRecord) || this.hasProgramTasks(programRecord)) {
var leastStartDate = this.getLeastStartDate(programRecord);
recalculationConstraint.addNodeMaxStartDateConstraint(programRecord.getValue('sys_id'), leastStartDate.getValue(), 'soft');
//gs.info('Program has projects and demands, Attaching the Least Start Date to the constraint: ' + leastStartDate);
var leastEndDate = this.getLeastEndDate(programRecord, current);
recalculationConstraint.addNodeLeastEndDateConstraint(programRecord.getValue('sys_id'), leastEndDate.getValue(), 'soft');
}
return recalculationConstraint;
},
type: 'ProgramRecalculationConstraints'
});
Sys ID
cc8e27719f301200598a5bb0657fcf63