Name

sn_ci_gs_content.GuidedSetupSubmitSurvey

Description

Submit the guided setup and create the response records

Script

var GuidedSetupSubmitSurvey = Class.create();
GuidedSetupSubmitSurvey.prototype = {
  GSW_CHANGE_LOG_TABLE: 'gsw_change_log',
  SURVEY_CONTENT_ID: 'b33b17dc1b925410e5dcea08bc4bcbf9', // Let's set up your Conversational Experience! 
  SURVEY_PARENT_CONTENT_ID: 'e2da53dc1b925410e5dcea08bc4bcb70', // Personalize your setup experience

  initialize: function() {},

  getSelectedSurveyOptions: function() {
      var selected = JSON.parse(gs.getUser().getPreference("save_survey_options"));
      var setup_type = gs.getUser().getPreference("setup_type");
      var result = {
          'selected': selected,
          'setup_type': setup_type
      };

      return result;
  },

  saveSurvey: function(guidedSetupId, selectedOptions, setupType) {

      this._saveSelectedSurveyOptions(selectedOptions, setupType); //Save last selected survey options

      var result = this._getResponseResult(selectedOptions);
      result['setup_type'] = [];
      result['setup_type'].push(setupType);
      if (result) {
          this._insertResponseRecords(guidedSetupId, result);
          this._markSurveyStepAsComplete();
      } else
          return {
              "status": "Response records not inserted"
          };
  },

  _markSurveyStepAsComplete: function() {
      var contentIds = [this.SURVEY_CONTENT_ID, this.SURVEY_PARENT_CONTENT_ID];
      var gr = new GlideRecord(this.GSW_CHANGE_LOG_TABLE);
      contentIds.forEach(function(contentId) {
          gr.initialize();
          gr.content = contentId;
          gr.type = 2; //Status-Completed
          gr.insert();
      });
  },

  _getResponseResult: function(selectedOptions) {
      var result = {};
      var basic_entitlement_subscription = [];
      var basic_agent_subscription = [];
      var entitlement = [];
      var agentsupport = [];

      selectedOptions.forEach(function(entitlementValue) {

          var entitlementArr = entitlementValue.split("_");

          if (entitlementArr.indexOf("PRO") > -1) {
              if (basic_entitlement_subscription.indexOf("PRO") == -1)
                  basic_entitlement_subscription.push("PRO");

              if (entitlementArr.indexOf("LA") > -1) {
                  if (basic_agent_subscription.indexOf("PRO_LA") == -1)
                      basic_agent_subscription.push("PRO_LA");
              } else {
                  if (basic_agent_subscription.indexOf("PRO_VA") == -1)
                      basic_agent_subscription.push("PRO_VA");
              }

              if (entitlementArr.indexOf("LA") == -1) {
                  entitlement.push(entitlementValue);
                  agentsupport.push(entitlementArr[0] + "_VA");
              }
          } else if (entitlementArr.indexOf("STANDARD") > -1) {
              if (basic_entitlement_subscription.indexOf("STANDARD") == -1)
                  basic_entitlement_subscription.push("STANDARD");

              if (entitlementArr.indexOf("LA") > -1) {
                  if (basic_agent_subscription.indexOf("STANDARD_LA") == -1)
                      basic_agent_subscription.push("STANDARD_LA");
              } else {
                  if (basic_agent_subscription.indexOf("STANDARD_VA") == -1)
                      basic_agent_subscription.push("STANDARD_VA");
              }

              if (entitlementArr.indexOf("LA") == -1) {
                  entitlement.push(entitlementValue);
                  agentsupport.push(entitlementArr[0] + "_VA");
              }
          }
      });

      if (basic_entitlement_subscription.indexOf("PRO") > -1 && basic_entitlement_subscription.indexOf("STANDARD") > -1) {
          basic_entitlement_subscription = basic_entitlement_subscription.filter(function(item) {
              return item !== "STANDARD";
          });
      }

      if (basic_agent_subscription.indexOf("PRO_VA") > -1 && basic_agent_subscription.indexOf("STANDARD_VA") > -1) {
          basic_agent_subscription = basic_agent_subscription.filter(function(item) {
              return item !== "STANDARD_VA";
          });
      }

      if (basic_entitlement_subscription.indexOf("PRO") > -1 && basic_agent_subscription.indexOf("STANDARD_LA") > -1) {
          basic_agent_subscription.push("PRO_LA");
          basic_agent_subscription = basic_agent_subscription.filter(function(item) {
              return item !== "STANDARD_LA";
          });
      }

      result["entitlement"] = entitlement;
      result["agentsupport"] = agentsupport;
      result["basic_agent_subscription"] = basic_agent_subscription;
      result["basic_entitlement_subscription"] = basic_entitlement_subscription;

      return result;
  },

  _insertResponseRecords: function(guidedSetupId, result) {
      try {
          if (result && Object.keys(result).length > 0) {
              var configSetupId = '';

              var configGr = new GlideRecord("guided_setup_configuration");
              configGr.addQuery('parent_guided_setup', guidedSetupId);
              configGr.query();
              if (configGr.next())
                  configSetupId = configGr.getUniqueValue();

              var gr = new GlideRecord("guided_setup_configuration_response");
              gr.addQuery("parent_setup_config", configSetupId);
              gr.setValue("active", false);
              gr.updateMultiple();

              for (var variableName in result) {
                  if (result[variableName] && result[variableName].length > 0) {
                      for (var variableValueIndx in result[variableName]) {
                          var variableValue = result[variableName][variableValueIndx];
                          gr = new GlideRecord("guided_setup_configuration_response");
                          gr.initialize();
                          gr.setValue("parent_setup_config", configSetupId);
                          gr.setValue("category", variableName);
                          gr.setValue("value", variableValue);
                          gr.setValue("active", true);
                          gr.insert();
                      }
                  }
              }
          }
          return {
              "status": "Success"
          };
      } catch (err) {
          return {
              "status": "Error " + err
          };
      }
  },

  _saveSelectedSurveyOptions: function(selectedOptions, setupType) {
      gs.getUser().savePreference("save_survey_options", JSON.stringify(selectedOptions));
      gs.getUser().savePreference("setup_type", setupType);
  },

  type: 'GuidedSetupSubmitSurvey'
};

Sys ID

889e5e5053231010af5addeeff7b12aa

Offical Documentation

Official Docs: