Name
sn_itam_workspace.ImportantActionsSetupQueries
Description
No description available
Script
var ImportantActionsSetupQueries = Class.create();
ImportantActionsSetupQueries.prototype = {
initialize: function () { },
isDomainValid: function (domain) {
return (global.ModelUtils.isDomainSeparationEnabled() && domain);
},
/* ***************************************************************
Inventory
*************************************************************** */
getEmptyAttributeQuery: function (inEncodedQueryFormat, table, field, domain) {
var stockroomGa = new GlideAggregate(table);
stockroomGa.addNullQuery(field);
if (this.isDomainValid(domain)) { stockroomGa.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return stockroomGa.getEncodedQuery();
}
stockroomGa.addAggregate('COUNT');
stockroomGa.query();
stockroomGa.next();
return parseInt(stockroomGa.getAggregate('COUNT'), 10);
},
/* Returns In stock Asset records where Stockroom is empty */
getEmptyStockroomQuery: function (inEncodedQueryFormat, domain) {
var assetGA = new GlideAggregate('alm_asset');
this.addAssetExclusionCommonQuery(assetGA);
assetGA.addNullQuery('stockroom');
assetGA.addQuery('install_status', '6');
if (this.isDomainValid(domain)) { assetGA.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return assetGA.getEncodedQuery();
}
assetGA.addAggregate('COUNT');
assetGA.query();
assetGA.next();
return parseInt(assetGA.getAggregate('COUNT'), 10);
},
/* ***************************************************************
Asset Estate
*************************************************************** */
getEmptyAcquisitionMethodQuery: function (inEncodedQueryFormat, domain) {
var assetGa = new GlideAggregate('alm_asset');
this.addAssetExclusionCommonQuery(assetGa, true);
assetGa.addNullQuery('acquisition_method');
if (this.isDomainValid(domain)) { assetGa.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return assetGa.getEncodedQuery();
}
return assetGa;
},
getEmptyAssetFunctionQuery: function (inEncodedQueryFormat, domain) {
var assetGa = new GlideAggregate('alm_asset');
this.addAssetExclusionCommonQuery(assetGa);
assetGa.addNullQuery('asset_function');
if (this.isDomainValid(domain)) { assetGa.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return assetGa.getEncodedQuery();
}
return assetGa;
},
getEmptyAssetTagQuery: function (inEncodedQueryFormat, domain) {
var assetGa = new GlideAggregate('alm_asset');
this.addAssetExclusionCommonQuery(assetGa, true);
assetGa.addNullQuery('asset_tag');
if (this.isDomainValid(domain)) { assetGa.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return assetGa.getEncodedQuery();
}
return assetGa;
},
getEmptyLocationQuery: function (inEncodedQueryFormat, domain) {
var assetGa = new GlideAggregate('alm_asset');
this.addAssetExclusionCommonQuery(assetGa);
assetGa.addNullQuery('location');
if (this.isDomainValid(domain)) { assetGa.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return assetGa.getEncodedQuery();
}
return assetGa;
},
getEmptyPONumberQuery: function (inEncodedQueryFormat, domain) {
var assetGa = new GlideAggregate('alm_asset');
this.addAssetExclusionCommonQuery(assetGa, true);
assetGa.addNullQuery('po_number');
if (this.isDomainValid(domain)) { assetGa.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return assetGa.getEncodedQuery();
}
return assetGa;
},
/* ***************************************************************
Model Management
*************************************************************** */
getModelImpActionsData: function (inEncodedQueryFormat, table, field, input, domain) {
var excludeStatuses = [
global.AssetManagementConstants.MODEL_STATUSES.RETIRED,
global.AssetManagementConstants.MODEL_STATUSES.SOLD,
];
var modelGa = new GlideAggregate(table);
if (table === global.AssetManagementConstants.MODEL_CLASSES.PRODUCT_MODEL) {
modelGa.addQuery('sys_class_name', 'IN', [global.AssetManagementConstants.MODEL_CLASSES.HARDWARE_MODEL,
global.AssetManagementConstants.MODEL_CLASSES.CONSUMABLE_MODEL]);
}
modelGa.addNullQuery(field);
if (this.isDomainValid(domain)) { modelGa.addQuery('sys_domain', domain); }
if (sn_itam_workspace.AssetWorkspaceUtil.isCSDMActive()) {
var excludeLifeCycleStages = [
global.AssetManagementConstants.LIFECYCLE_STAGES.END_OF_LIFE,
];
var excludeLifeCycleStagesStatues = [
global.AssetManagementConstants.LIFECYCLE_STAGE_STATUSES.RETIRED,
global.AssetManagementConstants.LIFECYCLE_STAGE_STATUSES.SOLD,
];
modelGa.addQuery('life_cycle_stage', 'NOT IN', excludeLifeCycleStages);
modelGa.addQuery('life_cycle_stage_status', 'NOT IN', excludeLifeCycleStagesStatues);
} else {
modelGa.addQuery('status', 'NOT IN', excludeStatuses);
}
if (input && input.filter.length > 0) {
for (var index in input.filter) {
if (input.filter[index].filterElementId === 'domain_filter' && !gs.nil(input.filter[index].sys_id)) {
var domains = this.getChildDomains(input.filter[index].sys_id);
modelGa.addQuery('sys_domain', 'IN', domains);
}
if (input.filter[index].filterElementId === 'model_category_filter') {
modelGa.addQuery('cmdb_model_category', 'IN', input.filter[index].values);
}
}
}
if (inEncodedQueryFormat) {
return modelGa.getEncodedQuery();
}
modelGa.addAggregate('COUNT');
modelGa.query();
modelGa.next();
return parseInt(modelGa.getAggregate('COUNT'), 10);
},
/* ***************************************************************
Procurement
*************************************************************** */
getRequestedPOsMoreThan30Days: function(inEncodedQueryFormat, domain) {
var purchaseOrderGa = new GlideAggregate('proc_po');
purchaseOrderGa.addEncodedQuery('status=requested^sys_created_on<javascript:gs.beginningOfLast30Days()');
if (this.isDomainValid(domain)) { purchaseOrderGa.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return purchaseOrderGa.getEncodedQuery();
}
return purchaseOrderGa;
},
getPendingTransferOrders: function(inEncodedQueryFormat, domain) {
var transferOrderGa = new GlideAggregate('alm_transfer_order');
transferOrderGa.addEncodedQuery('type=procurement');
transferOrderGa.addEncodedQuery('stageINrequested,shipment_preparation,partially_shipped,fully_shipped');
if (this.isDomainValid(domain)) { transferOrderGa.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return transferOrderGa.getEncodedQuery();
}
return transferOrderGa;
},
getPOsOnOrderForMorethan30Days: function(inEncodedQueryFormat, domain) {
var purchaseOrderGa = new GlideAggregate('proc_po');
purchaseOrderGa.addEncodedQuery('sys_created_on<javascript:gs.beginningOfLast30Days()');
purchaseOrderGa.addEncodedQuery('statusINordered,pending,requested');
if (this.isDomainValid(domain)) { purchaseOrderGa.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return purchaseOrderGa.getEncodedQuery();
}
return purchaseOrderGa;
},
getRequestsPendingApproval: function(inEncodedQueryFormat, domain) {
var requestGa = new GlideAggregate('sc_request');
requestGa.addEncodedQuery('active=true^request_state=requested^sys_created_onRELATIVELT@dayofweek@ago@2');
requestGa.addEncodedQuery('sourceable=true');
if (this.isDomainValid(domain)) { requestGa.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return requestGa.getEncodedQuery();
}
return requestGa;
},
/* ***************************************************************
Contract management
*************************************************************** */
getMissingVendorsQuery: function(inEncodedQueryFormat, domain) {
var contractGr = this.addContractCommonQuery();
contractGr.addNullQuery('vendor');
if (this.isDomainValid(domain)) { contractGr.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return contractGr.getEncodedQuery();
}
return contractGr;
},
getMissingEndDateQuery: function(inEncodedQueryFormat, domain) {
var contractGr = this.addContractCommonQuery();
contractGr.addNullQuery('ends');
if (this.isDomainValid(domain)) { contractGr.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return contractGr.getEncodedQuery();
}
return contractGr;
},
getExpiringInThirtyDays: function(inEncodedQueryFormat, domain) {
var contractGa = new GlideRecord('ast_contract');
contractGa.addQuery('state', 'active');
contractGa.addQuery('ends', '<', 'javascript:gs.daysAgo(-30)');
if (this.isDomainValid(domain)) { contractGa.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return contractGa.getEncodedQuery();
}
return contractGa;
},
getExpiringInNintyDays: function(inEncodedQueryFormat, domain) {
var contractGa = new GlideRecord('ast_contract');
contractGa.addQuery('state', 'active');
contractGa.addQuery('ends', '<', 'javascript:gs.daysAgo(-90)');
if (this.isDomainValid(domain)) { contractGa.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return contractGa.getEncodedQuery();
}
return contractGa;
},
getDuplicateContractQuery: function(inEncodedQueryFormat, domain) {
var duplicates = {};
var vendorId; var contractNum;
var contractGr = this.addContractCommonQuery();
if (this.isDomainValid(domain)) { contractGr.addQuery('sys_domain', domain); }
contractGr.query();
while (contractGr.next()) {
vendorId = contractGr.getValue('vendor');
contractNum = contractGr.getValue('vendor_contract');
var key;
if (!gs.nil(vendorId)) {
key = contractNum + vendorId;
} else {
key = contractNum;
}
if (key in duplicates) {
duplicates[key].push(contractGr.getUniqueValue());
} else {
duplicates[key] = [contractGr.getUniqueValue()];
}
}
var dupKeys = Object.keys(duplicates);
var dupContracts = [];
var dupContractCount = 0;
for (var k = 0; k < dupKeys.length; k++) {
if (duplicates[dupKeys[k]].length > 1) {
dupContractCount += duplicates[dupKeys[k]].length;
dupContracts = dupContracts.concat(duplicates[dupKeys[k]]);
}
}
if (inEncodedQueryFormat) {
return dupContracts;
}
return dupContractCount;
},
getMissingContractAdminQuery: function(inEncodedQueryFormat, domain) {
var contractGr = this.addContractCommonQuery();
contractGr.addNullQuery('contract_administrator');
if (this.isDomainValid(domain)) { contractGr.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return contractGr.getEncodedQuery();
}
return contractGr;
},
getOpenRenewalRequestsQuery: function(inEncodedQueryFormat, domain) {
var requestGr = new global.GlideQuery('sn_contract_renewal_request')
.where('stage', '!=', 'cancelled')
.where('stage', '!=', 'completed')
.toGlideRecord();
if (this.isDomainValid(domain)) { requestGr.addQuery('sys_domain', domain); }
if (inEncodedQueryFormat) {
return requestGr.getEncodedQuery();
}
return requestGr;
},
/* ***************************************************************
Common queries
*************************************************************** */
addAssetExclusionCommonQuery: function (assetGa, excludeConsumables) {
var excludedStatuses = [
global.AssetManagementConstants.ASSET_STATUSES.ON_ORDER,
global.AssetManagementConstants.ASSET_STATUSES.MISSING,
global.AssetManagementConstants.ASSET_STATUSES.RETIRED,
];
var excludedSubstates = [
global.AssetManagementConstants.ASSET_SUB_STATUSES.PRE_ALLOCATED,
];
var includedClasses = [
global.AssetManagementConstants.ASSET_CLASSES.HARDWARE,
global.AssetManagementConstants.ASSET_CLASSES.FACILITY,
global.AssetManagementConstants.ASSET_CLASSES.ASSET,
];
if (!excludeConsumables) {
includedClasses.push(global.AssetManagementConstants.ASSET_CLASSES.CONSUMABLE);
}
assetGa.addQuery('install_status', 'NOT IN', excludedStatuses);
assetGa.addQuery('substatus', 'NOT IN', excludedSubstates)
.addOrCondition('substatus', '');
if (global.AssetUtils.IS_HAMP_ACTIVE) {
assetGa.addQuery('asset_function', '!=', 'asset_bundle').addOrCondition('asset_function', '');
}
var customClasses = gs.getProperty('sn_itam_workspace.customExtendedAssetClasses');
if (gs.nil(customClasses)) {
assetGa.addQuery('sys_class_name', 'IN', includedClasses);
} else {
includedClasses = includedClasses.concat(customClasses.split(','));
assetGa.addQuery('sys_class_name', 'IN', includedClasses);
}
return assetGa;
},
getChildDomains: function (domainID) {
var domains = [];
domains.push(domainID);
var gr = new GlideRecord('domain');
gr.addActiveQuery();
gr.addQuery('parent', domainID);
gr.query();
while (gr.next()) {
domains = domains.concat(this.getChildDomains(gr.getUniqueValue()));
}
return domains;
},
addContractCommonQuery: function() {
var validSubstates = ['under_review', 'renewal_approved'];
var gr = new global.GlideQuery('ast_contract')
.where('state', 'active')
.orWhere(new global.GlideQuery()
.where('state', 'draft')
.where('substate', 'approved'))
.orWhere(new global.GlideQuery()
.where('state', 'expired')
.where('substate', 'IN', validSubstates))
.toGlideRecord();
return gr;
},
type: 'ImportantActionsSetupQueries',
};
ImportantActionsSetupQueries.CONTRACT_ICON = 'form-outline';
ImportantActionsSetupQueries.WITHIN_30_DAYS = '0f72e78ec3103000c111113e5bba8fb2';
ImportantActionsSetupQueries.WITHIN_90_DAYS = 'a6c2e38ec3103000c111113e5bba8f84';
Sys ID
895972c2e8023010fa9b2b2d841f5942