Name

sn_sd.SDHelperUtils

Description

Helper functions to perform certain operations in Success Dashboard - Evaluate Script field in Primary Indicator Registry, - Get the Indicator type, - Get the Indicator label, - Get the Indicator drilldown level.

Script

var SDHelperUtils = Class.create();

SDHelperUtils.prototype = {
  initialize: function() {
      this.PRIMARY_INDICATOR_TABLE = "sn_sd_primary_indicator";
      this.PRIMARY_INDICATOR_REGISTRY_TABLE = 'sn_sd_primary_indicator_registry';
      this.CONTRIBUTING_INDICATOR_REGISTRY_TABLE = "sn_sd_contributing_indicator_registry";
      this.utils = new sn_sd.SDConstants();
  },

  logInfo: function(infoMessage) {
      gs.info(infoMessage);
  },
  logWarning: function(warningMessage) {
      gs.warn(warningMessage);
  },
  logError: function(errorMessage) {
      gs.error(errorMessage);
  },

  evaluateScript: function(primary_kpi, log_message) {
      var gr = new GlideRecord(this.PRIMARY_INDICATOR_REGISTRY_TABLE);
      gr.addQuery('sys_id', primary_kpi);
      gr.query();
      if (gr.next()) {
          var vars = {
              "current": gr,
          };
          var evaluator = new GlideScopedEvaluator();
          var response = evaluator.evaluateScript(gr, 'script', vars);
          if (log_message) {
              if (response['type'] == 'info')
                  this.logInfo(response['message']);
              else if (response['type'] == 'warning')
                  this.logWarning(response['message']);
              else
                  this.logError(response['message']);
          }
          return response['message'];
      }
      return "";
  },

  getResponsePayload: function(payload) {
      var response = {};
      if (payload.error_kpis.length == 0) {
          if (payload.hasOwnProperty('impacted_denominator')) {
              response['type'] = SDConstants.messageTypes.WARNING;
              response['code'] = SDConstants.statusCodes.WARNING_CODE_UPDATE;
              response['message'] = this.utils.getWarningMessageUpdate(payload.registry_name, payload.impacted_denominator);
          } else {
              response['type'] = SDConstants.messageTypes.INFO;
              response['code'] = SDConstants.statusCodes.SUCCESS_CODE_UPDATE;
              response['message'] = this.utils.getSuccessMessageUpdate(payload.registry_name);
          }
      } else if (payload.success_kpis.length == 0) {
          response['type'] = SDConstants.messageTypes.ERROR;
          response['code'] = SDConstants.statusCodes.ERROR_CODE;
          response['message'] = this.utils.getErrorMessage(payload.registry_name);
      }
      return response;
  },

  // ! - The function takes pa_indicator's sys_id as i/p & returns the KPI type from sn_sd_primary_indicator (cost/count)
  getIndicatorType: function(kpiSysId) {
      var grPrimaryIndicator = new GlideRecord(this.PRIMARY_INDICATOR_TABLE);
      grPrimaryIndicator.addQuery("indicator", kpiSysId);
      grPrimaryIndicator.query();

      if (grPrimaryIndicator.next()) {
          return grPrimaryIndicator.type == "cost" ? "cost" : "count";
      }
      return null;
  },

  // ! - The function takes pa_indicator's sys_id as i/p & returns the KPI name from sn_sd_primary_indicator_registry
  getIndicatorLabelPrimary: function(kpiSysId) {
      var grPrimaryIndicator = new GlideRecord(this.PRIMARY_INDICATOR_TABLE);
      grPrimaryIndicator.addQuery("indicator", kpiSysId);
      grPrimaryIndicator.query();

      if (grPrimaryIndicator.next()) {
          return grPrimaryIndicator.primary_indicator.name.getDisplayValue();
      }
      return "";
  },

  // ! - The function takes pa_indicator's sys_id as i/p & returns the KPI drilldown-level
  getIndicatorDrilldownLevel: function(kpiSysId) {
      var drilldown_view = null;
      var grPrimaryIndicator, grContributingIndicator;

      grPrimaryIndicator = new GlideRecord(this.PRIMARY_INDICATOR_TABLE);
      grPrimaryIndicator.addQuery("indicator", kpiSysId);
      grPrimaryIndicator.query();

      if (grPrimaryIndicator.next()) {
          drilldownType = grPrimaryIndicator.primary_indicator.drilldown_type;

          if (drilldownType == "formula numerators") {
              drilldown_view = "drilldown-level-1";
          } else if (drilldownType == "registered indicators") {
              drilldown_view = "drilldown-level-2";
          } else {
              drilldown_view = null;
          }
      } else {
          grContributingIndicator = new GlideRecord(this.CONTRIBUTING_INDICATOR_REGISTRY_TABLE);
          grContributingIndicator.addQuery("contributing_indicator", kpiSysId);
          grContributingIndicator.query();

          if (grContributingIndicator.next()) {
              drilldown_view = "drilldown-level-3";
          } else {
              drilldown_view = null;
          }
      }

      return drilldown_view;
  },

  getIndicatorLabelContributing: function(kpiSysId) {
      var gr = new GlideRecord('sn_sd_contributing_indicator_registry');
      if (gr.get('contributing_indicator', kpiSysId))
          return gr.getValue('name');
      return '';
  },

  getCurrency: function() {
      var gr = new GlideRecord('fx_currency');
      if (gr.get('code', gs.getProperty('sn_sd.success_dashboard_currency')))
          return gr.symbol;
      return 'USD';
  },

  getIndicatorLevel: function(kpiSysId) {
      var gr = new GlideRecord('sn_sd_primary_indicator');
      if (gr.get('indicator', kpiSysId))
          return gr.primary_indicator.indicator_level;
      gr = new GlideRecord('sn_sd_contributing_indicator_registry');
      if (gr.get('contributing_indicator', kpiSysId))
          return 'contributing';
      return '';
  },

  getIndicatorFormula: function(kpiSysId) {
      var gr = new GlideRecord('pa_indicators');
      if (gr.get(kpiSysId)) return gr.formula;
      return '';
  },

  getServiceGroup: function(kpiSysId) {
      var gr = new GlideRecord('sn_sd_primary_indicator');
      if (gr.get('indicator', kpiSysId))
          return gr.service_group;
      return '';
  },

  getIndicatorScore: function(kpiSysId, showBy) {
      var today = new Date();
      var year = today.getFullYear();
      var month = today.getMonth() + 1;
      var daysInMonth = new Date(year, month, 0).getDate();
      from_Date = year + "-" + month + "-01";
      to_date = year + "-" + month + "-" + daysInMonth.toString();
      fromDate = new GlideDateTime(from_Date);
      toDate = new GlideDateTime(to_date);
      var sc = new PAScorecard();

      var showby = SDConstants.paAggregates.BYMONTHSUM;
      if (showBy == 'quarter') {
          showby = SDConstants.paAggregates.BYQUARTERSUM;
      } else if (showBy == 'year') {
          showby = SDConstants.paAggregates.BYYEARSUM;
      }

      var query = kpiSysId + ":" + showby;
      sc.addParam('uuid', query);
      sc.addParam('include_scores', 'true');
      sc.addParam('from', fromDate.getDate());
      sc.addParam('to', toDate.getDate());
      sc.addParam('display', 'all');
      var result = sc.query();
      if (result[0]["scores"].length == 0 || result[0]["scores"][0]["value"] == null || result[0]["scores"][0]["value"] == "") return 0;
      else return result[0]["scores"][0]["value"];
  },

  getPrimaryRegistryId: function(kpiSysId) {
      var gr = new GlideRecord('sn_sd_primary_indicator');
      if (gr.get('indicator', kpiSysId))
          return gr.primary_indicator;
      return '';
  },

  getPersonaGroupCostSavings: function(sysId, personaGroup, serviceGroup, showBy) {
      var gr = new GlideRecord('sn_sd_formula_view');
      gr.addQuery('contri_primary_kpi', sysId);
      gr.addQuery('contri_active', true);
      if (serviceGroup != '' && serviceGroup != null && serviceGroup != undefined && serviceGroup != 'All')
          gr.addQuery('contri_service_group', serviceGroup);
      gr.addQuery('pgroup_sys_id', personaGroup);
      gr.query();
      var time_saved = -1;
      while (gr.next()) {
          if (time_saved == -1)
              time_saved = this.getIndicatorScore(gr.contri_contributing_indicator, showBy) * (gr.ptime_time_saved.dateNumericValue() * gr.pgroup_hourly_salary.getCurrencyValue() / 1000 / 3600);
          else
              time_saved = time_saved + this.getIndicatorScore(gr.contri_contributing_indicator, showBy) * (gr.ptime_time_saved.dateNumericValue() * gr.pgroup_hourly_salary.getCurrencyValue() / 1000 / 3600);
      }
      if (time_saved == -1)
          return -1;
      return time_saved;
  },

  abbreviateNumber: function(value) {
      if (value < 1e3) return (value.toFixed(2));
      if (value >= 1e3 && value < 1e6) return ((value / 1e3).toFixed(2) + "K");
      if (value >= 1e6 && value < 1e9) return ((value / 1e6).toFixed(2) + "M");
      if (value >= 1e9 && value < 1e12) return ((value / 1e9).toFixed(2) + "B");
      if (value >= 1e12) return ((value / 1e12).toFixed(2) + "T");
  },

  type: 'SDHelperUtils'
};

Sys ID

87395e1a53102110ea79ddeeff7b12da

Offical Documentation

Official Docs: