Name
global.PlannedTaskDatesCalculator
Description
This Dates calculator are used to planned task in the Exclusion list
Script
var PlannedTaskDatesCalculator = Class.create();
PlannedTaskDatesCalculator.prototype = {
initialize: function() {
},
process: function (_current) {
PPMDebug.log("Into PlannedTaskDatesCalculator.process -> " + _current.getValue("sys_id"));
if(JSUtil.notNil(_current)) {
this.calculatePlanned(_current);
this.calculateActuals(_current);
}
},
calculatePlanned: function (_current) {
PPMDebug.log("Into PlannedTaskDatesCalculator.calculatePlanned -> " + _current.getValue("sys_id"));
var startDateChanges = _current.start_date.changes();
var endDateChanges = _current.end_date.changes();
var durationChanges = _current.duration.changes();
PPMDebug.log("startDateChanges -> " + startDateChanges + " | endDateChanges -> " + endDateChanges
+ " | durationChanges -> " + durationChanges);
// For the initial task creates, if there are duration changes, Take duration precedence over end_date
var defaultDurationValue = this.getGlideDuration(_current.getElement('duration').getED().getDefault(), true);
var currentDurationValue = this.getGlideDuration(_current.getValue('duration'));
PPMDebug.log("defaultDurationValue -> " + defaultDurationValue + " | currentDurationValue -> " + defaultDurationValue);
// Ignore if javascript - incase?
if(_current.operation() == 'insert' && currentDurationValue.compareTo(defaultDurationValue) == 0) {
var duration = this.calculateDuration(_current.getValue("start_date"), _current.getValue("end_date"));
_current.setValue("duration", duration);
} else if(startDateChanges && endDateChanges && durationChanges) {
var endDate = this.calculateEndDate(_current.getValue("start_date"), _current.getValue("duration"));
_current.setValue("end_date", endDate);
} else if((startDateChanges && endDateChanges) || endDateChanges) {
var duration = this.calculateDuration(_current.getValue("start_date"), _current.getValue("end_date"));
_current.setValue("duration", duration);
} else if (durationChanges || startDateChanges) {
var endDate = this.calculateEndDate(_current.getValue("start_date"), _current.getValue("duration"));
_current.setValue("end_date", endDate);
}
},
calculateActuals: function (_current) {
PPMDebug.log("Into PlannedTaskDatesCalculator.calculateActuals -> " + _current.getValue("sys_id"));
var workStartChanges = _current.work_start.changes();
var workEndChanges = _current.work_end.changes();
var workDurationChanges = _current.work_duration.changes();
PPMDebug.log("workStartChanges -> " + workStartChanges + " | workEndChanges -> " + workEndChanges
+ " | workDurationChanges -> " + workDurationChanges);
if((workStartChanges && workEndChanges) || workEndChanges) {
var duration = this.calculateDuration(_current.getValue("work_start"), _current.getValue("work_end"));
_current.setValue("work_duration", duration);
} else if (workDurationChanges || workStartChanges) {
var endDate = this.calculateEndDate(_current.getValue("work_start"), _current.getValue("work_duration"));
_current.setValue("work_end", endDate);
}
},
calculateDuration: function (startDate, endDate) {
PPMDebug.log("Into PlannedTaskDatesCalculator.calculateDuration -> " + startDate + " | " + endDate);
if(JSUtil.notNil(startDate) && JSUtil.notNil(endDate)) {
var startDateTime = new GlideDateTime(startDate);
var endDateTime = new GlideDateTime(endDate);
var duration = GlideDateTime.subtract(startDateTime, endDateTime);
PPMDebug.log("Duration -> " + duration);
return duration.getValue();
}
},
calculateEndDate: function (startDate, duration) {
PPMDebug.log("Into PlannedTaskDatesCalculator.calculateEndDate -> " + startDate + " | " + duration);
if(JSUtil.notNil(startDate)) {
var endDateTime = new GlideDateTime(startDate);
var glideDuration = new GlideDuration(0);
if(JSUtil.notNil(duration))
glideDuration.setValue(duration);
endDateTime.add(glideDuration.getNumericValue());
PPMDebug.log("endDateTime -> " + endDateTime);
return endDateTime.getValue();
}
},
getGlideDuration: function (value, display) {
PPMDebug.log("Into PlannedTaskDatesCalculator.getGlideDuration -> " + value);
var glideDuration = new GlideDuration(0);
if(JSUtil.notNil(value)) {
if(display) {
glideDuration.setDisplayValue(value);
} else {
glideDuration.setValue(value);
}
}
PPMDebug.log("Into PlannedTaskDatesCalculator.getGlideDuration - Return -> " + glideDuration);
return glideDuration;
},
type: 'PlannedTaskDatesCalculator'
};
Sys ID
a7e739e59f221300730e5bb0657fcf8a