Name

sn_customerservice.CaseTaskHelper

Description

Contains helper APIs for sn_customerservice_case to Case task (sn_customerservice_task) creation.

Script

var CaseTaskHelper = Class.create();
CaseTaskHelper.prototype = {
  initialize: function() {},

  /**
   * Returns the applicable contacts/accounts/consumers for case task 
   */
  getCaseTaskEntities: function(caseTaskGr, entityTable, entityField) {
      var caseTaskEntities = [];
      var parentGr = caseTaskGr.parent.getRefRecord();
      if (this._getAllCaseExtensions().indexOf(parentGr.sys_class_name + "") !== -1) {
          if (!gs.nil(parentGr.getValue(entityField)))
              caseTaskEntities.push(parentGr.getValue(entityField) + "");
          var relPartyConfigs = this._getRelatedPartyConfig(parentGr.sys_class_name, entityTable);
          return (this._getRelatedParties(relPartyConfigs.join(), parentGr.sys_id, caseTaskEntities, entityTable)).join();

      } else
          gs.info("No sn_customerservice_case reference in case task parent. Record in case task parent field " + parentGr.sys_id + " is of class - " + parentGr.sys_class_name);
  },

  _getAllCaseExtensions: function() {
      var table = new GlideTableHierarchy(CSMCaseTaskManagementConstants.CASE_TABLE);
      return table.getAllExtensions() + "";
  },

  _getRelatedPartyConfig: function(appliesTo, entityType) {
      var relPartyConfigs = [];
      var relConfigGr = new GlideRecord(CSMCaseTaskManagementConstants.RELATED_PARTY_CONFIG_TABLE);
      relConfigGr.addQuery(CSMCaseTaskManagementConstants.RELATED_PARTY_CONFIG_APPLIES_TO, appliesTo);
      relConfigGr.addQuery(CSMCaseTaskManagementConstants.RELATED_PARTY_CONFIG_ENTITY_TYPE, entityType);
      relConfigGr.query();
      while (relConfigGr.next())
          relPartyConfigs.push(relConfigGr.sys_id + "");
      return relPartyConfigs;
  },

  _getRelatedParties: function(partyConfig, caseId, caseTaskEntities, entityTable) {
      var relPartyGr = new GlideRecord(CSMCaseTaskManagementConstants.RELATED_PARTY_TABLE);
      relPartyGr.addQuery(CSMCaseTaskManagementConstants.RELATED_PARTY_CONFIG, "IN", partyConfig);
      relPartyGr.addQuery(CSMCaseTaskManagementConstants.RELATED_PARTY_CASE_RECORD, caseId);
      relPartyGr.query();
      while (relPartyGr.next())
          caseTaskEntities.push(relPartyGr.getValue(this._getRelatedPartyUserField(entityTable)) + "");
      return caseTaskEntities;
  },

  _getRelatedPartyUserField: function(entityTable) {
      var entities = CSMCaseTaskManagementConstants.RELATED_PARTY_ENTITIES;
      var userField = CSMCaseTaskManagementConstants.RELATED_PARTY_USER_FIELD;
      return userField[entities.indexOf(entityTable)];
  },

  getCaseTaskContacts: function(caseTaskGr) {
      return this.getCaseTaskEntities(caseTaskGr, CSMCaseTaskManagementConstants.CUSTOMER_CONTACT_TABLE, CSMCaseTaskManagementConstants.CASE_CONTACT_FIELD);
  },

  getCaseTaskConsumers: function(caseTaskGr) {
      return this.getCaseTaskEntities(caseTaskGr, CSMCaseTaskManagementConstants.CSM_CONSUMER_TABLE, CSMCaseTaskManagementConstants.CASE_CONSUMER_FIELD);
  },

  getCaseTaskAccounts: function(caseTaskGr) {
      return this.getCaseTaskEntities(caseTaskGr, CSMCaseTaskManagementConstants.CUSTOMER_ACCOUNT_TABLE, CSMCaseTaskManagementConstants.CASE_ACCOUNT_FIELD);
  },

  isCaseExtension: function(table) {
      var caseExtns = this._getAllCaseExtensions();
      return (caseExtns.indexOf(table) !== -1);
  },

  clearCaseTaskFields: function(caseTaskGr, clearParentCase) {
      if (clearParentCase) {
          caseTaskGr.parent_case = CSMCaseTaskManagementConstants.EMPTY_FIELD_VALUE;
      }
      caseTaskGr.account = CSMCaseTaskManagementConstants.EMPTY_FIELD_VALUE;
      caseTaskGr.contact = CSMCaseTaskManagementConstants.EMPTY_FIELD_VALUE;
      caseTaskGr.consumer = CSMCaseTaskManagementConstants.EMPTY_FIELD_VALUE;
      caseTaskGr.consumer_profile = CSMCaseTaskManagementConstants.EMPTY_FIELD_VALUE;
  },

  syncCaseTaskFields: function(caseTaskGr, parentSync) {
      if (parentSync) {
          caseTaskGr.parent_case = caseTaskGr.parent;
      } else {
          caseTaskGr.parent = caseTaskGr.parent_case;
      }
      caseTaskGr.account = caseTaskGr.parent.account;
      caseTaskGr.contact = caseTaskGr.parent.contact;
      caseTaskGr.consumer = caseTaskGr.parent.consumer;
      caseTaskGr.consumer_profile = caseTaskGr.parent.consumer_profile;
  },

  getCaseTaskParamsForRelatedPartyDeletion: function(relatedPartyGr) {
      var caseTaskParams = {},
          caseTaskLinks = [];
      var caseTaskEntity = this._getRelatedPartyEntity(relatedPartyGr.party_config.entity_type);
      var relatedPartyEntity = CSMCaseTaskManagementConstants.RELATED_PARTY_USER_FIELD[CSMCaseTaskManagementConstants.CASE_TASK_ENTITY_FIELD.indexOf(caseTaskEntity)];
      var caseTaskGr = new GlideRecord(CSMCaseTaskManagementConstants.CASE_TASK_TABLE);
      caseTaskGr.addQuery(caseTaskEntity, relatedPartyGr.getValue(relatedPartyEntity));
      caseTaskGr.addQuery(CSMCaseTaskManagementConstants.CASE_TASK_PARENT, relatedPartyGr.case_record);
      caseTaskGr.query();
      while (caseTaskGr.next()) {
          if (!caseTaskParams.hasOwnProperty("entityLabel") && caseTaskEntity)
              caseTaskParams.entityLabel = caseTaskGr.getElement(caseTaskEntity).getLabel() + "";
          var caseTaskLink = "<a href='/" + caseTaskGr.getTableName() + ".do" + "?sys_id=" + caseTaskGr.getUniqueValue() + "'>" + caseTaskGr.number + "</a>";
          caseTaskLinks.push(caseTaskLink);
      }
      if (caseTaskLinks && caseTaskLinks.length > 0) {
          caseTaskParams.tasks = caseTaskLinks;
          if (relatedPartyGr && relatedPartyGr.getValue(String(relatedPartyEntity)))
              caseTaskParams.relatedPartyEntity = String(relatedPartyEntity);
      }
      return caseTaskParams;
  },

  _getRelatedPartyEntity: function(entityType) {
      var caseTaskEntity = CSMCaseTaskManagementConstants.EMPTY_FIELD_VALUE;
      if (String(entityType) == CSMCaseTaskManagementConstants.CUSTOMER_ACCOUNT_TABLE) {
          caseTaskEntity = CSMCaseTaskManagementConstants.CASE_ACCOUNT_FIELD;
      } else if (String(entityType) == CSMCaseTaskManagementConstants.CUSTOMER_CONTACT_TABLE) {
          caseTaskEntity = CSMCaseTaskManagementConstants.CASE_CONTACT_FIELD;
      } else if (String(entityType) == CSMCaseTaskManagementConstants.CSM_CONSUMER_TABLE) {
          caseTaskEntity = CSMCaseTaskManagementConstants.CASE_CONSUMER_FIELD;
      }
      return caseTaskEntity;
  },
  canReadCaseTask: function(sysId) {
      var gr = new GlideRecord(CSMCaseTaskManagementConstants.CASE_TASK_TABLE);
      gr.addQuery('parent_case', sysId);
      gr.query();
      while (gr.next()) {
  		if(gr.canRead()){
  			return true;
  		}
      }
  	return false;	
  },

  type: 'CaseTaskHelper'
};

Sys ID

1b312b4953a51110a376ddeeff7b12e7

Offical Documentation

Official Docs: