Name
sn_risk_advanced.RiskAdvancedHeatmapBase
Description
No description available
Script
var RiskAdvancedHeatmapBase = Class.create();
RiskAdvancedHeatmapBase.prototype = {
initialize: function() {},
getHeatmapFactor: function(assessmentType, dimension) {
return this._getHeatmapFactor(assessmentType, dimension);
},
createHeatmapColorMatrix: function(assessmentType) {
this._createHeatmapColorMatrix(assessmentType);
},
deleteOldHeatmapEntries: function(assessmentType) {
this._deleteOldHeatmapEntries(assessmentType);
},
getAdvancedRiskHeatmapData: function(heatmapType, includeColor, ramID, encodedQuery, limit) {
if (!gs.hasRole('sn_grc.reader') && !gs.hasRole('sn_risk.reader') && !gs.hasRole('sn_grc.business_user') && !gs.hasRole('sn_grc.business_user_lite'))
return '';
return this._getAdvancedRiskHeatmapData(heatmapType, includeColor, ramID, encodedQuery, limit);
},
getHeatmapRiskDetails: function(riskId, assessmentId) {
return this._getHeatmapRiskDetails(riskId, assessmentId);
},
getAdvancedRiskHeatMapRisksInfo: function(assessmentsInfo, heatmapType) {
return this._getAdvancedRiskHeatMapRisksInfo(assessmentsInfo, heatmapType);
},
getRiskCoordinateValues: function(heatmapType, assessmentId, viewType, limit) {
if (viewType == "risk_movement") {
return this._getRiskCoordinateValues(assessmentId);
} else if (viewType == "risk_trend") {
return this._getRiskTrendValues(heatmapType, assessmentId, limit);
}
},
getFactorResponseValues: function(tableName, ramID, asmtType, asmtState, assessmentId, factorId) {
return this._getFactorResponseValues(tableName, ramID, asmtType, asmtState, assessmentId, factorId);
},
getFactorTransformationInfo: function(assessmentId, asmtType, factorId) {
return this._getFactorTransformationInfo(assessmentId, asmtType, factorId);
},
isChoiceFactor: function(factorId) {
return this._isChoiceFactor(factorId);
},
validateHeatMapFactorValues: function(ramID, asmtID) {
return this._validateHeatMapFactorValues(ramID, asmtID);
},
_validateHeatMapFactorValues: function(ramID, asmtID) {
var inherentRecordInfo = this._getAssessmentRecordFactorValues(ramID, 'sn_risk_advanced_inherent_assessment', asmtID);
var residualRecordInfo = this._getAssessmentRecordFactorValues(ramID, 'sn_risk_advanced_residual_assessment', asmtID);
var targetRecordInfo = this._getAssessmentRecordFactorValues(ramID, 'sn_risk_advanced_target_assessment', asmtID);
var flag = false;
var msg = '';
if (inherentRecordInfo.recordSysId != '' && residualRecordInfo.recordSysId != '' && targetRecordInfo.recordSysId != '') {
if (this._compareFactors(inherentRecordInfo, residualRecordInfo) && this._compareFactors(residualRecordInfo, targetRecordInfo)) {
flag = true;
} else {
msg = gs.getMessage("The inherent, residual and target factors configured in RAM are not the same.");
}
} else if (inherentRecordInfo.recordSysId != '' && residualRecordInfo.recordSysId != '') {
if (this._compareFactors(inherentRecordInfo, residualRecordInfo)) {
flag = true;
} else {
msg = gs.getMessage("The residual and inherent factors configured in RAM are not the same.");
}
} else if (inherentRecordInfo.recordSysId != '' && targetRecordInfo.recordSysId != '') {
if (this._compareFactors(inherentRecordInfo, targetRecordInfo)) {
flag = true;
} else {
msg = gs.getMessage("The inherent and target factors configured in RAM are not the same.");
}
} else if (residualRecordInfo.recordSysId != '' && targetRecordInfo.recordSysId != '') {
if (this._compareFactors(residualRecordInfo, targetRecordInfo)) {
flag = true;
} else {
msg = gs.getMessage("The residual and target factors configured in RAM are not the same.");
}
}
var result = {
flag: flag,
message: msg
};
return result;
},
_compareFactors: function(info1, info2) {
return (info1.xFactor == info2.xFactor) && (info1.yFactor == info2.yFactor);
},
_isChoiceFactor: function(factorId) {
var userResponse = new GlideRecord('sn_risk_advanced_manual_factor');
userResponse.get(factorId);
return (userResponse.getValue('user_response') == 1);
},
_getFormatedDate: function(dateValue, format) {
var glideDate = new GlideDateTime(dateValue);
var myDate = glideDate.getDate();
var formatDate = new GlideDate();
formatDate.setValue(myDate);
return formatDate.getByFormat(format).toString();
},
_getRamIdForRisk: function(assessmentId) {
var ramIdvalue = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
ramIdvalue.get(assessmentId);
return ramIdvalue.getValue('risk_assessment_methodology');
},
_getAssessmentRecordsBasedOnFactors: function(ramID, assessmentId, heatmapType, xFactorId, yFactorId, xValues, yValues, limit) {
var risk = '';
var entity = '';
var asmtType = '';
var coordinateArray = [];
var assessmentSysId = '';
var assessmentState = '';
var createdDate = '';
var assessmentRecord = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
assessmentRecord.get(assessmentId);
if (heatmapType == 'inherent') {
asmtType = '1';
} else if (heatmapType == 'residual') {
asmtType = '3';
} else {
asmtType = '4';
}
var assessmentRecordDetails = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
assessmentRecordDetails.addQuery('risk', assessmentRecord.risk);
assessmentRecordDetails.addQuery('entity_1', assessmentRecord.entity_1);
assessmentRecordDetails.addQuery('risk_assessment_methodology.sys_id', ramID); //dot-walk gave the proper record values
assessmentRecordDetails.addQuery('state', 'IN', '7,8');
assessmentRecordDetails.orderByDesc('sys_created_on');
if (heatmapType == 'inherent') {
assessmentRecordDetails.addQuery('summary_inherent_risk', "!=", "");
} else if (heatmapType == 'residual') {
assessmentRecordDetails.addQuery('summary_residual_risk', "!=", "");
} else {
assessmentRecordDetails.addQuery('summary_target_risk', "!=", "");
}
if (gs.nil(limit)) {
assessmentRecordDetails.setLimit(5);
} else {
assessmentRecordDetails.setLimit(limit);
}
assessmentRecordDetails.query();
var appetiteUtils = new sn_risk_advanced.RiskAppetiteUtils();
var appetiteStatusColorList = appetiteUtils.getAppetiteStatusColorsAndIconsWS();
while (assessmentRecordDetails.next()) {
var assessmentCoords = [];
assessmentSysId = assessmentRecordDetails.getUniqueValue();
assessmentState = assessmentRecordDetails.getValue('state');
createdDate = assessmentRecordDetails.getDisplayValue('sys_created_on');
var formatedDate = this._getFormatedDate(createdDate, "MMM''yy");
var XFactorResponse = this._getFactorResponseValues('sn_risk_advanced_risk_assessment_instance_response', ramID, asmtType, assessmentState, assessmentSysId, xFactorId);
var YFactorResponse = this._getFactorResponseValues('sn_risk_advanced_risk_assessment_instance_response', ramID, asmtType, assessmentState, assessmentSysId, yFactorId);
var xFactorRating = this._getFactorTransformationInfo(assessmentSysId, asmtType, xFactorId, XFactorResponse);
var yFactorRating = this._getFactorTransformationInfo(assessmentSysId, asmtType, yFactorId, YFactorResponse);
assessmentCoords.push(xValues.indexOf(xFactorRating));
assessmentCoords.push(yValues.indexOf(yFactorRating));
assessmentCoords.push(formatedDate);
var overallAppetiteStatus = assessmentRecordDetails.getValue("overall_appetite_status");
if (!gs.nil(overallAppetiteStatus) && appetiteUtils.isRiskAppetiteEnabled()) {
var iconConfiguration = appetiteStatusColorList[overallAppetiteStatus];
assessmentCoords.push(iconConfiguration);
}
coordinateArray.push(assessmentCoords);
}
return coordinateArray;
},
_getAssessmentRecordsBasedOnMatrix: function(ramID, assessmentId, xValues, yValues, limit) {
var xAxisValue = '';
var yAxisValue = '';
var risk = '';
var entity = '';
var coordinateArray = [];
var residualRecordInfo = new GlideRecord('sn_risk_advanced_residual_assessment');
residualRecordInfo.addQuery("risk_assessment_methodology", ramID);
residualRecordInfo.query();
while (residualRecordInfo.next()) {
xAxisValue = residualRecordInfo.getValue('x_dimension');
yAxisValue = residualRecordInfo.getValue('y_dimension');
}
var assessmentRecord = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
assessmentRecord.get(assessmentId);
var assessmentRecordDetails = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
assessmentRecordDetails.addQuery('risk', assessmentRecord.risk);
assessmentRecordDetails.addQuery('entity_1', assessmentRecord.entity_1);
assessmentRecordDetails.addQuery('risk_assessment_methodology.sys_id', ramID);
assessmentRecordDetails.orderByDesc('sys_created_on');
assessmentRecordDetails.addQuery('summary_inherent_risk', "!=", "");
assessmentRecordDetails.addQuery('summary_control_effectiveness', "!=", "");
if (gs.nil(limit)) {
assessmentRecordDetails.setLimit(5);
} else {
assessmentRecordDetails.setLimit(limit);
}
assessmentRecordDetails.query();
while (assessmentRecordDetails.next()) {
var assessmentCoords = [];
var xFactorRatingValue = '';
var yFactorRatingValue = '';
if (xAxisValue == "inherent_risk") {
xFactorRatingValue = assessmentRecordDetails.getValue('summary_inherent_risk');
yFactorRatingValue = assessmentRecordDetails.getValue('summary_control_effectiveness');
assessmentCoords = this._getAssessmentRecordDetails(assessmentRecordDetails, xFactorRatingValue, yFactorRatingValue, xValues, yValues);
coordinateArray.push(assessmentCoords);
} else {
xFactorRatingValue = assessmentRecordDetails.getValue('summary_control_effectiveness');
yFactorRatingValue = assessmentRecordDetails.getValue('summary_inherent_risk');
assessmentCoords = this._getAssessmentRecordDetails(assessmentRecordDetails, xFactorRatingValue, yFactorRatingValue, xValues, yValues);
coordinateArray.push(assessmentCoords);
}
}
return coordinateArray;
},
_getAssessmentRecordDetails: function(assessmentRecordDetails, xfactorRatingValue, yFactorRatingValue, xValues, yValues) {
var appetiteUtils = new sn_risk_advanced.RiskAppetiteUtils();
var xFactorRating = '';
var yFactorRating = '';
var createdDate = '';
var formatedDate = '';
var assessmentCoords = [];
var ratingCriteria = new GlideRecord('sn_risk_advanced_rating_criteria');
ratingCriteria.get(xfactorRatingValue);
xFactorRating = ratingCriteria.getValue('rating');
ratingCriteria.get(yFactorRatingValue);
yFactorRating = ratingCriteria.getValue('rating');
createdDate = assessmentRecordDetails.getDisplayValue('sys_created_on');
formatedDate = this._getFormatedDate(createdDate, "MMM''yy");
assessmentCoords.push(xValues.indexOf(xFactorRating));
assessmentCoords.push(yValues.indexOf(yFactorRating));
assessmentCoords.push(formatedDate);
var overallAppetiteStatus = assessmentRecordDetails.getValue("overall_appetite_status");
var appetiteStatusColorList = new sn_risk_advanced.RiskAppetiteUtils().getAppetiteStatusColorsAndIconsWS();
if (!gs.nil(overallAppetiteStatus) && appetiteUtils.isRiskAppetiteEnabled()) {
var iconConfiguration = appetiteStatusColorList[overallAppetiteStatus];
assessmentCoords.push(iconConfiguration);
}
return assessmentCoords;
},
_getAssessmentRecordFactorValues: function(ramID, className, asmtID) {
var assessmentRecordSysId = '';
var xFactorSysId = '';
var yFactorSysId = '';
var assessmentRecordInfo = {};
var hasFactorResponses = true;
if (className == "sn_risk_advanced_target_assessment") {
var ramReference = new GlideRecord('sn_risk_advanced_risk_assessment_methodology');
ramReference.get(ramID);
if (!this._isTargetAssessmentEnabledFactorBased(ramReference, asmtID)) {
hasFactorResponses = false;
}
}
if (className == "sn_risk_advanced_residual_assessment" && this._checkIfResidualNotApplicable(asmtID)) {
hasFactorResponses = false;
}
if (hasFactorResponses) {
var assessmentType = new GlideRecord(className);
assessmentType.addQuery("risk_assessment_methodology", ramID);
assessmentType.query();
if (assessmentType.next()) {
assessmentRecordSysId = assessmentType.getUniqueValue();
xFactorSysId = assessmentType.getValue('x_axis_factor');
yFactorSysId = assessmentType.getValue('y_axis_factor');
}
}
assessmentRecordInfo = {
"recordSysId": assessmentRecordSysId,
"xFactor": xFactorSysId,
"yFactor": yFactorSysId
};
return assessmentRecordInfo;
},
_isTargetAssessmentEnabledFactorBased: function(ram, assessmentId) {
if (ram.getValue('target_risk') == true) {
var target = new GlideRecord("sn_risk_advanced_target_assessment");
target.addQuery("risk_assessment_methodology", ram.getUniqueValue());
target.query();
if (target.next()) {
if (target.state == '2') {
if (target.getValue("calculate_based_on") == "overall_assessment")
return false;
else {
var factorResponses = new GlideRecord("sn_risk_advanced_risk_assessment_instance_response");
factorResponses.addQuery("assessment_instance_id", assessmentId);
factorResponses.addQuery('assessment_type', 4);
factorResponses.setLimit(1);
factorResponses.query();
return factorResponses.hasNext();
}
}
}
}
return false;
},
_checkIfResidualNotApplicable: function(asmtID) {
var asmt = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
asmt.get(asmtID);
return asmt.getValue("residual_risk_not_applicable") == true;
},
_getFactorResponseValues: function(tableName, ramID, asmtType, asmtState, assessmentId, factorId) {
var factorResponseResult = '';
var factorResponse = new GlideRecord(tableName);
factorResponse.addQuery('assessment_instance_id.risk_assessment_methodology', ramID);
factorResponse.addQuery('assessment_type', asmtType);
factorResponse.addQuery('assessment_instance_id.state', asmtState);
factorResponse.addQuery('assessment_instance_id', assessmentId);
factorResponse.addQuery('factor.sys_id', factorId);
factorResponse.query();
while (factorResponse.next()) {
factorResponseResult = factorResponse.getValue('factor_response');
}
return factorResponseResult;
},
_getFactorTransformationInfo: function(assessmentId, asmtType, factorId, factorResponse) {
var value = '';
var display_value = '';
var riskRating = '';
var criterias = [];
var factorRating = '';
var transformationCriteriaId = '';
var factorResponseValue = new GlideRecord('sn_risk_advanced_risk_assessment_instance_response');
factorResponseValue.addQuery('assessment_instance_id', assessmentId);
factorResponseValue.addQuery('assessment_type', asmtType);
factorResponseValue.addQuery('factor.sys_id', factorId);
factorResponseValue.query();
while (factorResponseValue.next()) {
transformationCriteriaId = factorResponseValue.getValue(('transformation_criteria'));
}
var transformationCriteriaValue = new GlideRecord('sn_risk_advanced_transformation_criteria');
transformationCriteriaValue.get(transformationCriteriaId);
factorRating = transformationCriteriaValue.getValue('display_text');
//validate factor type is choice
var isFactorTypeChoice = this._isChoiceFactor(factorId);
if (gs.nil(factorRating) && (isFactorTypeChoice == true)) {
//Transformation criteria is empty,getting factor choices
var choices = new GlideRecord('sn_risk_advanced_factor_choice');
choices.addQuery('factor', factorId);
choices.addQuery('score', factorResponse);
choices.query();
while (choices.next()) {
factorRating = choices.getValue(('display_value'));
}
}
return factorRating;
},
_getRiskTrendValues: function(heatmapType, assessmentId, limit) {
var xFactorId = '';
var yFactorId = '';
var coordsArray = [];
var assessmentArrayValues = [];
var ramID = this._getRamIdForRisk(assessmentId);
var xyCategories = this._getXYAxisForHeatmap(ramID, heatmapType);
var xValues = xyCategories.xValuesArray.split(",");
var yValues = xyCategories.yValuesArray.split(",");
xFactorId = xyCategories.xFactorId;
yFactorId = xyCategories.yFactorId;
if (ramID == '' || assessmentId == '') {
return coordsArray;
}
//If residual assessment is based on inherent and control then fetch assessments based on inherent and control rating
if (heatmapType == "residual" && gs.nil(xFactorId) && (gs.nil(yFactorId))) {
assessmentArrayValues = this._getAssessmentRecordsBasedOnMatrix(ramID, assessmentId, xValues, yValues, limit);
} else {
assessmentArrayValues = this._getAssessmentRecordsBasedOnFactors(ramID, assessmentId, heatmapType, xFactorId, yFactorId, xValues, yValues, limit);
}
assessmentArrayValues.reverse();
return assessmentArrayValues;
},
_getRiskCoordinateValues: function(assessmentId) {
var xFactorId = '';
var yFactorId = '';
var coordsArray = [];
var inherentCoords = [];
var residualCoords = [];
var targetCoords = [];
var ramID = this._getRamIdForRisk(assessmentId);
var ram = new GlideRecord("sn_risk_advanced_risk_assessment_methodology");
ram.get(ramID);
var heatmapType = "inherent";
if (!ram.inherent_risk)
heatmapType = "residual";
var xyCategories = this._getXYAxisForHeatmap(ramID, heatmapType);
var xValues = xyCategories.xValuesArray.split(",");
var yValues = xyCategories.yValuesArray.split(",");
xFactorId = xyCategories.xFactorId;
yFactorId = xyCategories.yFactorId;
if (ramID == '' || assessmentId == '') {
return coordsArray;
}
//Inherent Data
if (ram.inherent_risk) {
var inherentXFactorResponse = this._getFactorResponseValues('sn_risk_advanced_risk_assessment_instance_response', ramID, '1', '7', assessmentId, xFactorId);
var inherentYFactorResponse = this._getFactorResponseValues('sn_risk_advanced_risk_assessment_instance_response', ramID, '1', '7', assessmentId, yFactorId);
var xFactorRatingInherent = this._getFactorTransformationInfo(assessmentId, '1', xFactorId, inherentXFactorResponse);
var yFactorRatingInherent = this._getFactorTransformationInfo(assessmentId, '1', yFactorId, inherentYFactorResponse);
inherentCoords.push(xValues.indexOf(xFactorRatingInherent));
inherentCoords.push(yValues.indexOf(yFactorRatingInherent));
inherentCoords.push(gs.getMessage("Inherent"));
coordsArray.push(inherentCoords);
}
//Residual data
if (ram.residual_risk && !this._checkIfResidualNotApplicable(assessmentId)) {
var residualXFactorResponse = this._getFactorResponseValues('sn_risk_advanced_risk_assessment_instance_response', ramID, '3', '7', assessmentId, xFactorId);
var residualYFactorResponse = this._getFactorResponseValues('sn_risk_advanced_risk_assessment_instance_response', ramID, '3', '7', assessmentId, yFactorId);
var xFactorRatingResidual = this._getFactorTransformationInfo(assessmentId, '3', xFactorId, residualXFactorResponse);
var yFactorRatingResidual = this._getFactorTransformationInfo(assessmentId, '3', yFactorId, residualYFactorResponse);
residualCoords.push(xValues.indexOf(xFactorRatingResidual));
residualCoords.push(yValues.indexOf(yFactorRatingResidual));
residualCoords.push(gs.getMessage("Residual"));
coordsArray.push(residualCoords);
}
//Target Data
if (this._isTargetAssessmentEnabledFactorBased(ram, assessmentId)) {
var targetXFactorResponse = this._getFactorResponseValues('sn_risk_advanced_risk_assessment_instance_response', ramID, '4', '7', assessmentId, xFactorId);
var targetYFactorResponse = this._getFactorResponseValues('sn_risk_advanced_risk_assessment_instance_response', ramID, '4', '7', assessmentId, yFactorId);
var xFactorRatingTarget = this._getFactorTransformationInfo(assessmentId, '4', xFactorId, targetXFactorResponse);
var yFactorRatingTarget = this._getFactorTransformationInfo(assessmentId, '4', yFactorId, targetYFactorResponse);
targetCoords.push(xValues.indexOf(xFactorRatingTarget));
targetCoords.push(yValues.indexOf(yFactorRatingTarget));
targetCoords.push(gs.getMessage("Target"));
coordsArray.push(targetCoords);
}
return coordsArray;
},
_getAdvancedRiskHeatmapData: function(heatmapType, includeColor, ramID, encodedQuery, limit) {
if (heatmapType == 'risk_movement') {
var ram = new GlideRecord("sn_risk_advanced_risk_assessment_methodology");
ram.get(ramID);
heatmapType = "inherent";
if (!ram.inherent_risk)
heatmapType = "residual";
}
var heatmapObject = {};
heatmapObject.xyCategories = this._getXYAxisForHeatmap(ramID, heatmapType);
heatmapObject.data = this._getRiskHeatmapData(heatmapType, includeColor, ramID, encodedQuery, limit);
return heatmapObject;
},
_getAdvancedRiskHeatMapRisksInfo: function(assessmentsInfo) {
var risksInfo = {};
var assessmentIds = Object.keys(assessmentsInfo);
if (assessmentIds) {
var assessment = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
assessment.addQuery("sys_id", "IN", assessmentIds);
assessment.query();
var riskToAssessmentMapping = {};
while (assessment.next()) {
var ratingDetails = this._getRiskRatingDetails(assessment);
var riskId = assessment.getValue("risk");
riskToAssessmentMapping[riskId] = {
assessmentId: assessment.getUniqueValue(),
ratingDetails: ratingDetails,
overallAppetiteStatus: assessment.getValue("overall_appetite_status")
};
}
var riskIds = Object.keys(riskToAssessmentMapping);
var risks = new GlideRecord("sn_risk_risk");
risks.addQuery("sys_id", "IN", riskIds);
risks.query();
var appetiteStatusColorList = new sn_risk_advanced.RiskAppetiteUtils().getAppetiteStatusColorsAndIconsWS();
while (risks.next()) {
var riskToAssessmentMap = riskToAssessmentMapping[risks.getUniqueValue()];
var assessmentId = riskToAssessmentMap.assessmentId;
var assessmentInfo = assessmentsInfo[assessmentId];
var riskData = this._getBasicRiskInfo(risks);
riskData.riskIndex = {
"label": riskData.indexNumber,
"size": "sm",
"level": "6",
"variant": 'teritiary'
};
riskData.assessmentId = assessmentId;
riskData.color = assessmentInfo.color;
riskData.x = assessmentInfo.x;
riskData.y = assessmentInfo.y;
riskData.ratingDetails = riskToAssessmentMap.ratingDetails;
if (!gs.nil(riskToAssessmentMap.overallAppetiteStatus)) {
riskData.iconConfiguration = appetiteStatusColorList[riskToAssessmentMap.overallAppetiteStatus];
}
risksInfo[assessmentId] = riskData;
}
}
return risksInfo;
},
_getBasicRiskInfo: function(risk) {
var riskData = {};
riskData.name = risk.getValue("name");
riskData.sysId = risk.getUniqueValue();
riskData.description = risk.getValue("description");
riskData.indexNumber = risk.getValue("number");
riskData.entity = risk.getDisplayValue("profile");
riskData.owner = risk.getDisplayValue("owner");
riskData.category = risk.getDisplayValue("category");
riskData.labelValues = [{
"label": gs.getMessage("Owner"),
"value": {
"type": "string",
"value": riskData.owner
}
},
{
"label": gs.getMessage("Entity"),
"value": {
"type": "string",
"value": riskData.entity,
"sysId": risk.getValue("profile")
}
},
{
"label": gs.getMessage("Category"),
"value": {
"type": "string",
"value": riskData.category ? riskData.category : "-"
}
}
];
return riskData;
},
_getHeatmapRiskDetails: function(riskId, assessmentId) {
var riskInfo = {};
var risk = new GlideRecord("sn_risk_risk");
if (risk.get(riskId)) {
riskInfo = this._getBasicRiskInfo(risk);
var riskStatement = risk.getValue('statement');
riskInfo.heirarchy = {};
if (riskStatement) {
riskInfo.heirarchy.data = new sn_grc_workspace.FetchHierarchyJSON().getHierarchyJSON('sn_risk_definition', riskStatement);
riskInfo.heirarchy.hasHierarchy = true;
} else {
riskInfo.heirarchy.hasHierarchy = false;
}
riskInfo.riskTrackingLabelValues = this._getRiskTrackingInfo(riskId);
var assessment = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
if (assessment.get(assessmentId)) {
riskInfo.ratingInfo = this._getRiskRatingDetails(assessment);
riskInfo.responseInfo = this._getRiskResponseDetails(riskId, assessment);
}
riskInfo.riskAppetiteInfo = this._getRiskAppetiteDetails(riskId);
}
return riskInfo;
},
_getRiskAppetiteDetails: function(riskId) {
var riskAppetiteInfo = new sn_risk_advanced.RiskAppetiteUtils()._getRiskAppetiteDetails(riskId);
return riskAppetiteInfo;
},
_getRiskRatingDetails: function(assessment) {
var inherentRating = assessment.getValue("summary_inherent_risk_score");
var residualRating = assessment.getValue("summary_residual_risk_score");
var targetRating = assessment.getValue("summary_target_risk_score");
var inherentColor = "";
var residualColor = "";
var targetColor = "";
var inherentBackgroundColor = "";
var residualBackgroundColor = "";
var targetBackgroundColor = "";
var hasInherentRating = false;
var hasResidualRating = false;
var hasTargetRating = false;
var riskColorStyle = "";
if (inherentRating) {
riskColorStyle = assessment.summary_inherent_risk.risk_color_style;
inherentColor = riskColorStyle.background_color + "";
inherentBackgroundColor = riskColorStyle.background_color_new + "";
hasInherentRating = true;
}
if (residualRating) {
riskColorStyle = assessment.summary_residual_risk.risk_color_style;
residualColor = riskColorStyle.background_color + "";
residualBackgroundColor = riskColorStyle.background_color_new + "";
hasResidualRating = true;
}
if (targetRating) {
riskColorStyle = assessment.summary_target_risk.risk_color_style;
targetColor = riskColorStyle.background_color + "";
targetBackgroundColor = riskColorStyle.background_color_new + "";
hasTargetRating = true;
}
return {
"inherent": {
"hasRating": hasInherentRating,
"rating": inherentRating,
"color": inherentColor,
"backgroundColor": inherentBackgroundColor
},
"residual": {
"hasRating": hasResidualRating,
"rating": residualRating,
"color": residualColor,
"backgroundColor": residualBackgroundColor
},
"target": {
"hasRating": hasTargetRating,
"rating": targetRating,
"color": targetColor,
"backgroundColor": targetBackgroundColor
}
};
},
_getRiskResponseDetails: function(riskId, assessment) {
var responseInfo = {};
responseInfo.hasResponseData = false;
if (assessment.getValue("risk_response"))
responseInfo.hasResponseData = true;
var responseTask = new GlideRecord("sn_risk_response_task");
responseTask.addQuery("risk_assessment_instance", assessment.getUniqueValue());
responseTask.query();
var responses = [];
var responseStates = [];
while (responseTask.next()) {
responses.push({
"type": "string",
"value": this._getResponseName(responseTask.getValue("sys_class_name"))
});
responseStates.push({
"type": "string",
"value": responseTask.getDisplayValue("state")
});
}
if (responseInfo.hasResponseData) {
responseInfo.responses = [{
"label": gs.getMessage("Risk response"),
"value": responses
}];
responseInfo.responseStates = [{
"label": gs.getMessage("Task status"),
"value": responseStates
}];
responseInfo.query = "risk_assessment_instance=" + assessment.getUniqueValue();
} else {
responseInfo.data = [{
"label": gs.getMessage("Risk response"),
"value": gs.getMessage("Not applicable")
}];
}
return responseInfo;
},
_getResponseName: function(responseType) {
switch (responseType) {
case "sn_risk_acceptance_task":
return gs.getMessage("Accept");
case "sn_risk_avoidance_task":
return gs.getMessage("Avoid");
case "sn_risk_mitigation_task":
return gs.getMessage("Mitigate");
case "sn_risk_transfer_task":
return gs.getMessage("Transfer");
default:
return gs.getMessage("Risk response task");
}
},
_getRiskTrackingInfo: function(riskId) {
var openRiskEvents = 0;
var openIssues = 0;
var kriBreached = 0;
var riskEventIds = [];
var gr = new GlideRecord("sn_risk_advanced_m2m_event_risk");
gr.addQuery("risk", riskId);
gr.addQuery("risk_event.state", "NOT IN", "3,4");
gr.query();
while (gr.next()) {
openRiskEvents++;
riskEventIds.push(gr.getValue("risk_event"));
}
gr = new GlideAggregate("sn_grc_m2m_issue_item");
gr.addQuery("sn_grc_item", riskId);
gr.addQuery("sn_grc_issue.state", "NOT IN", "3,4");
gr.addAggregate("COUNT");
gr.query();
if (gr.next()) {
openIssues = gr.getAggregate("COUNT");
}
var query = "";
if ((GlidePluginManager.isActive('sn_risk_advanced') || GlidePluginManager.isActive('com.sn_risk_advanced')) && (GlidePluginManager.isActive('com.sn_grc_metric') || GlidePluginManager.isActive('sn_grc_metric')) && gs.getProperty('sn_risk_advanced.migrate_to_metrics_from_indicators', false) == 'true') {
gr = new GlideAggregate("sn_grc_metric_metric");
gr.addEncodedQuery("active=true^metric_status=amber^ORmetric_status=red^riskIN" + riskId);
gr.addAggregate("COUNT");
gr.query();
if (gr.next()) {
kriBreached = gr.getAggregate("COUNT");
}
query = "active=true^metric_status=amber^ORmetric_status=red^riskIN" + riskId;
} else {
gr = new GlideAggregate("sn_grc_indicator");
gr.addQuery("item", riskId);
gr.addQuery("status", "2");
gr.addAggregate("COUNT");
gr.query();
if (gr.next()) {
kriBreached = gr.getAggregate("COUNT");
}
query = "item=" + riskId + "^status=2";
}
return {
"kriBreached": {
"value": kriBreached,
"query": query
},
"openIssues": {
"value": openIssues,
"query": "sn_grc_item=" + riskId + "^sn_grc_issue.stateNOT IN3,4"
},
"openRiskEvents": {
"value": openRiskEvents,
"query": "sys_idIN" + riskEventIds
}
};
},
clearHeatmapConfigOnFactorDeletion: function(asmmtTypeFactorm2m) {
this._clearHeatmapConfigOnFactorDeletion(asmmtTypeFactorm2m);
},
updateHeatmapFlag: function(asmtTypeFactorm2m) {
this._updateHeatmapFlag(asmtTypeFactorm2m);
},
_updateHeatmapFlag: function(asmtTypeFactorm2m) {
if (asmtTypeFactorm2m.sn_risk_advanced_assessment_type.sys_class_name == 'sn_risk_advanced_residual_assessment') {
var residual = new GlideRecord('sn_risk_advanced_residual_assessment');
residual.get(asmtTypeFactorm2m.sn_risk_advanced_assessment_type);
if (residual.getValue('calculate_based_on') == 'inherent_control' || (residual.getValue('calculate_based_on') == 'factor_responses' && residual.getValue('factors_same_as_inherent') == true))
return;
}
var m2m = new GlideAggregate('sn_risk_advanced_asmt_type_m2m_factor');
m2m.addQuery('sn_risk_advanced_assessment_type', asmtTypeFactorm2m.sn_risk_advanced_assessment_type);
m2m.addAggregate('COUNT');
m2m.query();
if (m2m.next()) {
if (m2m.getAggregate('COUNT') < 2) {
this._updateAssessmentType(asmtTypeFactorm2m.sn_risk_advanced_assessment_type, false);
} else if (m2m.getAggregate('COUNT') == 2 && asmtTypeFactorm2m.operation() == 'insert') {
this._updateAssessmentType(asmtTypeFactorm2m.sn_risk_advanced_assessment_type, true);
}
}
},
_updateAssessmentType: function(assessmentType, enableHeatmap) {
var asmt = new GlideRecord('sn_risk_advanced_assessment_type');
if (asmt.get(assessmentType)) {
asmt.setValue('enable_heatmap', enableHeatmap);
asmt.update();
}
},
_clearHeatmapConfigOnFactorDeletion: function(asmmtTypeFactorm2m) {
var assessmentType = new GlideRecord('sn_risk_advanced_assessment_type');
var isExist = assessmentType.get(asmmtTypeFactorm2m.sn_risk_advanced_assessment_type);
this._deleteOldHeatmapEntries(assessmentType);
if (isExist) {
if (assessmentType.x_axis_factor == asmmtTypeFactorm2m.sn_risk_advanced_factor) {
assessmentType.x_axis_factor = '';
} else if (assessmentType.y_axis_factor == asmmtTypeFactorm2m.sn_risk_advanced_factor) {
assessmentType.y_axis_factor = '';
}
assessmentType.update();
}
},
_createHeatmapColorMatrix: function(assessmentType) {
this._deleteOldHeatmapEntries(assessmentType);
var x_values = [],
y_values = [];
var sequence = 0;
var color_matrix = new GlideRecord('sn_risk_advanced_heatmap_color_matrix');
x_values = this._getFactorTransformationValues(assessmentType.x_axis_factor).criteriaValues;
y_values = this._getFactorTransformationValues(assessmentType.y_axis_factor).criteriaValues;
for (var i = 0; i < x_values.length; i++) {
for (var j = 0; j < y_values.length; j++) {
color_matrix.initialize();
color_matrix.assessment_type = assessmentType.getUniqueValue();
color_matrix.x_axis_factor_score = x_values[i];
color_matrix.y_axis_factor_score = y_values[j];
color_matrix.display_order = sequence++;
color_matrix.insert();
}
}
},
_deleteOldHeatmapEntries: function(assessmentType) {
var color_matrix = new GlideRecord('sn_risk_advanced_heatmap_color_matrix');
color_matrix.get('assessment_type', assessmentType.getUniqueValue());
color_matrix.deleteMultiple();
},
_getHeatmapFactor: function(assessmentType, dimension) {
var factorList = [];
var m2m = new GlideRecord('sn_risk_advanced_asmt_type_m2m_factor');
m2m.addQuery('sn_risk_advanced_assessment_type', assessmentType.getUniqueValue());
m2m.addQuery('sn_risk_advanced_factor.factor_contributionIN2,3');
m2m.query();
while (m2m.next()) {
factorList.push(m2m.sn_risk_advanced_factor + '');
}
var factorString = '';
if (factorList.length > 0) {
var factor = new GlideRecord('sn_risk_advanced_factor');
factor.addQuery('sys_id', 'IN', factorList);
factor.addQuery('transform_score', 'true');
factor.query();
while (factor.next()) {
factorString = factorString.concat(factor.getUniqueValue() + ',');
}
// choice factors are allowed to be selected even if no transformation criteria
var manual_factor = new GlideRecord('sn_risk_advanced_manual_factor');
manual_factor.addQuery('sys_id', 'IN', factorList);
manual_factor.addQuery('transform_score', 'false');
manual_factor.addQuery('user_response', '1');
manual_factor.query();
while (manual_factor.next()) {
factorString = factorString.concat(manual_factor.getUniqueValue() + ',');
}
if (dimension == 'x_axis')
return factorString.replace(current.y_axis_factor, '');
else
return factorString.replace(current.x_axis_factor, '');
}
return factorString;
},
_getRiskHeatmapXYAxisFromFactors: function(ramID, heatmapType) {
var xyCats = {};
var asmtTypeRecord, categories1 = [],
categories2 = [],
factorNames = [];
if (heatmapType == 'inherent')
asmtTypeRecord = new GlideRecord('sn_risk_advanced_inherent_assessment');
else if (heatmapType == 'residual')
asmtTypeRecord = new GlideRecord('sn_risk_advanced_residual_assessment');
else
asmtTypeRecord = new GlideRecord('sn_risk_advanced_target_assessment');
asmtTypeRecord.get('risk_assessment_methodology', ramID);
var xFactor = asmtTypeRecord.x_axis_factor;
var yFactor = asmtTypeRecord.y_axis_factor;
xyCats.xFactorName = asmtTypeRecord.x_axis_factor.name + '';
xyCats.yFactorName = asmtTypeRecord.y_axis_factor.name + '';
var criteriaData = this._getFactorTransformationValues(xFactor);
xyCats.xValues = criteriaData.criteriaValues.join(',');
xyCats.xValuesArray = criteriaData.criteriaInfo.join(',');
criteriaData = this._getFactorTransformationValues(yFactor);
xyCats.yValues = criteriaData.criteriaValues.join(',');
xyCats.yValuesArray = criteriaData.criteriaInfo.join(',');
xyCats.xFactorId = xFactor + '';
xyCats.yFactorId = yFactor + '';
return xyCats;
},
_getXYAxisForHeatmap: function(ramID, heatmapType) {
var assessmentTypeRecord;
if (heatmapType == 'inherent') {
assessmentTypeRecord = this._getAssessmentTypeRecord(ramID, 'sn_risk_advanced_inherent_assessment');
if (assessmentTypeRecord.getValue('enable_heatmap') == true) {
return this._getRiskHeatmapXYAxisFromFactors(ramID, heatmapType);
}
} else if (heatmapType == 'residual') {
assessmentTypeRecord = this._getAssessmentTypeRecord(ramID, 'sn_risk_advanced_residual_assessment');
if (assessmentTypeRecord.getValue('enable_heatmap') == true) {
if (assessmentTypeRecord.getValue('calculate_based_on') == 'factor_responses') {
return this._getRiskHeatmapXYAxisFromFactors(ramID, heatmapType);
} else {
return this._getRiskHeatmapXYAxisFromMatrix(ramID, assessmentTypeRecord);
}
}
} else if (heatmapType == 'target') {
assessmentTypeRecord = this._getAssessmentTypeRecord(ramID, 'sn_risk_advanced_target_assessment');
if (assessmentTypeRecord.getValue('enable_heatmap') == true) {
return this._getRiskHeatmapXYAxisFromFactors(ramID, heatmapType);
}
}
},
_getRiskHeatmapXYAxisFromMatrix: function(ramID, residualAsmt) {
var xyCats = {};
var inherent_criteria = [],
control_criteria = [],
inherent_criteria_values = [],
control_criteria_values = [];
xyCats.xFactorName = residualAsmt.x_dimension.getDisplayValue() + '';
xyCats.yFactorName = residualAsmt.y_dimension.getDisplayValue() + '';
var inherentRatingCriteria = this._getRiskRatingCriteriaEntries(ramID, 'sn_risk_advanced_inherent_assessment', 'rating');
inherent_criteria = inherentRatingCriteria.ratings.join(',');
inherent_criteria_values = inherentRatingCriteria.ratingsValues.join(',');
var controlRatingCriteria = this._getRiskRatingCriteriaEntries(ramID, 'sn_risk_advanced_control_assessment', 'rating');
control_criteria = controlRatingCriteria.ratings.join(',');
control_criteria_values = controlRatingCriteria.ratingsValues.join(',');
if (residualAsmt.getValue('x_dimension') == 'inherent_risk') {
xyCats.xValues = inherent_criteria;
xyCats.xValuesArray = inherent_criteria_values;
xyCats.yValues = control_criteria;
xyCats.yValuesArray = control_criteria_values;
} else {
xyCats.xValues = control_criteria;
xyCats.xValuesArray = control_criteria_values;
xyCats.yValues = inherent_criteria;
xyCats.yValuesArray = inherent_criteria_values;
}
return xyCats;
},
_getFactorTransformationValues: function(factorID) {
var criteriaData = {
criteriaValues: [],
criteriaInfo: [],
};
var fransformationCriteria = new GlideRecord('sn_risk_advanced_transformation_criteria');
fransformationCriteria.addQuery('factor', factorID);
fransformationCriteria.orderBy('score');
fransformationCriteria.query();
if (fransformationCriteria.hasNext()) {
while (fransformationCriteria.next()) {
criteriaData.criteriaValues.push(fransformationCriteria.getDisplayValue('display_text'));
criteriaData.criteriaInfo.push(fransformationCriteria.getValue('display_text'));
}
} else {
var choices = new GlideRecord('sn_risk_advanced_factor_choice');
choices.addQuery('factor', factorID);
choices.orderBy('score');
choices.query();
while (choices.next()) {
criteriaData.criteriaValues.push(choices.getDisplayValue('display_value'));
criteriaData.criteriaInfo.push(choices.getValue('display_value'));
}
}
return criteriaData;
},
_getDataUsingFactors: function(heatmapType, includeColor, ramID, encodedQuery, limit) {
var riskData = [];
var xFactor = '',
yFactor = '';
var xValues = [],
yValues = [];
var assessmentTypeRecord = '';
var asmtType = '';
var sysids = '';
if (ramID == '') {
return riskData;
}
if (heatmapType == 'inherent') {
assessmentTypeRecord = new GlideRecord('sn_risk_advanced_inherent_assessment');
asmtType = '1';
} else if (heatmapType == 'residual') {
assessmentTypeRecord = new GlideRecord('sn_risk_advanced_residual_assessment');
asmtType = '3';
} else if (heatmapType == 'target') {
assessmentTypeRecord = new GlideRecord('sn_risk_advanced_target_assessment');
asmtType = '4';
}
assessmentTypeRecord.get('risk_assessment_methodology', ramID);
if (assessmentTypeRecord.getValue('enable_heatmap') != true) {
return riskData;
}
xFactor = assessmentTypeRecord.x_axis_factor;
yFactor = assessmentTypeRecord.y_axis_factor;
var xFactorObject = this._getFactorTransformationSysIds(xFactor, 'score');
var yFactorObject = this._getFactorTransformationSysIds(yFactor, 'score');
xValues = xFactorObject.criterias;
yValues = yFactorObject.criterias;
var asmtArray = this._getAssessmentsWithQuery(encodedQuery, ramID, limit);
var xInstances = [],
yInstances = [];
for (var i = 0; i < xValues.length; i++) {
//xInstances = [];
xInstances = this._getRiskAssessmentInstances(ramID, asmtType, xFactor, xValues[i], '', xFactorObject.responseType, encodedQuery, asmtArray);
for (var j = 0; j < yValues.length; j++) {
yInstances = [];
if (xInstances.length > 0)
yInstances = this._getRiskAssessmentInstances(ramID, asmtType, yFactor, yValues[j], xInstances.join(','), yFactorObject.responseType, encodedQuery, asmtArray);
var count = yInstances.length;
var riskColor = this._getRiskColor(xValues[i], yValues[j], assessmentTypeRecord.getUniqueValue());
var riskUrl = 'sn_risk_advanced_risk_assessment_instance_list.do?sysparm_query=sys_idIN' + yInstances.join();
if (encodedQuery)
riskUrl += '%5E' + encodedQuery;
if (includeColor)
riskData.push({
x: i,
y: j,
value: count,
color: riskColor.color,
tooltipHeading: riskColor.colorName,
url: riskUrl,
listOfSysIds: yInstances.join()
});
else
riskData.push({
x: i,
y: j,
value: count,
url: riskUrl,
listOfSysIds: yInstances.join()
});
}
}
return riskData;
},
_getAssessmentsWithQuery: function(query, ramId, limit) {
var asmtArray = [];
if (query || limit != -1) {
var asmt = new GlideRecord('sn_risk_advanced_risk_assessment_instance');
asmt.addQuery('risk_assessment_methodology', ramId);
asmt.addQuery('state', '7');
asmt.addEncodedQuery(query);
if (limit != -1)
asmt.setLimit(limit);
asmt.query();
while (asmt.next()) {
asmtArray.push(asmt.getUniqueValue());
}
}
return asmtArray;
},
_getRiskAssessmentInstances: function(ramID, asmtType, factorID, criteria, sysIDArray, responseType, encodedQuery, asmtArray) {
//If there are no assessments with given encoded query no need to query responses further
if (encodedQuery != "" && asmtArray.length == 0)
return [];
var asmtInstances = [];
var responses = new GlideRecord('sn_risk_advanced_risk_assessment_instance_response');
if (encodedQuery != '') {
responses.addQuery('assessment_instance_id', 'IN', asmtArray);
}
responses.addQuery('assessment_instance_id.risk_assessment_methodology', ramID);
responses.addQuery('assessment_type', asmtType);
responses.addQuery('factor', factorID);
responses.addQuery('assessment_instance_id.state', '7');
if (responseType == 'transformationCriteria')
responses.addQuery('transformation_criteria', criteria.sys_id);
else
responses.addQuery('factor_response', criteria.score);
if (sysIDArray != '')
responses.addQuery('assessment_instance_id', 'IN', sysIDArray);
//adding this instead of addQuery because it is giving a garbage value sys_idNotValidnull instead of the actual query
responses.addEncodedQuery('assessment_instance_id.risk_assessment_methodology.state=2');
responses.query();
while (responses.next()) {
asmtInstances.push(responses.getValue('assessment_instance_id') + '');
}
return asmtInstances;
},
_getRiskHeatmapData: function(heatmapType, includeColor, ramID, encodedQuery, limit) {
if (heatmapType == 'residual') {
var residualRecord = this._getAssessmentTypeRecord(ramID, 'sn_risk_advanced_residual_assessment');
if (residualRecord.getValue('enable_heatmap') == true) {
if (residualRecord.getValue('calculate_based_on') == 'factor_responses')
return this._getDataUsingFactors(heatmapType, includeColor, ramID, encodedQuery, limit);
else
return this._getDataUsingMatrix(encodedQuery, includeColor, residualRecord, ramID, limit);
}
} else {
return this._getDataUsingFactors(heatmapType, includeColor, ramID, encodedQuery, limit);
}
},
_getFactorTransformationSysIds: function(factorID, orderByColumn) {
var criterias = [];
var responseType = '';
var value = '',
display_value = '';
var fransformationCriteria = new GlideRecord('sn_risk_advanced_transformation_criteria');
fransformationCriteria.addQuery('factor', factorID);
fransformationCriteria.orderBy(orderByColumn);
fransformationCriteria.query();
if (fransformationCriteria.hasNext()) {
responseType = 'transformationCriteria';
while (fransformationCriteria.next()) {
value = fransformationCriteria.getUniqueValue() + '';
display_value = fransformationCriteria.getValue('display_text');
criterias.push({
sys_id: value,
display_text: display_value
});
}
} else {
//Choice factor with no transformation criteria
responseType = 'choiceFactor';
var choices = new GlideRecord('sn_risk_advanced_factor_choice');
choices.addQuery('factor', factorID);
choices.orderBy(orderByColumn);
choices.query();
while (choices.next()) {
value = choices.getValue('score');
display_value = choices.getValue('display_value');
criterias.push({
score: value,
display_text: display_value
});
}
}
var response = {};
response.responseType = responseType;
response.criterias = criterias;
return response;
},
_getRiskColor: function(xFactor, yFactor, asmtTypeSysID) {
var colorSetting = new GlideRecord('sn_risk_advanced_heatmap_color_matrix');
colorSetting.addQuery('assessment_type', asmtTypeSysID);
colorSetting.addQuery('x_axis_factor_score', xFactor.display_text);
colorSetting.addQuery('y_axis_factor_score', yFactor.display_text);
colorSetting.setLimit(1);
colorSetting.query();
if (colorSetting.next()) {
var colorDetails = {
color: (colorSetting.risk_color_style.background_color + ''),
colorName: (colorSetting.risk_color_style.color_style + '')
};
return colorDetails;
}
return {
color: '#49A252'
};
},
_getDataUsingMatrix: function(encodedQuery, includeColor, residualRecord, ramID, limit) {
var riskData = [],
sysids = [];
var xCriteria = [],
yCriteria = [];
var matrixRecord;
if (residualRecord.getValue('x_dimension') == 'inherent_risk') {
xCriteria = this._getRiskRatingCriteriaEntries(ramID, 'sn_risk_advanced_inherent_assessment', 'sys_id').ratings;
yCriteria = this._getRiskRatingCriteriaEntries(ramID, 'sn_risk_advanced_control_assessment', 'sys_id').ratings;
} else {
xCriteria = this._getRiskRatingCriteriaEntries(ramID, 'sn_risk_advanced_control_assessment', 'sys_id').ratings;
yCriteria = this._getRiskRatingCriteriaEntries(ramID, 'sn_risk_advanced_inherent_assessment', 'sys_id').ratings;
}
var asmtArray = this._getAssessmentsWithQuery(encodedQuery, ramID, limit);
for (var i = 0; i < xCriteria.length; i++) {
for (var j = 0; j < yCriteria.length; j++) {
matrixRecord = this._getMatrixRecord(xCriteria[i], yCriteria[j], residualRecord);
sysids = this._getAssessmentCountForMatrix(ramID, residualRecord, xCriteria[i], yCriteria[j], encodedQuery, asmtArray);
var count = sysids.length;
var riskColor = matrixRecord.risk_color_style.background_color + '';
var riskColorName = matrixRecord.risk_color_style.color_style + '';
var riskUrl = 'sn_risk_advanced_risk_assessment_instance_list.do?sysparm_query=sys_idIN' + sysids.join();
if (encodedQuery)
riskUrl += '%5E' + encodedQuery;
if (includeColor)
riskData.push({
x: i,
y: j,
value: count,
color: riskColor,
tooltipHeading: riskColorName,
url: riskUrl,
listOfSysIds: sysids.join()
});
else
riskData.push({
x: i,
y: j,
value: count,
url: riskUrl,
listOfSysIds: sysids.join()
});
}
}
return riskData;
},
_getMatrixRecord: function(xRating, yRating, residualRecord) {
var inherentRating, controlRating;
if (residualRecord.getValue('x_dimension') == 'inherent_risk') {
inherentRating = xRating;
controlRating = yRating;
} else {
inherentRating = yRating;
controlRating = xRating;
}
var matrix = new GlideRecord('sn_risk_advanced_residual_assessment_matrix');
matrix.addQuery('sn_risk_advanced_assessment_type', residualRecord.getUniqueValue());
matrix.addQuery('inherent_risk', inherentRating);
matrix.addQuery('control_effectiveness', controlRating);
matrix.query();
matrix.next();
return matrix;
},
_getAssessmentCountForMatrix: function(ramID, residualRecord, xRating, yRating, encodedQuery, asmtArray) {
if (encodedQuery != '' && asmtArray.length == 0)
return [];
var sysIds = [];
var instances = new GlideRecord('sn_risk_advanced_risk_assessment_instance');
if (encodedQuery != '')
instances.addQuery('sys_id', 'IN', asmtArray);
instances.addQuery('risk_assessment_methodology', ramID);
instances.addQuery('state', '7');
if (residualRecord.getValue('x_dimension') == 'inherent_risk') {
instances.addQuery('summary_inherent_risk', xRating);
instances.addQuery('summary_control_effectiveness', yRating);
} else {
instances.addQuery('summary_inherent_risk', yRating);
instances.addQuery('summary_control_effectiveness', xRating);
}
instances.query();
while (instances.next()) {
sysIds.push(instances.getUniqueValue() + '');
}
return sysIds;
},
_getAssessmentTypeRecord: function(ramID, className) {
var assessmentType = new GlideRecord(className);
assessmentType.addQuery('risk_assessment_methodology', ramID);
assessmentType.addQuery('state', "2");
assessmentType.query();
assessmentType.next();
return assessmentType;
},
_getRiskRatingCriteriaEntries: function(ramID, className, columnToGet) {
return this._getRiskRatingCriteria(this._getAssessmentTypeRecord(ramID, className), columnToGet);
},
_getRiskRatingCriteria: function(assessmentType, columnToGet) {
var ratingsData = {
ratings: [],
ratingsValues: []
};
var ratingCriteria = new GlideRecord('sn_risk_advanced_rating_criteria');
ratingCriteria.addQuery('assessment_type', assessmentType.getUniqueValue());
if (assessmentType.sys_class_name == 'sn_risk_advanced_inherent_assessment')
ratingCriteria.orderBy('lower_interval');
else
ratingCriteria.orderByDesc('lower_interval');
ratingCriteria.query();
while (ratingCriteria.next()) {
ratingsData.ratings.push(ratingCriteria.getDisplayValue(columnToGet));
ratingsData.ratingsValues.push(ratingCriteria.getValue(columnToGet));
}
return ratingsData;
},
syncHeatmapColors: function(colorMatrixRecord) {
this._syncHeatmapColors(colorMatrixRecord);
},
_syncHeatmapColors: function(colorMatrixRecord) {
var residual = new GlideRecord('sn_risk_advanced_residual_assessment');
var exists = residual.get('risk_assessment_methodology', colorMatrixRecord.assessment_type.risk_assessment_methodology);
if (exists && residual.getValue('calculate_based_on') == 'factor_responses' && residual.getValue('factors_same_as_inherent') == true && residual.getValue('enable_heatmap') == true) {
this._updateResidualColorMatrix(residual, colorMatrixRecord);
}
},
copyHeatmapColors: function(toAsmtGr, fromAsmtType) {
this._copyHeatmapColors(toAsmtGr, fromAsmtType);
},
_copyHeatmapColors: function(toAsmtGr, fromAsmtType) {
var asmt = new GlideRecord(fromAsmtType);
var exists = asmt.get('risk_assessment_methodology', toAsmtGr.risk_assessment_methodology);
if (exists && asmt.getValue('enable_heatmap') == true) {
if (this._isColorMatrixPresentForAssmt(toAsmtGr) == false)
this._createHeatmapColorMatrix(toAsmtGr);
var colorMatrix = new GlideRecord('sn_risk_advanced_heatmap_color_matrix');
colorMatrix.addQuery('assessment_type', asmt.getUniqueValue());
colorMatrix.query();
while (colorMatrix.next()) {
this._updateResidualColorMatrix(toAsmtGr, colorMatrix);
}
}
},
_updateResidualColorMatrix: function(toAsmtGr, colorMatrixRecord) {
var colorMatrix = new GlideRecord('sn_risk_advanced_heatmap_color_matrix');
colorMatrix.addQuery('assessment_type', toAsmtGr.getUniqueValue());
colorMatrix.addQuery('x_axis_factor_score', colorMatrixRecord.x_axis_factor_score);
colorMatrix.addQuery('y_axis_factor_score', colorMatrixRecord.y_axis_factor_score);
colorMatrix.query();
if (colorMatrix.next()) {
colorMatrix.setValue('risk_color_style', colorMatrixRecord.risk_color_style);
colorMatrix.update();
}
},
_isColorMatrixPresentForAssmt: function(residualAsmt) {
var colorMatrix = new GlideRecord('sn_risk_advanced_heatmap_color_matrix');
colorMatrix.addQuery('assessment_type', residualAsmt.getUniqueValue());
colorMatrix.setLimit(1);
colorMatrix.query();
return colorMatrix.hasNext();
},
type: 'RiskAdvancedHeatmapBase'
};
Sys ID
14b059c4535300105f9fddeeff7b1283