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

Offical Documentation

Official Docs: