Name

global.WrapUpInteractionUtil

Description

Provides methods to access details about interaction wrap up.

Script

var WrapUpInteractionUtil = Class.create();

WrapUpInteractionUtil.wrapup_config_cache = "WRAP_UP_CONFIGURATION_CACHE";
WrapUpInteractionUtil.table = "interaction_wrap_up_configuration";

WrapUpInteractionUtil.prototype = {

  initialize: function() {
      this._initPrivateCache(WrapUpInteractionUtil.wrapup_config_cache);
  },

  /* This function iterates through the wrap up configurations and finds the first active
     configuration with conditions that are true for a given interaction. Empty conditions
     are true for all interactions. Confgurations are cached. */

  getWrapUpConfiguration: function(interaction) {
      var configs = GlideCacheManager.get(WrapUpInteractionUtil.wrapup_config_cache, WrapUpInteractionUtil.table);

      if (gs.nil(configs))
          configs = this._initInteractionWrapUpCache();
      else
          configs = JSON.parse(configs);

      for (var i = 0; i < configs.length; i++) {
          var conditions = configs[i].conditions;
          if (conditions == null || GlideFilter.checkRecord(interaction, conditions)) {
              return configs[i];
          }
      }
      return null;
  },

  isWrapUpEnabled: function(interaction) {
      var wrapUpConfig = this.getWrapUpConfiguration(interaction);
      if (wrapUpConfig != null)
          return true;
      return false;
  },

  getWrapUpConfigurationSysId: function(interaction) {
      var wrapUpConfig = this.getWrapUpConfiguration(interaction);
      if (wrapUpConfig != null)
          return wrapUpConfig.sys_id;
      return null;
  },

  isWrapUpDurationEnforced: function(interaction) {
      var wrapUpConfig = this.getWrapUpConfiguration(interaction);
      if (wrapUpConfig != null && wrapUpConfig.enforce_duration == true)
          return true;
      return false;
  },

  getWrapUpDuration: function(interaction) {
      var wrapUpConfig = this.getWrapUpConfiguration(interaction);
      if (wrapUpConfig != null && wrapUpConfig.enforce_duration == true)
          return wrapUpConfig.duration;
      return -1;
  },

  isShowWrapUpTimerEnabled: function(interaction) {
      var wrapUpConfig = this.getWrapUpConfiguration(interaction);
      if (wrapUpConfig != null && wrapUpConfig.enforce_duration == true)
          return wrapUpConfig.show_timer == '1';
      return false;
  },

  /**
   * Show 'End Wrap Up' button if the Interaction is Assigned to the Current Logged in
   * User and interaction is in wrap_up state
   */
  showEndWrapUpButton: function(interaction) {
      if (interaction.assigned_to == gs.getUserID() && interaction.state == "wrap_up" && interaction.state.canWrite()) {
          return true;
      }
      return false;
  },

  _initPrivateCache: function(name) {
      if (!name)
          return;

      if (GlideCacheManager.get(name, "_created_") === null) {
          GlideCacheManager.addPrivateCacheable(name);
          GlideCacheManager.put(name, "_created_", new GlideDateTime().getNumericValue());
      }
  },

  /**
   * Interaction Wrap Up configurations are stored in node cache.
   * Cache will be loaded lazily whenever a request for the cache arrives.
   */
  _initInteractionWrapUpCache: function() {
      var gr_config = new GlideRecord(WrapUpInteractionUtil.table);
      gr_config.addQuery('active', 'true');
      gr_config.orderBy('order');
      gr_config.query();

      configs = [];
      while (gr_config.next()) {
          var config = {
              name: gr_config.getValue('name'),
              sys_id: gr_config.getValue('sys_id'),
              conditions: gr_config.getValue('conditions'),
              enforce_duration: gr_config.getValue('enforce_duration'),
              duration: gr_config.getValue('duration'),
              order: gr_config.getValue('order'),
              show_timer: gr_config.getValue('show_timer')
          };
          configs.push(config);
      }

      if (configs.length > 0) {
          GlideCacheManager.put(WrapUpInteractionUtil.wrapup_config_cache, WrapUpInteractionUtil.table, JSON.stringify(configs));
      }
      return configs;
  },

  closeStaleInteractions: function(maxWrapupDuration) {
      var wrapupTimeout = new GlideDateTime();
      wrapupTimeout.addSeconds(-1 * maxWrapupDuration * 60);

      var interactionGr = new GlideRecord("interaction");
      interactionGr.addQuery('active', true);
      interactionGr.addQuery('state', '=', 'wrap_up');
      interactionGr.addQuery('state_changed_on', '<', wrapupTimeout.getValue());
      interactionGr.query();
      interactionGr.setValue('state', 'closed_complete');
      interactionGr.setValue('system_wrap_up', true);
      interactionGr.updateMultiple();
  },

  type: 'WrapUpInteractionUtil'
};

Sys ID

a90edc1b0f46a010603bf634a7767ee2

Offical Documentation

Official Docs: