Name

sn_risk.RiskHeatmapBase

Description

No description available

Script

var RiskHeatmapBase = Class.create();
RiskHeatmapBase.prototype = {
  initialize: function() {},

  getRiskHeatmapData: function(heatmapType, filter, includeColor) {
      if (!gs.hasRole('sn_risk.reader'))
          return '';
      return this._getRiskHeatmapData(heatmapType, filter, includeColor);
  },

  getRiskHeatmapXAxisCategories: function() {
      if (!gs.hasRole('sn_risk.reader'))
          return '';
      return this._getRiskHeatmapXAxisCategories();
  },

  getRiskHeatmapYAxisCategories: function() {
      if (!gs.hasRole('sn_risk.reader'))
          return '';
      return this._getRiskHeatmapYAxisCategories();
  },

  _getRiskHeatmapXAxisCategories: function() {
      var likelihood = new GlideRecord('sn_risk_criteria');
      likelihood.addQuery('type', 'likelihood');
      likelihood.orderByDesc('order');

      likelihood.query();

      var likelihoodCategories = [];

      while (likelihood.next())
          likelihoodCategories.push(likelihood.getValue('display_value'));

      return likelihoodCategories;
  },

  _getRiskHeatmapYAxisCategories: function() {
      var impact = new GlideRecord('sn_risk_criteria');
      impact.addQuery('type', 'impact');
      impact.orderByDesc('order');

      impact.query();

      var impactCategories = [];

      while (impact.next())
          impactCategories.push(impact.getValue('display_value'));

      return impactCategories;
  },

  _getRiskHeatmapData: function(heatmapType, filter, includeColor) {
      var riskData = [];
      var riskImpactFieldName = '';
      var riskLikelihoodFieldName = '';

      if (heatmapType == 'inherent') {
          riskImpactFieldName = 'impact';
          riskLikelihoodFieldName = 'likelihood';
      } else if (heatmapType == 'residual') {
          riskImpactFieldName = 'residual_impact';
          riskLikelihoodFieldName = 'residual_likelihood';
      } else
          return riskData;

      var likelihood = new GlideRecord('sn_risk_criteria');
      likelihood.addQuery('type', 'likelihood');
      likelihood.orderByDesc('order');

      likelihood.query();

      for (var i = 0; i < likelihood.getRowCount(); i++) {
          likelihood.next();

          var impact = new GlideRecord('sn_risk_criteria');
          impact.addQuery('type', 'impact');
          impact.orderByDesc('order');

          impact.query();
          for (var j = 0; j < impact.getRowCount(); j++) {

              impact.next();
              var risk = new GlideAggregate('sn_risk_risk');
              var count = 0;
              risk.addQuery(riskImpactFieldName, impact.getUniqueValue());
              risk.addQuery(riskLikelihoodFieldName, likelihood.getUniqueValue());
              risk.addQuery('state', '!=', 'retired');

              if (filter)
                  risk.addEncodedQuery(filter);

              risk.addAggregate('COUNT');
              risk.query();
              if (risk.next())
                  count = parseInt(risk.getAggregate('COUNT'));

              var riskColor = this._getRiskColor(impact.getUniqueValue(), likelihood.getUniqueValue());
              var riskUrl = 'sn_risk_risk_list.do?sysparm_query=' + riskImpactFieldName + '%3D' + impact.getUniqueValue() +
                  '%5E' + riskLikelihoodFieldName + '%3D' + likelihood.getUniqueValue();

              if (filter)
                  riskUrl += '%5E' + filter;
              if (includeColor)
                  riskData.push({
                      x: i,
                      y: j,
                      value: count,
                      color: riskColor.color,
                      tooltipHeading: riskColor.colorName,
                      url: riskUrl
                  });
              else
                  riskData.push({
                      x: i,
                      y: j,
                      value: count,
                      url: riskUrl
                  });
          }
      }

      return riskData;
  },

  _getRiskColor: function(impact, likelihood) {
      var colorSetting = new GlideRecord('sn_risk_color_setting');
      colorSetting.addQuery('impact', impact);
      colorSetting.addQuery('likelihood', likelihood);
      colorSetting.setLimit(1);
      colorSetting.query();
      if (colorSetting.next()) {
          var colorDetails = {
              color: (colorSetting.color.color + ''),
              colorName: (colorSetting.color.name + '')
          };
          return colorDetails;

      }

      return {
          color: '#ff402c' //defaut set to be red
      };
  },

  type: 'RiskHeatmapBase'
};

Sys ID

8b36922a535332003b638e56a11c0873

Offical Documentation

Official Docs: