Name
sn_gf.GFTarget
Description
No description available
Script
var GFTarget = Class.create();
GFTarget.prototype = {
initialize: function(targetId, targetGR) {
this.targetId = targetId;
this.targetGR = targetGR;
},
getTargetGR: function(targetId) {
if (!this.targetGR) {
if (!targetId)
this.targetId = targetId;
this.targetGR = new GlideRecord(GoalFrameworkConstants.GOAL_TARGET_TABLE);
this.targetGR.get(this.targetId);
}
return this.targetGR;
},
getGoalGR: function(encodedQuery) {
var goalGR = new GlideRecord(GoalFrameworkConstants.GOAL_CORE_TABLE);
goalGR.addQuery("sys_id", this.getTargetGR().getValue('goal'));
if (encodedQuery)
goalGR.addEncodedQuery(encodedQuery);
goalGR.query();
return goalGR;
},
doesGoalExist: function() {
var goalGR = new GlideRecord(GoalFrameworkConstants.GOAL_CORE_TABLE);
return goalGR.get(this.getTargetGR().getValue('goal'));
},
canDelete: function() {
var result = {};
if (!this.doesGoalExist()) { //Goal is already deleted
result.canDelete = true;
return result;
}
result.canDelete = sn_gf.GoalConfigUtil.isTargetDeletionAllowed();
if (!result.canDelete) {
var targetsLabel = sn_gf.GFUtil.getTablePluralLabel(GoalFrameworkConstants.GOAL_TARGET_TABLE).toLowerCase();
result.message = gs.getMessage("Deletion of {0} is not enabled. Please reach out to your admin for changing the settings to allow deletion.", targetsLabel);
}
return result;
},
validateDates: function() {
var goalLabel = sn_gf.GFUtil.getTableLabel(GoalFrameworkConstants.GOAL_TABLE).toLowerCase();
var goalGr = this.getGoalGR();
goalGr.next();
var errorMsg = gs.getMessage("The start and end dates must be within the dates ({0} and {1}) of the {2}.", [GlideStringUtil.escapeHTML(goalGr.getDisplayValue('start_date')), GlideStringUtil.escapeHTML(goalGr.getDisplayValue('end_date')), goalLabel]);
var targetGr = this.getTargetGR();
var targetStartDate = targetGr.start_date;
var targetEndDate = targetGr.end_date;
if (global.JSUtil.notNil(targetStartDate) && global.JSUtil.notNil(targetEndDate) && targetStartDate > targetEndDate) {
errorMsg = gs.getMessage("Start date cannot be later than the end date.");
return errorMsg;
}
var goalStartDate = goalGr.start_date;
var goalEndDate = goalGr.end_date;
if (global.JSUtil.notNil(targetStartDate)) {
if ((global.JSUtil.notNil(goalStartDate) && goalStartDate > targetStartDate) || (global.JSUtil.notNil(goalEndDate) && goalEndDate < targetStartDate)) {
return errorMsg;
}
}
if (global.JSUtil.notNil(targetEndDate)) {
if ((global.JSUtil.notNil(goalStartDate) && goalStartDate > targetEndDate) || (global.JSUtil.notNil(goalEndDate) && goalEndDate < targetEndDate)) {
return errorMsg;
}
}
return "";
},
getNextReviewDate: function(review_due_date, checkinFreq) {
return this._getReviewDate(review_due_date, checkinFreq, 1);
},
_getReviewDate: function(review_due_date, checkinFreq, offset) {
var reviewDate = new GlideDateTime(review_due_date);
var now = new GlideDateTime();
var diff;
var days;
var weeks;
var month;
var year;
switch (checkinFreq) {
case "daily": {
if(now > review_due_date){
now.addDaysUTC(1 * offset);
reviewDate.setGlideDateTime(now);
}else
reviewDate.addDaysUTC(1 *offset);
break;
}
case "weekly": {
weeks = 1 * offset;
if(now > review_due_date){
diff = GlideDateTime.subtract(reviewDate, now);
days = diff.getRoundedDayPart();
weeks = weeks + Math.floor(days / 7);
}
reviewDate.addWeeksUTC(weeks);
break;
}
case "fortnightly": {
weeks = 1 * offset;
if(now > review_due_date){
diff = GlideDateTime.subtract(reviewDate, now);
days = diff.getRoundedDayPart();
weeks = weeks + Math.floor(days / 14);
}
reviewDate.addWeeksUTC(weeks * 2);
break;
}
case "monthly": {
month = 1 * offset;
if(now > review_due_date){
var nowDayLess = now.getDayOfMonthUTC() < reviewDate.getDayOfMonthUTC() ? 1 : 0 ;
month = month + (now.getMonthUTC() - reviewDate.getMonthUTC()) + ((now.getYearUTC() - reviewDate.getYearUTC()) * 12) - nowDayLess;
}
reviewDate.addMonthsUTC(month);
break;
}
case "quarterly": {
month = offset * 3;
if(now > review_due_date)
month = month + (Math.floor((now.getMonthUTC() - reviewDate.getMonthUTC()) / 3) * 3) + ((now.getYearUTC() - reviewDate.getYearUTC()) * 12);
reviewDate.addMonthsUTC(month);
break;
}
case "yearly": {
year = 1 * offset;
if(now > review_due_date)
year = year + (now.getYearUTC() - reviewDate.getYearUTC());
reviewDate.addYearsUTC(year);
break;
}
}
return reviewDate.getDate();
},
logTargetProgress: function() {
new sn_gf.TargetProgressUtil(this.getTargetGR()).logTargetProgress();
},
type: 'GFTarget'
};
Sys ID
507cb71653e930103913ddeeff7b1218