Name

global.AjaxReleaseMgmtDateUtil

Description

This is to leverage api similar to AjaxPlannedTaskDateUtil.

Script

var AjaxReleaseMgmtDateUtil = Class.create();
AjaxReleaseMgmtDateUtil.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);
  },

  _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();
  },

  isValidPositiveDuration: function(duration) {
      return duration.indexOf('-') < 0;
  },

  isValidDuration: function(displayValue) {
      var duration = new GlideDuration();
      duration.setDisplayValue(displayValue);
      return duration.isValid();
  },

  _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();
  },

  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: 'AjaxReleaseMgmtDateUtil'
});

Sys ID

2f042188c7bb20100c8f612827c260f8

Offical Documentation

Official Docs: