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

Offical Documentation

Official Docs: