Name
sn_risk_advanced.RiskAssessmentScopeUtilsBase
Description
No description available
Script
var RiskAssessmentScopeUtilsBase = Class.create();
RiskAssessmentScopeUtilsBase.prototype = {
initialize: function() {},
checkIfAnyAssessments: function(asmtScope) {
return this._checkIfAnyAssessments(asmtScope);
},
filterEntitiesByClass: function(ramId) {
return this._filterEntitiesByClass(ramId);
},
getEntitiesAssociatedToRAM: function(asmtMethodology) {
return this._getEntitiesAssociatedToRAM(asmtMethodology);
},
createRiskAssessmentScope: function(asmtMethodology, entityIds, schedulerId) {
return this._createRiskAssessmentScope(asmtMethodology, entityIds, schedulerId);
},
bulkTriggerAssessments: function(schedulerId) {
this._bulkTriggerAssessments(schedulerId);
},
deleteAssessableEntities: function(schedulerId) {
this._deleteAssessableEntities(schedulerId);
},
validateScheduler: function(schedulerId) {
return this._validateScheduler(schedulerId);
},
executeFutureDatedSchedulers: function() {
this._executeFutureDatedSchedulers();
},
bulkTriggerAssessmentsFromPlaybook: function(schedulerId) {
return this._bulkTriggerAssessmentsFromPlaybook(schedulerId);
},
getDaysToInitiate: function(scheduler) {
return this._getDaysToInitiate(scheduler);
},
_bulkTriggerAssessmentsFromPlaybook: function(scheduler) {
var message = "";
scheduler.state = '3';
scheduler.update();
var initiationLaterEnabled = scheduler.getValue('initiate_later');
if (initiationLaterEnabled == '1') {
var daysToInitiate = this._getDaysToInitiate(scheduler);
var initiatedDate = scheduler.getDisplayValue('initiation_date');
var daysMessage = daysToInitiate > 1 ? gs.getMessage('days from now on {0}', initiatedDate) : gs.getMessage('day from now on {0}', initiatedDate);
message = gs.getMessage('The assessments will bescheduled to initiate {0} {1}', [daysToInitiate, daysMessage]);
} else {
message = gs.getMessage('Risk assessments are being initiated for all mapped risks of the selected entities. This may take a while.');
gs.eventQueue('sn_risk_advanced.bulk_initiate_asmts', null, scheduler.getUniqueValue());
}
return message;
},
_getDaysToInitiate: function(scheduler) {
var today = new GlideDateTime();
var initiationDate = new GlideDateTime(scheduler.initiation_date);
var dur = new GlideDuration(GlideDateTime.subtract(today, initiationDate));
return dur.getRoundedDayPart();
},
_executeFutureDatedSchedulers: function() {
var today = new GlideDate();
var schedulers = new GlideRecord('sn_risk_advanced_assessment_scheduler');
schedulers.addQuery('initiate_later', 'true');
schedulers.addQuery('initiation_date', '<=', today);
schedulers.addQuery('state', '3');
schedulers.query();
while (schedulers.next()) {
this._bulkTriggerAssessments(schedulers.getUniqueValue());
}
},
_validateScheduler: function(schedulerId) {
var scope = new GlideAggregate('sn_risk_advanced_risk_assessment_scope');
scope.addQuery('risk_assessment_scheduler', schedulerId);
scope.addAggregate('COUNT');
scope.query();
if (scope.next()) {
if (scope.getAggregate('COUNT') > 0)
return true;
}
gs.addErrorMessage(gs.getMessage('Associate at least one entity to finalise the scheduler.'));
return false;
},
_deleteAssessableEntities: function(schedulerId) {
var scope = new GlideRecord('sn_risk_advanced_risk_assessment_scope');
scope.addQuery('risk_assessment_scheduler', schedulerId);
scope.query();
while (scope.next()) {
if (this._hasActiveAssessments(scope)) {
scope.setValue('risk_assessment_scheduler', '');
scope.update();
} else {
scope.deleteRecord();
}
}
},
_hasActiveAssessments: function(asmtScope) {
var instances = new GlideRecord('sn_risk_advanced_risk_assessment_instance');
instances.addQuery('state', 'NOT IN', '0');
instances.addQuery('assessment_scope', asmtScope.getUniqueValue());
instances.setLimit(1);
instances.query();
return instances.hasNext();
},
_bulkTriggerAssessments: function(schedulerId) {
this._copySchedulerSettingsToScope(schedulerId);
var scope = new GlideRecord('sn_risk_advanced_risk_assessment_scope');
scope.addQuery('risk_assessment_scheduler', schedulerId);
scope.query();
while (scope.next()) {
var riskIds = this._getRiskAssociatedToEntity(scope.getValue('entity'));
new sn_risk_advanced.RiskAssessmentUtils().createAssessmentInstanceFromRisks(riskIds, scope.getUniqueValue(), scope.getValue('entity'));
new sn_risk_advanced.RiskAssessmentUtils().markAssess(null, scope.getUniqueValue());
}
this._updateSchedulerState(schedulerId, '5');
},
_updateSchedulerState: function(schedulerId, state) {
var scheduler = new GlideRecord('sn_risk_advanced_assessment_scheduler');
if (scheduler.get(schedulerId)) {
scheduler.setValue('state', state);
scheduler.update();
}
},
_getRiskAssociatedToEntity: function(entity) {
var riskIds = [];
var risks = new GlideRecord('sn_risk_risk');
risks.addQuery('profile', entity);
risks.addQuery('state', '!=', 'retired');
risks.query();
while (risks.next()) {
riskIds.push(risks.getUniqueValue());
}
return riskIds;
},
_copySchedulerSettingsToScope: function(schedulerId) {
var columnsToCopy = ['assessor_type', 'assessor', 'assessor_group', 'approver_type', 'approver', 'approver_group', 'days_to_overdue', 'reassessment_frequency'];
var schedulerRec = new GlideRecord('sn_risk_advanced_assessment_scheduler');
if (schedulerRec.get(schedulerId)) {
var scope = new GlideRecord('sn_risk_advanced_risk_assessment_scope');
scope.addQuery('risk_assessment_scheduler', schedulerId);
scope.query();
for (var i = 0; i < columnsToCopy.length; i++) {
scope.setValue(columnsToCopy[i], schedulerRec.getValue(columnsToCopy[i]));
}
scope.setValue("state", "5");
scope.updateMultiple();
}
},
_createRiskAssessmentScope: function(asmtMethodology, entityIds, schedulerId) {
var responseObj = {
scopesCreated: 0,
failedScopeCount: 0
};
var entities = entityIds.split(',');
if (entities.length == 0) {
return responseObj;
}
for (var i = 0; i < entities.length; i++) {
if (entities[i] != '') {
this._createScopeObject(entities[i], asmtMethodology, schedulerId, responseObj);
}
}
return responseObj;
},
_createScopeObject: function(entity, asmtMethodology, asmtScheduler, responseObj) {
var scope = new GlideRecord('sn_risk_advanced_risk_assessment_scope');
scope.setValue('risk_assessment_methodology', asmtMethodology);
scope.setValue('risk_assessment_scheduler', asmtScheduler);
scope.setValue('entity', entity);
if (gs.nil(scope.insert())) {
responseObj.failedScopeCount++;
} else {
responseObj.scopesCreated++;
}
},
_getEntitiesAssociatedToRAM: function(asmtMethodology) {
var entities = [];
var riskAsmtScope = new GlideRecord('sn_risk_advanced_risk_assessment_scope');
riskAsmtScope.addQuery('risk_assessment_methodology', asmtMethodology);
riskAsmtScope.query();
while (riskAsmtScope.next()) {
entities.push(riskAsmtScope.getValue('entity'));
}
return JSON.stringify(entities);
},
_checkIfAnyAssessments: function(asmtScope) {
// To delete assessment scope, it should not have any assessment instances not in draft
var gr = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
gr.addQuery('assessment_scope', asmtScope);
gr.addQuery('state', '!=', '0');
gr.setLimit(1);
gr.query();
gr.next();
if (gr.getRowCount() == 1) {
return false;
} else {
return true;
}
},
_filterEntitiesByClass: function(ramId) {
var ram = new GlideRecord("sn_risk_advanced_risk_assessment_methodology");
ram.get(ramId);
var entityClasses = ram.getValue("entity_classes");
var scope = new GlideRecord("sn_risk_advanced_risk_assessment_scope");
scope.addQuery("risk_assessment_methodology", ramId);
scope.query();
var profileList = [];
while (scope.next()) {
profileList.push(scope.getValue("entity"));
}
profileList = profileList.join(",");
var gr = new GlideRecord('sn_grc_profile');
gr.addQuery('profile_class', 'IN', entityClasses);
gr.addQuery('sys_id', "NOT IN", profileList);
if (!gs.getUser().hasRole("sn_risk.manager"))
gr.addQuery('owned_by', gs.getUserID());
gr.addActiveQuery();
gr.addQuery();
return gr.getEncodedQuery();
},
type: 'RiskAssessmentScopeUtilsBase'
};
Sys ID
57bd13ac776100102a272f589a106161