Name
global.CertificationUtilities
Description
Functions for Certification actions
Script
var CertificationUtilities = Class.create();
CertificationUtilities.prototype = {
initialize: function() {
},
rollupTaskState: function(certTask) {
var instance = new GlideRecord("cert_instance");
instance.get(certTask.cert_instance);
var task = new GlideRecord("cert_task");
task.addQuery("cert_instance", certTask.cert_instance);
task.query();
var closed_complete = 0;
var closed_incomplete = 0;
var cancelled = 0;
var wip = 0;
while (task.next()) {
if (task.state == 3)
closed_complete++;
else if ( task.state == 4)
closed_incomplete++;
else if (task.state == 7)
cancelled++;
else
return;
// found work in progress, returning
}
if (closed_incomplete > 0)
instance.state = 4;
else if (closed_incomplete == 0 && closed_complete > 0) {
instance.state = 3;
if (instance.completed.nil())
instance.completed = gs.nowDateTime();
}
else if (closed_incomplete == 0 && closed_complete == 0)
instance.state = 7;
instance.update();
},
cleanupInvalidDataCertElements: function(task) {
// Get the records that are being certified
var record = this._getCertifyingRecords(task);
// Collect the sys ids
var sysIds = [];
while(record.next())
sysIds.push(record.getUniqueValue());
// Get all of the certification elements that
// are certifying a record with an id that is not
// in the collection (in other words, the record
// has been deleted, but the cert element remains)
var elem = new GlideRecord('cert_element');
elem.addQuery('cert_task', task.sys_id + '');
elem.addQuery('sys_id', '!=', task.sys_id + '');
elem.addQuery('id', 'NOT IN', sysIds);
elem.query();
// Delete cert elements for invalid records and archived records. Archived record table name starts with "ar_"
while(elem.next()) {
var doc = new GlideRecord(elem.table + '');
if(!doc.get(elem.id + '') || elem.table.toLowerCase().startsWith("ar_")){
elem.deleteRecord();
}
}
var total = this._getCertificationTotal(task);
var pending = this._getCertificationPending(task);
if (total == 0)
total = pending;
if (total == 0)
task.percent_complete = 0;
else
task.percent_complete = (1 - (pending / total)) * 100;
if (pending == 0) {
task.state = 3; // Closed Complete
task.active = false;
gs.addInfoMessage(gs.getMessage('Closing Certification Task: {0} - all Certification Elements complete', task.getDisplayValue()));
} else {
task.state = 2; // Work in Progress
task.active = true;
}
task.update();
},
_getCertificationTotal: function(task) {
var ga = new GlideAggregate("cert_element");
ga.addQuery("cert_task", task.sys_id + '');
ga.addAggregate("COUNT");
ga.query();
var total = 0;
if (ga.next())
total = ga.getAggregate("COUNT");
return total;
},
_getCertificationPending: function(task) {
var ga = new GlideAggregate("cert_element");
ga.addQuery("cert_task", task.sys_id + '');
ga.addQuery("state", "Pending");
ga.addAggregate("COUNT");
ga.query();
var pending = 0;
if (ga.next())
pending = ga.getAggregate("COUNT");
return pending;
},
_getCertifyingRecords: function(task) {
var joinTable = task.cert_schedule.table + '';
var joinQuery = '';
if (task.cert_schedule.filter + '' != '')
joinQuery = task.cert_schedule.filter.filter_condition + '';
var record = new GlideRecord(joinTable);
if (joinQuery != '')
record.addQuery(joinQuery);
record.query();
return record;
},
type: 'CertificationUtilities'
};
Sys ID
c09c69034701300042bd757f2ede27af