Name
sn_risk.RiskResponseBase
Description
No description available
Script
var RiskResponseBase = Class.create();
RiskResponseBase.prototype = {
initialize: function() {},
canAccessButtons: function(responseTaskObject) {
return this._canAccessButtons(responseTaskObject);
},
notifyRiskManager: function(responseTaskId, responseTaskTable) {
return this._notifyRiskManager(responseTaskId, responseTaskTable);
},
setRiskState: function(riskId, state) {
return this._setRiskState(riskId, state);
},
reopenResponseTaskUI: function(risk) {
return this._reopenResponseTaskUI(risk);
},
reopenResponseTask: function(table, risk) {
return this._reopenResponseTask(table, risk);
},
cancelOpenResponseTasks: function(riskId, taskType, riskAssessmentInstance) {
return this._cancelOpenResponseTasks(riskId, taskType, riskAssessmentInstance);
},
clearRiskResponse: function(riskId) {
return this._clearRiskResponse(riskId);
},
isRiskAssociatedToBeingAssessedPER: function(riskId) {
return this._isRiskAssociatedToBeingAssessedPER(riskId);
},
isControlAssociatedToBeingAssessedPER: function(controlId) {
return this._isControlAssociatedToBeingAssessedPER(controlId);
},
isAnyPERRiskAssociatedToOtherAssessingPER: function(perId) {
return this._isAnyPERRiskAssociatedToOtherAssessingPER(perId);
},
isAnyRiskAssociatedToPER: function(perId) {
return this._isAnyRiskAssociatedToPER(perId);
},
clearResponseInfo: function(risk) {
return this._clearResponseInfo(risk);
},
saveRiskScoring: function(riskId) {
return this._saveRiskScoring(riskId);
},
restoreRiskScoring: function(riskId) {
return this._restoreRiskScoring(riskId);
},
hasAccessToRiskResponseTask: function(responseTaskId, responseTaskTable) {
return this._hasAccessToRiskResponseTask(responseTaskId, responseTaskTable);
},
deleteSimulatedRiskResponseTasks: function(assessmentIds) {
return this._deleteSimulatedRiskResponseTasks(assessmentIds);
},
_canAccessButtons: function(responseTaskObject) {
return ((responseTaskObject.sys_class_name == 'sn_risk_advanced_mitigation_task' && (responseTaskObject.risk_event.assigned_to == gs.getUserID() || (gs.getUser().getMyGroups().indexOf(responseTaskObject.risk_event.assignment_group + '') > -1))) || responseTaskObject.risk.owner == gs.getUserID());
},
_reopenResponseTaskUI: function(risk) {
risk.state = 'respond';
risk.update();
// Reopen the latest response task
var response = risk.response + '';
var responseMap = {
'Transfer': 'sn_risk_transfer_task',
'Accept': 'sn_risk_acceptance_task',
'Mitigate': 'sn_risk_mitigation_task',
'Avoid': 'sn_risk_avoidance_task',
};
return this._reopenResponseTask(responseMap[response], risk);
},
_clearResponseInfo: function(risk) {
risk.response = '';
risk.acceptance_end_date = '';
risk.plan = '';
risk.avoidance_steps = '';
risk.insurance_contract = '';
risk.vendor = '';
risk.acceptance_state = '';
risk.justification = '';
risk.update();
},
_restoreRiskScoring: function(riskId) {
var risk = new GlideRecord('sn_risk_risk');
risk.addQuery('sys_id', riskId);
risk.query();
if (risk.next()) {
risk.setValue('response', risk.getValue('original_response'));
risk.setValue('score', risk.getValue('original_score'));
risk.setValue('residual_score', risk.getValue('original_residual_score'));
risk.setValue('calculated_score', risk.getValue('original_calculated_score'));
risk.setValue('inherent_sle', risk.original_inherent_sle.getCurrencyString());
risk.setValue('residual_sle', risk.original_residual_sle.getCurrencyString());
risk.setValue('inherent_ale', risk.original_inherent_ale.getCurrencyString());
risk.setValue('residual_ale', risk.original_residual_ale.getCurrencyString());
risk.setValue('calculated_ale', risk.original_calculated_ale.getCurrencyString());
risk.setValue('inherent_aro', risk.getValue('original_inherent_aro'));
risk.setValue('residual_aro', risk.getValue('original_residual_aro'));
risk.setValue('original_response', '');
risk.setValue('original_score', '');
risk.setValue('original_residual_score', '');
risk.setValue('original_calculated_score', '');
risk.setValue('original_inherent_sle', '');
risk.setValue('original_residual_sle', '');
risk.setValue('original_inherent_ale', '');
risk.setValue('original_residual_ale', '');
risk.setValue('original_calculated_ale', '');
risk.setValue('original_inherent_aro', '');
risk.setValue('original_residual_aro', '');
risk.update();
}
},
_saveRiskScoring: function(riskId) {
var risk = new GlideRecord('sn_risk_risk');
risk.addQuery('sys_id', riskId);
risk.query();
if (risk.next()) {
risk.setValue('original_response', risk.getValue('response'));
risk.setValue('original_score', risk.getValue('score'));
risk.setValue('original_residual_score', risk.getValue('residual_score'));
risk.setValue('original_calculated_score', risk.getValue('calculated_score'));
risk.setValue('original_inherent_sle', risk.inherent_sle.getCurrencyString());
risk.setValue('original_residual_sle', risk.residual_sle.getCurrencyString());
risk.setValue('original_inherent_ale', risk.inherent_ale.getCurrencyString());
risk.setValue('original_residual_ale', risk.residual_ale.getCurrencyString());
risk.setValue('original_calculated_ale', risk.calculated_ale.getCurrencyString());
risk.setValue('original_inherent_aro', risk.getValue('inherent_aro'));
risk.setValue('original_residual_aro', risk.getValue('residual_aro'));
risk.setValue('response', '');
risk.update();
}
},
_isRiskAssociatedToBeingAssessedPER: function(riskId) {
var m2mRiskToCtrl = new GlideRecord('sn_risk_m2m_risk_control');
m2mRiskToCtrl.addQuery("sn_risk_risk", riskId);
m2mRiskToCtrl.addQuery("sn_compliance_control.active", true);
m2mRiskToCtrl.query();
while (m2mRiskToCtrl.next()) {
if (this._isControlAssociatedToBeingAssessedPER(m2mRiskToCtrl.sn_compliance_control + ''))
return true;
}
return false;
},
_isAnyRiskAssociatedToPER: function(perId) {
var perToCtrl = new GlideRecord('sn_compliance_m2m_policy_exception_control');
perToCtrl.addQuery('policy_exception', perId);
perToCtrl.query();
while (perToCtrl.next()) {
var m2mRiskToCtrl = new GlideRecord('sn_risk_m2m_risk_control');
m2mRiskToCtrl.addQuery("sn_compliance_control", perToCtrl.control + '');
m2mRiskToCtrl.addQuery("sn_risk_risk.active", true);
m2mRiskToCtrl.query();
if (m2mRiskToCtrl.next()) {
return true;
}
}
return false;
},
_isAnyPERRiskAssociatedToOtherAssessingPER: function(perId) {
var riskArray = [];
var displayRiskId;
var displayRiskNumber;
var displayPER;
var perToCtrl = new GlideRecord('sn_compliance_m2m_policy_exception_control');
perToCtrl.addQuery('policy_exception', perId);
var jq = perToCtrl.addJoinQuery("sn_risk_m2m_risk_control", "control", "sn_compliance_control");
jq.addCondition("sn_risk_risk.active", true);
perToCtrl.query();
while (perToCtrl.next()) {
var controlId = perToCtrl.control + '';
var m2mRiskToCtrl = new GlideRecord('sn_risk_m2m_risk_control');
m2mRiskToCtrl.addQuery("sn_compliance_control", controlId);
m2mRiskToCtrl.addQuery("sn_risk_risk.active", true);
m2mRiskToCtrl.query();
while (m2mRiskToCtrl.next()) {
var riskId = m2mRiskToCtrl.getValue('sn_risk_risk');
var riskNumber = m2mRiskToCtrl.sn_risk_risk.number + '';
var gr = new GlideRecord('sn_risk_m2m_risk_control');
gr.addQuery("sn_risk_risk", riskId);
gr.addQuery("sn_compliance_control", "!=", controlId);
gr.query();
while (gr.next()) {
var perName = this._getPERNameWhenItsControlIsAssessed(gr.getValue('sn_compliance_control'), perId);
if (perName) {
displayRiskId = riskId;
displayRiskNumber = m2mRiskToCtrl.getDisplayValue('sn_risk_risk.number');
displayPER = perName;
riskArray.push(riskNumber);
break;
}
}
}
}
if (riskArray.length > 0)
return gs.getMessage('The risk <a id="permalink" class="linked" style="color:#666666;" href="sn_risk_risk.do?sys_id={0}" target="_blank">{1}</a> is being assessed for another policy exception {2}. It will be available for assessment once that policy exception request has been processed. Here is a complete <a id="permalink" class="linked" style="color:#666666;" href="/sn_risk_risk_list.do?sysparm_query=numberIN{3}" target="_blank">list of risks</a> being assessed at this time.', [displayRiskId, displayRiskNumber, displayPER, riskArray.toString()]);
return '';
},
_getPERNameWhenItsControlIsAssessed: function(controlId, excludedPerId) {
var perToCtrl = new GlideRecord('sn_compliance_m2m_policy_exception_control');
perToCtrl.addQuery('policy_exception', "!=", excludedPerId);
perToCtrl.addQuery('policy_exception.state', "IN", '10, 12');
perToCtrl.addQuery('control', controlId);
perToCtrl.query();
if (perToCtrl.next())
return gs.getMessage('<a class="linked" style="color:#666666;" href="sn_compliance_policy_exception.do?sys_id={0}" target="_blank">{1}</a>', [perToCtrl.getValue('policy_exception'), perToCtrl.getDisplayValue('policy_exception.number')]);
return '';
},
_isControlAssociatedToBeingAssessedPER: function(controlId) {
var perToCtrl = new GlideRecord('sn_compliance_m2m_policy_exception_control');
perToCtrl.addQuery('policy_exception.state', '10');
perToCtrl.addQuery('control', controlId);
perToCtrl.query();
return perToCtrl.next();
},
_clearRiskResponse: function(riskId) {
var r = new GlideRecord('sn_risk_risk');
if (!r.get(riskId))
return;
r.response = '';
r.update();
},
_cancelOpenResponseTasks: function(riskId, taskType, riskAssessmentInstance) {
var rt = new GlideRecord('sn_risk_response_task');
rt.addActiveQuery();
rt.addQuery('risk', riskId);
if (taskType) {
if (taskType == "Accept") {
rt.addQuery('sys_class_name', "sn_risk_acceptance_task");
} else if (taskType == "Transfer") {
rt.addQuery('sys_class_name', "sn_risk_transfer_task");
} else if (taskType == "Mitigate") {
rt.addQuery('sys_class_name', "sn_risk_mitigation_task");
} else if (taskType == "Avoid") {
rt.addQuery('sys_class_name', "sn_risk_avoidance_task");
}
}
if (rt.isValidField('risk_assessment_instance'))
rt.addQuery('risk_assessment_instance', riskAssessmentInstance);
rt.query();
var hasOpenTasks = rt.getRowCount() > 0;
while (rt.next()) {
rt.state = '7';
rt.update();
}
return hasOpenTasks;
},
_reopenResponseTask: function(table, risk) {
var t = new GlideRecord(table);
t.orderByDesc("sys_updated_on");
t.addQuery('risk', risk.getUniqueValue());
t.query();
if (t.next()) {
t.state = '2'; // WIP
if (t.update())
gs.addInfoMessage(gs.getMessage('Move the response task back to Work In Progress'));
}
},
_setRiskState: function(riskId, state) {
var r = new GlideRecord('sn_risk_risk');
if (!r.get(riskId))
return;
r.state = state;
r.update();
},
_notifyRiskManager: function(responseTaskId, responseTaskTable) {
// Get risk managers
var riskManagers = [];
var user = new GlideRecord('sys_user_has_role');
user.addQuery('role', '10812082cb200200829cf865734c9cba');
user.addQuery('state', 'active');
user.query();
while (user.next()) {
riskManagers.push(user.user + '');
}
var responseTask = new GlideRecord(responseTaskTable);
if (responseTask.get(responseTaskId))
gs.eventQueue("sn_risk.response_task_review", responseTask, riskManagers.join(','), responseTaskTable);
},
_hasAccessToRiskResponseTask: function(responseTaskId, responseTaskTable) {
var responseTask = new GlideRecord(responseTaskTable);
if (responseTask.get(responseTaskId)) {
return (gs.getUserID() == responseTask.risk.owner) || (gs.getUserID() == responseTask.risk.owner.manager);
}
return false;
},
_deleteSimulatedRiskResponseTasks: function(assessmentIds) {
var responseTasks = new GlideRecord('sn_risk_response_task');
responseTasks.addQuery('risk_assessment_instance.sys_id', 'IN', assessmentIds);
responseTasks.query();
responseTasks.setWorkflow(false);
responseTasks.deleteMultiple();
return;
},
type: 'RiskResponseBase'
};
Sys ID
6798e26ad7200300bbc783e80e6103c2