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