Name
global.AssetReclamationUtil
Description
No description available
Script
/* global sn_ent */
var AssetReclamationUtil = Class.create();
AssetReclamationUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {
IS_HAMP_ACTIVE: GlidePluginManager.isActive('com.sn_hamp'),
IS_SAMP_ACTIVE: GlidePluginManager.isActive('com.snc.samp'),
IS_EAM_ACTIVE: GlidePluginManager.isActive('com.sn_eam'),
IS_ENT_ACTIVE: GlidePluginManager.isActive('com.sn_ent'),
filterRequestedForUsers: function(role, sysId) {
if (role.toString() === 'manager') {
return 'manager=' + sysId;
}
return '';
},
getAssetsAssignedTo: function() {
var requestedFor = this.getParameter('sysparm_userVal');
var assetsGr = new GlideRecord('alm_asset');
assetsGr.addEncodedQuery('assigned_to=' + requestedFor + '^(sys_class_name=alm_consumable^ORsys_class_name=alm_hardware)^sys_idNOT IN' + this.getAssetsToExclude(requestedFor));
var listToPopulate = [];
assetsGr.query();
while (assetsGr.next()) {
listToPopulate.push(assetsGr.getUniqueValue());
}
return listToPopulate.toString();
},
closeAssetReclamationRequest: function(assetReclamationRequestID) {
var reclaimLinesClosed = this.checkHAMLinesClosed(assetReclamationRequestID);
if (reclaimLinesClosed) {
reclaimLinesClosed = this.checkSAMLinesClosed(assetReclamationRequestID);
}
if (reclaimLinesClosed) {
reclaimLinesClosed = this.checkEAMLinesClosed(assetReclamationRequestID);
}
if (reclaimLinesClosed) {
this.updateAssetReclaimRequestState(assetReclamationRequestID);
}
},
checkHAMLinesClosed: function(assetReclamationRequestID) {
if (!this.IS_HAMP_ACTIVE) {
return true;
}
var hamLineQuery = new global.GlideQuery('sn_hamp_asset_reclaim_line')
.where('asset_reclaim_request', assetReclamationRequestID);
var totalHamLines = hamLineQuery.count();
var totalHamLinesClosed = hamLineQuery.where('stage', 'IN', ['closed_complete', 'closed_skipped']).count();
if (totalHamLines === totalHamLinesClosed) {
return true;
}
return false;
},
checkSAMLinesClosed: function(assetReclamationRequestID) {
if (!this.IS_SAMP_ACTIVE) {
return true;
}
var samLineQuery = new global.GlideQuery('samp_asset_reclaim_line')
.where('asset_reclaim_request', assetReclamationRequestID);
var totalSAMLines = samLineQuery.count();
var totalSAMLinesClosed = samLineQuery.where('state', 'IN', ['completed', 'canceled', 'failed']).count();
if (totalSAMLines === totalSAMLinesClosed) {
return true;
}
return false;
},
checkEAMLinesClosed: function(assetReclamationRequestID) {
if (this.IS_EAM_ACTIVE && sn_eam.EAMUtils.checkEAMReclaimLinesClosed) {
return sn_eam.EAMUtils.checkEAMReclaimLinesClosed(assetReclamationRequestID);
}
return true;
},
updateAssetReclaimRequestState: function(assetReclamationRequestID) {
var assetReclaimRequestState = 3; // completed
var failedLines = 0;
// Check the status of HAM lines
if (this.IS_HAMP_ACTIVE) {
failedLines = new global.GlideQuery('sn_hamp_asset_reclaim_line')
.where('asset_reclaim_request', assetReclamationRequestID)
.where('stage', 'closed_skipped')
.count();
}
// If there are no failed HAM lines
if (failedLines === 0) {
// Check the status of SAM lines
if (this.IS_SAMP_ACTIVE) {
failedLines = new global.GlideQuery('samp_asset_reclaim_line')
.where('asset_reclaim_request', assetReclamationRequestID)
.where('state', 'failed')
.count();
}
}
// If there are no failed SAM lines
if (failedLines === 0) {
// Check the status of EAM lines
if (this.IS_EAM_ACTIVE && sn_eam.EAMUtils.getFailedReclaimLines) {
failedLines = sn_eam.EAMUtils.getFailedReclaimLines(assetReclamationRequestID);
}
}
if (failedLines > 0) {
assetReclaimRequestState = 4; // completed with errors
}
new global.GlideQuery('asset_reclamation_request')
.where('sys_id', assetReclamationRequestID)
.update({
state: assetReclaimRequestState,
});
},
closeFlowContexts: function(assetReclamationRequest) {
this.cancelFlowContextForReclaimLine('com.sn_hamp', assetReclamationRequest.getUniqueValue(), 'sn_hamp_asset_reclaim_line');
this.cancelFlowContextForReclaimLine('com.snc.samp', assetReclamationRequest.getUniqueValue(), 'samp_asset_reclaim_line');
this.cancelFlowContextForReclaimLine('com.sn_eam', assetReclamationRequest.getUniqueValue(), 'sn_eam_reclaim_line');
},
cancelFlowContextForReclaimLine: function(pluginName, assetReclamationRequestID, table) {
if (GlidePluginManager.isActive(pluginName)) {
var gr = new GlideRecord(table);
gr.addQuery('asset_reclaim_request', assetReclamationRequestID);
gr.query();
while (gr.next()) {
if (gr.getValue('flow_context') != null) {
sn_fd.FlowAPI.cancel(gr.getValue('flow_context'), 'Canceling flow because trigger record is deleted');
}
}
}
},
getAssetsToExclude: function(requestedFor) {
var list = [];
if (requestedFor + '' === '') {
return list;
}
var gr = new GlideRecord('asset_reclamation_request');
gr.addQuery('requested_for', requestedFor);
// Requests in New/In-Progress state
gr.addQuery('state', 'IN', '1,2');
gr.query();
while (gr.next()) {
list.push(gr.getValue('assets'));
}
list = list.join(',');
return list;
},
getRefQualForAssetManager: function() {
// if current user does not have asset nor eam manager role then nothing can be reclaimed
if (!gs.hasRole('sn_eam.enterprise_asset_manager') && !gs.hasRole('asset')) {
return '^sys_id=NULL';
}
var refQual = '';
// User has one of asset or eam manager role
// HAM or SAM is installed
if (this.IS_HAMP_ACTIVE || this.IS_SAMP_ACTIVE) {
if (this.IS_ENT_ACTIVE && sn_ent.EnterpriseContentEAMUtils.getEAMModelClasses) {
if (!this.IS_EAM_ACTIVE || !gs.hasRole('sn_eam.enterprise_asset_manager')) {
// EAM is not installed or User does not have enterprise manager role
// User has only asset role,then exclude enterprise assets
refQual += '^model=NULL^ORmodel.sys_class_nameNOT IN' + sn_ent.EnterpriseContentEAMUtils.getEAMModelClasses();
} else if (!gs.hasRole('asset')) {
// EAM is installed and user has only enterprise manager role
// then show only enterprise assets
refQual += '^model!=NULL^model.sys_class_nameIN' + sn_ent.EnterpriseContentEAMUtils.getEAMModelClasses();
}
}
} else if (this.IS_ENT_ACTIVE && sn_ent.EnterpriseContentEAMUtils.getEAMModelClasses && this.IS_EAM_ACTIVE && gs.hasRole('sn_eam.enterprise_asset_manager')) {
// HAM and SAM are not installed, but EAM is installed,
// then limit to only enterprise assets if user has eam role
refQual += '^model!=NULL^model.sys_class_nameIN' + sn_ent.EnterpriseContentEAMUtils.getEAMModelClasses();
} else {
// User has either asset or eam role but nothing is installed
return '^sys_id=NULL';
}
return refQual;
},
getRefQual: function(requestedFor, requestedBy) {
var refQual = '';
// 1. Show assets which are not part of other reclamation request.
if (requestedFor + '' !== '') {
refQual += 'sys_idNOT IN' + this.getAssetsToExclude(requestedFor);
refQual += '^assigned_to=' + requestedFor + '^';
}
// 2. Assets in in-use(1), in-maintenance(3), consumed(10)
refQual += 'install_status=1^ORinstall_status=3^ORinstall_status=10';
// 3. Only simple/parent assets can be reclaimed
refQual += '^parent=NULL';
// 4. Exclude software assets
refQual += '^sys_class_name!=alm_license';
if (requestedBy + '' === 'asset_manager') {
refQual += this.getRefQualForAssetManager();
return refQual;
}
// 1. If EAM is not installed then
// EAM assets cannot be reclaimed
// 2. If only EAM is installed then
// Only EAM assets which are either simple or parent can be reclaimed
// 3. If HAM & EAM are installed then
// All enterprise & hardware assets which are either simple or parent can be reclaimed
// HAM or SAM is installed
if (this.IS_HAMP_ACTIVE || this.IS_SAMP_ACTIVE) {
if (this.IS_ENT_ACTIVE && sn_ent.EnterpriseContentEAMUtils.getEAMModelClasses) {
if (!this.IS_EAM_ACTIVE) {
// EAM is not installed, then exclude enterprise assets
refQual += '^model=NULL^ORmodel.sys_class_nameNOT IN' + sn_ent.EnterpriseContentEAMUtils.getEAMModelClasses();
}
}
} else if (this.IS_EAM_ACTIVE) {
if (this.IS_ENT_ACTIVE && sn_ent.EnterpriseContentEAMUtils.getEAMModelClasses) {
// HAM and SAM are not installed, but EAM is installed, then limit to only enterprise assets
refQual += '^model!=NULL^model.sys_class_nameIN' + sn_ent.EnterpriseContentEAMUtils.getEAMModelClasses();
}
} else {
refQual += '';
}
return refQual;
},
validateAssetReclamationRequest: function(assetReclamationRequest) {
var mandatoryFields;
if (this.IS_EAM_ACTIVE && assetReclamationRequest.requested_by + '' === 'asset_manager') {
mandatoryFields = ['reclaim_date'];
} else {
mandatoryFields = ['requested_for', 'reclaim_date'];
}
for (var i = 0; i < mandatoryFields.length; i++) {
if (gs.nil(current.getValue(mandatoryFields[i]))) {
return false;
}
}
if (!gs.hasRole('admin')) {
var requestedBy = assetReclamationRequest.getValue('requested_by');
if (requestedBy === 'manager' && assetReclamationRequest.requested_for.manager.toString() !== gs.getUserID()) {
return false;
} if (requestedBy === 'user') {
if (assetReclamationRequest.requested_for.toString() !== gs.getUserID()
|| assetReclamationRequest.getValue('employee_separation') === 'true') {
return false;
}
}
}
// validate assets
if (this.IS_EAM_ACTIVE && assetReclamationRequest.getValue('requested_by') === 'asset_manager') {
return true;
}
var assets = assetReclamationRequest.getValue('assets');
var assetsGR = new GlideRecord('alm_asset');
assetsGR.addQuery('assigned_to', assetReclamationRequest.getValue('requested_for'));
assetsGR.addEncodedQuery('sys_id IN ' + assets);
assetsGR.query();
var validAssets = assetsGR.getRowCount() === assets.split(',').length;
if (!validAssets) {
return false;
}
return true;
},
type: 'AssetReclamationUtil',
});
Sys ID
fbb4cb9fa1217010fa9b20d3912648ce