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

Offical Documentation

Official Docs: