Name

sn_install_base.RecordProducerUtils

Description

Helper functions for reference qualifiers for Record Producer.

Script

var RecordProducerUtils = Class.create();
RecordProducerUtils.prototype = {
  initialize: function() {},
  getGlideRecordDeployedItemsList: function(soldid, account_id, consumer, service_organization, household, current) {
      if (gs.nil(soldid) && gs.nil(account_id) && gs.nil(consumer) && gs.nil(service_organization) && gs.nil(household))
          return;
      var gr;
      if (gs.nil(soldid)) {
          gr = new GlideRecordSecure("sn_install_base_item");
          if (!gs.nil(consumer)) {
              if (!gs.nil(household))
                  gr.addQuery('household', household);
              else
                  gr.addQuery('consumer', consumer);
          } else if (!gs.nil(account_id))
              gr.addQuery('account', account_id);
          else if (!gs.nil(service_organization))
              gr.addQuery('service_organization', service_organization);
      } else {
          gr = new GlideRecordSecure("sn_install_base_m2m_installed_product");
          gr.addQuery('sold_product', soldid);
      }
      gr.query();
      var listOfDeployedItems = [];
      if (gs.nil(soldid))
          while (gr.next())
              listOfDeployedItems.push(gr.sys_id + '');
      else {
          var installBaseUtil = new sn_install_base.InstallBaseUtil();
          var uniqueIBsDict = {};
          while (gr.next()) {
              var currentIB = gr.install_base_item + '';
              uniqueIBsDict[currentIB] = true;
              var descendentIBs = [];
              descendentIBs = installBaseUtil.getAllInstallBaseItemDescendants(currentIB);
              descendentIBs.forEach(function(descendentIB) {
                  uniqueIBsDict[descendentIB] = true;
              });
              listOfDeployedItems.push(Object.keys(uniqueIBsDict));
          }
      }

      var installBaseGr = new GlideRecord("sn_install_base_item");
      installBaseGr.addEncodedQuery("sys_idIN" + listOfDeployedItems);

      if (GlidePluginManager.isActive(global.CSMBaseConstants.SERVICE_ORGANIZATION_PLUGIN)) {
          if (!gs.nil(current) && current.variables.service_organization) {
              var supportedProducts = new global.ServiceOrganizationUtil().getProductsAvailableForCaseRP(current);
              if (!gs.nil(supportedProducts))
                  installBaseGr.addEncodedQuery("productIN" + supportedProducts);
          }
      }
      return installBaseGr.getEncodedQuery();

  },

  getGlideRecordSoldProductList: function(deployid, account_id, current) {
      var contact_id = current.variables.contact;
      var consumer_id = current.variables.consumer;

      if (gs.nil(deployid) && gs.nil(account_id))
          return;

      var contactHasCustomerAdminRole = false;
      if (!gs.nil(contact_id))
          contactHasCustomerAdminRole = new global.CSHelper().userHasRole(contact_id, "sn_customerservice.customer_admin");

      var gr;
      if (gs.nil(deployid)) {
          gr = new GlideRecordSecure("sn_install_base_sold_product");
          gr.addQuery('account', account_id);
          if (!gs.nil(contact_id) && !contactHasCustomerAdminRole && new global.Account().isRestrictedAccessAccount(account_id)) {
              var qc1 = gr.addQuery('contact', contact_id);
              qc1.addOrCondition('additional_users', 'CONTAINS', contact_id);
          }
          if (!gs.nil(consumer_id)) {
              var qc2 = gr.addQuery('consumer', consumer_id);
              qc2.addOrCondition('additional_consumers', 'CONTAINS', consumer_id);
          }
      } else {
          gr = new GlideRecordSecure("sn_install_base_m2m_installed_product");
          gr.addQuery('install_base_item', deployid);
          if (!gs.nil(contact_id) && !contactHasCustomerAdminRole && new global.Account().isRestrictedAccessAccount(account_id)) {
              var qc3 = gr.addQuery('sold_product.contact', contact_id);
              qc3.addOrCondition('sold_product.additional_users', 'CONTAINS', contact_id);
              qc3.addOrCondition('install_base_item.contact', contact_id);
              qc3.addOrCondition('install_base_item', 'DYNAMIC', '8952347818ea5110f8778c8881aa9751');
          }
          if (!gs.nil(consumer_id)) {
              var qc4 = gr.addQuery('sold_product.consumer', consumer_id);
              qc4.addOrCondition('sold_product.additional_consumers', 'CONTAINS', consumer_id);
          }
      }
      gr.query();
      var listOfSoldProducts = [];
      if (gs.nil(deployid))
          while (gr.next())
              listOfSoldProducts.push(gr.sys_id + '');
      else
          while (gr.next())
              listOfSoldProducts.push(gr.sold_product + '');

      if (gs.nil(deployid))
          listOfSoldProducts.push(new sn_install_base.InstallBaseUtil().getMySPsFromAdditionalAccount(global.CSMRelationshipConstants.ACCESS.FULL));

      return "sys_idIN" + listOfSoldProducts.join();
  },

  getCreateCaseRPSOUrl: function(tableName, recordSysId) {
      var rpUrl = "";
      if (gs.nil(tableName) || gs.nil(recordSysId))
          return rpUrl;
      var gr = new GlideRecord(tableName);
      if (gr.isValid() && gr.get(recordSysId)) {
          if (!gs.nil(gr.getValue('service_organization') && gs.hasRole("sn_customerservice.service_organization_contributor", true))) {
              rpUrl += "?id=contributor_user_create_case&sys_id=3f00041853b51010b37cddeeff7b12c0";
              rpUrl += "&service_organization=true";
          }
      }
      return rpUrl;
  },

  /**
   * return :-
   * if sold_product is filled AND account is restricted,
   *      encoded query having sysIds of (contacts of account) AND (contacts having access to sold_products)
   * else
   *      encoded query having sysIds of all contacts of account
   *
   * This method is called in reference qualifier of variable Contact in record producer Create Case from Install Base
   */
  getContactList: function(current) {
      var cond1 = '';
      var account = current.variables.account;
      var sold_product = current.variables.sold_product;
      var consumer = current.variables.consumer;
      if (!gs.nil(account))
          cond1 = 'account.customer=true';

      var caseGr = new GlideRecord('sn_customerservice_case');
      caseGr.initialize();
      if (!gs.nil(account))
          caseGr.setValue('account', account);
      if (!gs.nil(sold_product))
          caseGr.setValue('sold_product', sold_product);
      if (!gs.nil(consumer))
          caseGr.setValue('consumer', consumer);

      return cond1 + '^' + new global.CSManagementUtils().getCaseContactRefQualifier(caseGr);
  },

  checkContactAccountOrConsumer: function(table, sysID) {
      if (gs.nil(table) || gs.nil(sysID))
          return false;

      var gr = new GlideRecord(table);
      gr.get(sysID);

      if (gr.getValue('account') || gr.getValue('contact'))
          return this.canCreateCase(table, sysID);
      if (gr.getValue('consumer') || gr.getValue('household'))
          return this.canConsumerCreateCase(table, sysID);

  },

  /*
  This function checks whether logged-in user (contact) has access to account to show/hide "create case" button
  */
  canCreateCase: function(table, sysID) {
      //Case is not for IB/SP, we can skip account access check
      if (gs.nil(table) || gs.nil(sysID))
          return "true";
      var gr = new GlideRecord(table);
      gr.addQuery('sys_id', sysID);
      gr.query();
      var account = '';
      if (gr.next())
          account = gr.getValue('account');
      //account is not available, we can skip account access check
      if (gs.nil(account)) {
          if (!gs.nil(gr.getValue('service_organization'))) {
              return new sn_bus_loc.BLPortalUtil().canAccessSOCases();
          }
          return false;
      }
      var accountGr = new GlideRecord('customer_account');
      accountGr.addQuery('sys_id', account);
      accountGr.query();
      return (accountGr.next() && accountGr.canRead());
  },

  canConsumerCreateCase: function(table, sysID) {
      var loggedInConsumerId = new global.CSManagementUtils().getConsumerId();
      var gr = new GlideRecord(table);
      gr.get(sysID);
  var isLoggedInConsumer = (gr.getValue('consumer') && gr.getValue('consumer') == loggedInConsumerId);
      var isHouseholdHead = (gr.getValue('household') && this.getHeadOfHousehold(gr.getValue('household')) == loggedInConsumerId);
      if (isLoggedInConsumer || isHouseholdHead) {
          return true;
      }

      var RC = global.CSMRelationshipConstants;
      var entityList = '';
      var params = {};
      params[RC.SKIP_BEFORE_QUERY_FILTER] = true;
      params[RC.ADDITIONAL_ENCODED_QUERY] = "consumer=" + loggedInConsumerId;
      if (table == 'sn_install_base_item') {
          entityList = new global.CSMRelationshipUtils().getMyEntities(null, global.CSMBaseConstants.INSTALL_BASE_RELATED_PARTY, RC.FIELD_INSTALL_BASE_ITEM, RC.ACCESS.FULL, params);
      } else if (table == 'sn_install_base_sold_product') {
          entityList = new global.CSMRelationshipUtils().getMyEntities(null, global.CSMBaseConstants.SOLD_PRODUCT_RELATED_PARTY, RC.FIELD_SOLD_PRODUCT, RC.ACCESS.FULL, params);
      }
      if(entityList.length > 0)
          return true;
      return false;
  },

  getHeadOfHousehold: function(householdID) {
      var householdGr = new GlideRecord('csm_household');
      householdGr.get(householdID);
      return householdGr.getValue('head');
  },

  canReadRecord: function(table, sysID) {
      if (gs.nil(table) || gs.nil(sysID))
          return "false";
      var gr = new GlideRecord(table);
      gr.addQuery('sys_id', sysID);
      gr.query();
      return (gr.next() && gr.canRead());
  },

  type: 'RecordProducerUtils'
};

Sys ID

e32a8c1d53c03300303cddeeff7b1255

Offical Documentation

Official Docs: