Name
global.AjaxPlannedTaskDateUtil
Description
No description available
Script
var AjaxPlannedTaskDateUtil = Class.create();
AjaxPlannedTaskDateUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getEndDate: function() {
var sysparmStartDate = this.getParameter('sysparm_start_date');
var sysparmDuration = this.getParameter('sysparm_duration');
if (!this.isValidDate(sysparmStartDate)) {
this.sendResponse('error', 'start_date');
return;
}
if (!this.isValidDuration(sysparmDuration)) {
this.sendResponse('error', 'duration');
return;
}
var end_date = this._calculateEndDate(sysparmStartDate, sysparmDuration);
var result = this.newItem('result');
result.setAttribute('status', 'success');
result.setAttribute('answer', end_date);
},
isValidPositiveDuration: function(duration) {
return duration.indexOf('-') < 0;
},
recalculate: function(current) {
if (!current.isNewRecord() && current.end_date.changes())
this._setMaxEndDate(current);
else
this.updateEndDate(current);
var duration = new GlideDuration(current.end_date.dateNumericValue() - current.start_date.dateNumericValue());
current.setValue('duration', duration.getValue());
},
updateEndDate: function(current) {
var startDate = current.getValue('start_date');
var endDate = new GlideDateTime();
endDate.setValue(startDate);
endDate.addSeconds(current.duration.dateNumericValue() / 1000);
current.setValue('end_date', endDate.getValue());
this._setMaxEndDate(current);
},
_setMaxEndDate: function(current) {
var maxEndDateFromChildren = this._getMaxEndDateFromChildren(current.getValue('sys_id'));
if (maxEndDateFromChildren) {
var dateTime = new GlideDateTime();
dateTime.setValue(maxEndDateFromChildren);
if (dateTime.getNumericValue() > current.end_date.dateNumericValue())
current.setValue('end_date', dateTime.getValue());
}
},
_getMaxEndDateFromChildren: function(sysId) {
var gr = new GlideRecord('planned_task');
gr.addQuery('parent', sysId);
gr.setLimit(1);
gr.orderByDesc('end_date');
gr.query();
if (gr.next())
return gr.getValue('end_date');
return null;
},
_calculateEndDate: function(startDate, duration) {
var dur;
var end_date;
startDate = this.getInternalDateFormat(startDate);
if (!this.isValidPositiveDuration(duration)) {
return startDate;
}
dur = new GlideDuration(0);
dur.setDisplayValue(duration);
end_date = new GlideDateTime();
end_date.setDisplayValueInternal(startDate);
end_date.addSeconds(dur.getNumericValue() / 1000);
return end_date.getDisplayValue();
},
_calculateDuration: function(startDate, endDate) {
var startDateInternal = this.getInternalDateFormat(startDate);
var endDateInternal = this.getInternalDateFormat(endDate);
var start = new GlideDateTime();
start.setDisplayValueInternal(startDateInternal);
var end = new GlideDateTime();
end.setDisplayValueInternal(endDateInternal);
var duration = GlideDateTime.subtract(start, end);
return duration.getDurationValue();
},
getDuration: function() {
var result;
var resp = {};
var sysparmStartDate = this.getParameter('sysparm_start_date');
var sysparmEndDate = this.getParameter('sysparm_end_date');
if (!this.isValidDate(sysparmStartDate)) {
this.sendResponse('error', 'start_date');
return;
}
if (!this.isValidDate(sysparmEndDate)) {
this.sendResponse('error', 'end_date');
return;
}
var duration = this._calculateDuration(sysparmStartDate, sysparmEndDate);
result = this.newItem('result');
result.setAttribute('status', 'success');
result.setAttribute('answer', duration);
},
getInternalDateFormat: function(displayValue) {
var dateTime = new GlideDateTime();
dateTime.setDisplayValue(displayValue);
if (dateTime.isValid())
return dateTime.getDisplayValueInternal();
else {
var dt = new GlideDateTime();
return dt.getDisplayValueInternal();
}
},
isValidDate: function(displayValue) {
var dateTime = new GlideDateTime();
dateTime.setDisplayValue(displayValue);
return dateTime.isValid();
},
isValidDuration: function(displayValue) {
var duration = new GlideDuration();
duration.setDisplayValue(displayValue);
return duration.isValid();
},
sendResponse: function(status, column, answer, message) {
var result = this.newItem("result");
result.setAttribute("column", column);
result.setAttribute("status", status);
if (answer)
result.setAttribute("answer", answer);
if (message)
result.setAttribute("message", message);
},
type: 'AjaxPlannedTaskDateUtil'
});
Sys ID
17f3f86787030300b9392c7c87cb0bb9