Name

global.SLAContractUtilSNC

Description

Reusable helper classes for use within the SLA application to obtain contracts-related information

Script

var SLAContractUtilSNC = Class.create();
SLAContractUtilSNC.prototype = {

  TABLE_CONTRACT_REL_CONTRACT_SLA: 'contract_rel_contract_sla',
  TABLE_CONTRACT_SLA: 'contract_sla', // SLA defition
  VIEW_CONTRACT_SLA_CONTRACT: 'contract_sla_contract',
  ATTR_CONTRACT: 'contract',
  ATTR_CONTRACT_SLA: 'contract_sla',
  ATTR_COLLECTION: 'collection',
  PROP_CONTRACT_TABLES: 'com.snc.sla.contract.tables',
  _CONTRACT_PLUGIN_ID: 'com.snc.sla.contract2',

  initialize: function() {
  	this.slaUtil = new SLAUtil();
  },

  getAllSLAsQuery: function(collection){
  	// Check active SLA Definitions
  	var slaGR = new GlideRecord('contract_sla');
  	slaGR.addActiveQuery();
  	slaGR.addQuery(this.ATTR_COLLECTION, collection);
  	this._excludeServiceCommitmentSLAs(slaGR);
  	return slaGR;
  },

  slaHasContract: function(slaSysId) {
  	var gr = new GlideRecord(this.TABLE_CONTRACT_REL_CONTRACT_SLA);
  	gr.addQuery(this.ATTR_CONTRACT_SLA, slaSysId);
  	gr.addNotNullQuery(this.ATTR_CONTRACT);
  	gr.setLimit(1);
  	gr.query();

  	return gr.hasNext();
  },

  isContractAttachedToSLA: function(contractSysId, slaSysId) {
  	var gr = new GlideRecord(this.TABLE_CONTRACT_REL_CONTRACT_SLA);
  	gr.addQuery(this.ATTR_CONTRACT, contractSysId);
  	gr.addQuery(this.ATTR_CONTRACT_SLA, slaSysId);
  	gr.setLimit(1);
  	gr.query();

  	return gr.hasNext();
  },

  // Ignore 'Contract SLAs' mode of operation if com.snc.sla.contract.tables (CSV) property exists but does not contain current task.sys_class_name, or contract_rel_contract_sla table does not exist
  ignoreContract: function(classname) {
  	if (!GlidePluginManager.isActive(this._CONTRACT_PLUGIN_ID))
  		return true;
  	var contractTables = gs.getProperty(this.PROP_CONTRACT_TABLES);
  	if (contractTables == null)
  		return false;
  	var list = contractTables.replaceAll(' ', '').split(',');
  	return !(new ArrayUtil().contains(list, classname));
  },

  hasContractProperty: function() {
  	return gs.getProperty(this.PROP_CONTRACT_TABLES) != null;
  },

  getContractualSLAs: function(contract, collection, includeNonContractual) {
  	var gr = this.getAllSLAsQuery(collection);
  	var joinQuery = gr.addJoinQuery(this.VIEW_CONTRACT_SLA_CONTRACT, 'sys_id', 'sla_sys_id');
  	joinQuery.addCondition("cntr_contract", contract);
  	if (includeNonContractual)
  		joinQuery.addOrCondition("cntr_contract", 'NULL');
  	return gr;
  },

  processNonContractualSLAs: function(contractGR) {
  	return contractGR.process_non_contractual_slas == true;
  },

  getNonContractualSLAs: function(collection) {
  	var gr = this.getAllSLAsQuery(collection);
  	var joinQuery = gr.addJoinQuery(this.VIEW_CONTRACT_SLA_CONTRACT, 'sys_id', 'sla_sys_id');
  	joinQuery.addCondition("cntr_contract", 'NULL');
  	return gr;
  },

  _excludeServiceCommitmentSLAs: function(slaGR) {
  	// always restrict SLA processing to records that have been created in "contract_sla" table only i.e. no records from extended tables
  	if (slaGR.isValidField('sys_class_name'))
  		slaGR.addQuery('sys_class_name', this.TABLE_CONTRACT_SLA);
  	
  	// if the new version of SLA Commitments plugin is active exclude SLA Definitions that are Service Commitment only
  	if (this.slaUtil.isSLACommitmentsActive())
  		slaGR.addNullQuery('service_commitment').addOrCondition('service_commitment', false);
  },
  
  type: 'SLAContractUtilSNC'
};

Sys ID

3252f416670732006e6eadab9485ef1b

Offical Documentation

Official Docs: