Name

sn_hr_core.HRServiceCreatorUtilAjax

Description

No description available

Script

var HRServiceCreatorUtilAjax = Class.create();
HRServiceCreatorUtilAjax.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
  type: 'HRServiceCreatorUtilAjax'
});
(function() {
  var _getTableLabel = function(table, ln) {
      var grDoc = new GlideRecord('sys_documentation');
      grDoc.addNullQuery('element');
      grDoc.addQuery('name', table);
      grDoc.addQuery('language', ln);
      grDoc.query();

      if (grDoc.next())
          return grDoc.label.toString();
      else
          return null;
  };

  var _getCOEName = function(coeValue) {
      var roles = new hr_Utils();
      if (!roles.checkUserHasRole('sn_hr_core.case_reader') && !roles.checkUserHasRole('sn_hr_le.activity_reader'))
          return null;

      var retCOEName = '';
      var ln = new gs.getSession().getLanguage();
      retCOEName = _getTableLabel(coeValue, ln);
      if (retCOEName)
          return retCOEName;
      else
          retCOEName = _getTableLabel(coeValue, 'en');

      if (!retCOEName)
          retCOEName = coeValue;

      return retCOEName;
  };

  var _createList = function(data, supplyShortName) {
      var inactiveTables = gs.getProperty("sn_hr_core.inactive_tables", "").split(",");
      var coeArray = hr.TABLE_CASE_EXTENSIONS;

      for (var i = 0; i < coeArray.length; i++) {
          var coeValue = coeArray[i].toString();
          if (inactiveTables.indexOf(coeValue) == -1) {
              var coeName = _getCOEName(coeValue);
              if (coeName) {
                  var listEntry = {
                      name: coeName + ' [' + coeValue + ']',
                      value: coeValue
                  };
                  if (supplyShortName)
                      listEntry.shortName = coeName;
                  data.coes.push(listEntry);
              }
          }
      }
      return new global.JSON().encode(data);
  };

  HRServiceCreatorUtilAjax.prototype.getCOEListWithTask = function() {
      var taskTable = 'sn_hr_core_task';
      var taskName = _getCOEName(taskTable);
      var data = {
          coes: [{
            name: taskName + ' [' + taskTable + ']',
            shortName: taskName,
            value: taskTable
          }]
      };
      return _createList(data);
  };

  HRServiceCreatorUtilAjax.prototype.getCOEList = function() {
      var data = {
          coes: [{
            name: gs.getMessage('-- None --'),
            value: ''
          }]
      };
      return _createList(data);
  };

  HRServiceCreatorUtilAjax.prototype.getHRServiceDetails = function() {
      var retHRServiceDetails = {};

      var sysid = this.getParameter('sysparm_hrsysid');
      var grHRService = new GlideRecord('sn_hr_core_service');
      if (grHRService.get(sysid) && grHRService.canRead()) {
          retHRServiceDetails.hrServiceName = grHRService.name.toString();
          retHRServiceDetails.hrServiceCOE = grHRService.topic_detail.topic_category.coe.toString();
      }

      return new global.JSON().encode(retHRServiceDetails);
  };

  var _getChoiceList = function(choiceField, choiceTable, removeNone) {
      var choiceRecord = new GlideRecord(choiceTable);
      if (!choiceField || !choiceRecord.isValid() || !choiceRecord.getElement(choiceField).canRead())
          return [];

      var choiceList = [];
      var choices = new GlideChoiceList.getChoiceList(choiceTable, choiceField);

      if (removeNone)
          choices.removeNone();
      else
          choices.addNone();

      var numChoices = choices.getSize();
      for (var i = 0; i < numChoices; i++)
          choiceList.push({
              label: choices.getChoice(i).getLabel(),
              value: choices.getChoice(i).getValue()
          });

      return choiceList;
  };

  HRServiceCreatorUtilAjax.prototype.getTaskTypeState = function() {
      var templateTaskType = {
          taskType: [],
          state: [],
          assignmentType: []
      };

      var templateTable = this.getParameter('sysparm_tasktable');
      var taskField = 'hr_task_type';
      var stateField = 'state';
      var assignTypeField = 'assignment_type';

      templateTaskType.taskType = _getChoiceList(taskField, templateTable);
      templateTaskType.state = _getChoiceList(stateField, templateTable);
      templateTaskType.assignmentType = _getChoiceList(assignTypeField, hr.TABLE_HR_TEMPLATE);

      return new global.JSON().encode(templateTaskType);
  };

  HRServiceCreatorUtilAjax.prototype.gaSupportTeam = function() {
      var supportTeam = {
          recipients: [],
      };

      var templateTable = this.getParameter('sysparm_tasktable');
      var supportTeamField = 'task_support_team';

      supportTeam.recipients = _getChoiceList(supportTeamField, templateTable);
      return new global.JSON().encode(supportTeam);
  };

  HRServiceCreatorUtilAjax.prototype.getDateOffsetList = function() {
      var dateOffsetList = {
          offsetType: [],
          offsetUnits: []
      };

      var templateTable = this.getParameter('sysparm_table');
      var offsetType = 'date_offset_type';
      var offsetUnits = 'date_offset_units';
      dateOffsetList.offsetType = _getChoiceList(offsetType, templateTable, true);
      dateOffsetList.offsetUnits = _getChoiceList(offsetUnits, templateTable, true);

      return new global.JSON().encode(dateOffsetList);
  };

  var _getDueDateBooleanList = function(addNone) {
      var boolList = [];
      if (addNone)
          boolList.push({
              label: gs.getMessage('-- None --'),
              value: 'none'
          });
      boolList.push({
          label: gs.getMessage('Based on task assignment date'),
          value: true
      });
      boolList.push({
          label: gs.getMessage('Based on parent case table'),
          value: false
      });

      return boolList;
  };

  HRServiceCreatorUtilAjax.prototype.getDueDateList = function() {
      var grTemplate = new GlideRecord('sn_hr_core_template');
      if (!grTemplate.canRead())
          return null;

      var data = {
          duedate: []
      };
      data.dueDateList = _getDueDateBooleanList(true);

      return new global.JSON().encode(data);
  };

  var _getColumnLabel = function(tableName, fieldName) {
      var retColumnInfo = {
          columnLabel: '',
          columnRef: ''
      };
      var grTab = new GlideRecord(tableName);
      grTab.initialize();
      if (grTab.isValid() && grTab.canRead()) {
          var ele = grTab.getElement(fieldName);
          if (ele.canRead()) {
              retColumnInfo.columnLabel = ele.getLabel().toString();
              if (ele.getED().getInternalType() == "reference")
                  retColumnInfo.columnRef = ele.getReferenceTable();
          }
      }

      return retColumnInfo;
  };

  HRServiceCreatorUtilAjax.prototype.getElementLabel = function() {
      var retElementHTML = {};
      var elementLabel = '';

      var fieldName = this.getParameter('sysparm_element') + '';
      var fieldTable = this.getParameter('sysparm_table');

      var fieldArray = fieldName.split('.');
      var fieldLength = fieldArray.length;

      for (var i = 0; i < fieldLength; i++) {
          var jsonAssignToInfo = _getColumnLabel(fieldTable, fieldArray[i]);
          elementLabel = elementLabel + (gs.nil(elementLabel) ? '' : ' ') + jsonAssignToInfo.columnLabel;
          fieldTable = jsonAssignToInfo.columnRef;
      }

      retElementHTML.elementLabel = elementLabel;
      return new global.JSON().encode(retElementHTML);
  };

  HRServiceCreatorUtilAjax.prototype.getParentCaseList = function() {
      var coeList = {
          coes: [{
              name: _getCOEName('sn_hr_core_case') + ' [sn_hr_core_case]',
              value: 'sn_hr_core_case'
          }]
      };
      var inactiveTables = gs.getProperty("sn_hr_core.inactive_tables", "");
      var coeArray = hr.TABLE_CASE_EXTENSIONS;

      for (var i = 0; i < coeArray.length; i++) {
          var coeValue = coeArray[i].toString();
          if (coeValue == 'sn_hr_core_task' || inactiveTables.indexOf(coeValue) != -1)
              continue;

          var coeName = _getCOEName(coeValue);
          coeList.coes.push({
              name: coeName + ' [' + coeValue + ']',
              value: coeValue
          });
      }

      return new global.JSON().encode(coeList);
  };

  HRServiceCreatorUtilAjax.prototype.canCreateTemplate = function() {
      var roles = new hr_Utils();
      var isHrAdmin = roles.checkUserHasRole('sn_hr_core.admin');
      if (isHrAdmin)
          return true;

      var isActivityWriter = roles.checkUserHasRole('sn_hr_le.activity_writer');
      return isActivityWriter;
  };

  var _getRecordScopeId = function(sysId, table) {
      var grScope = new GlideRecord(table);
      if (grScope.get(sysId))
          return grScope.getValue('sys_package');
      return '';
  };

  var _getScopeNameByAppId = function(appId) {
      var scopeName = new GlideRecord('sys_scope');
      scopeName.addQuery('sys_id', appId);
      scopeName.query();
      if (scopeName.next())
          return scopeName.name.toString();

      return "";
  };

  HRServiceCreatorUtilAjax.prototype.canEditTemplate = function() {
      var grTemplate = new GlideRecord('sn_hr_core_template');
      if (!grTemplate.canRead())
          return null;

      var sysid = this.getParameter('sysparm_sysid');
      var retCanEdit = {
          canEdit: '',
          isAdmin: '',
          isLEPluginActive: '',
          currentScopeName: '',
          callerScopeName: ''
      };

      var appid = gs.getCurrentApplicationId();
      var currentCallerScope = _getScopeNameByAppId(appid);

      var recScopeId = _getRecordScopeId(sysid, 'sn_hr_core_template');

      retCanEdit.isLEPluginActive = new GlidePluginManager().isActive('com.sn_hr_lifecycle_events');
      var roles = new hr_Utils();
      var isHrAdmin = roles.checkUserHasRole('sn_hr_core.admin');
      var isAdmin = gs.hasRole('admin');

      var currRecScopeName = _getScopeNameByAppId(recScopeId);

      if (isAdmin && recScopeId != '' && recScopeId != appid) {
          retCanEdit.canEdit = false;
          retCanEdit.isAdmin = true;
          retCanEdit.currentScopeName = currRecScopeName;
          retCanEdit.callerScopeName = currentCallerScope;

          return new global.JSON().encode(retCanEdit);
      }

      if (isHrAdmin) {
          retCanEdit.canEdit = true;
          retCanEdit.isAdmin = true;

          return new global.JSON().encode(retCanEdit);
      }

      var isActivityWriter = roles.checkUserHasRole('sn_hr_le.activity_writer');
      if (isActivityWriter) {
          if (sysid) {
              var owningGrp = '';
              var grOwningGrp = new GlideRecord('sn_hr_core_template');
              if (grOwningGrp.get(sysid))
                  owningGrp = grOwningGrp.owning_group;

              var grGroups = new GlideRecord('sys_user_grmember');
              grGroups.addQuery('user', gs.getUserID());
              grGroups.addQuery('group', owningGrp);
              grGroups.query();
              if (grGroups.next())
                  retCanEdit.canEdit = true;
              else
                  retCanEdit.canEdit = false;
              retCanEdit.isAdmin = false;
              return new global.JSON().encode(retCanEdit);
          }
          retCanEdit.canEdit = true;
          retCanEdit.isAdmin = false;
          return new global.JSON().encode(retCanEdit);
      } else {
          retCanEdit.canEdit = false;
          retCanEdit.isAdmin = false;
          return new global.JSON().encode(retCanEdit);
      }
  };

  var _getTemplateMap = function(sysid) {
      var retTemplateMap = {
          staticFieldsMap: {
              coe: '',
              active: 'true',
              owningGrp: {
                  name: '',
                  value: ''
              },
              show_translated_fields: 'false',
              global_short_desc: '',
              global_desc: '',
          },
          templateFieldsMap: {},
          templateFieldArray: []
      };
      var retTemplateValue = '';
      var grTemplate = new GlideRecord('sn_hr_core_template');
      if (grTemplate.get(sysid) && grTemplate.canRead()) {
          retTemplateValue = grTemplate.template.toString();

          retTemplateMap.staticFieldsMap.name = grTemplate.name.toString();
          retTemplateMap.staticFieldsMap.active = grTemplate.active.toString();
          retTemplateMap.staticFieldsMap.owningGrp.value = grTemplate.owning_group.toString();
          retTemplateMap.staticFieldsMap.owningGrp.name = grTemplate.owning_group.getDisplayValue().toString();
          retTemplateMap.staticFieldsMap.coe = grTemplate.table.toString();
          retTemplateMap.staticFieldsMap.assignmentType = grTemplate.assignment_type.toString();
          retTemplateMap.staticFieldsMap.assignmentOption = grTemplate.assignment_option.toString();
          retTemplateMap.staticFieldsMap.parentTable = grTemplate.parent_case_table.toString();
          retTemplateMap.staticFieldsMap.assignTo = grTemplate.assign_to.toString();
          retTemplateMap.staticFieldsMap.useAssignmentDate = grTemplate.use_assignment_date.toString();
          retTemplateMap.staticFieldsMap.dateSource = grTemplate.due_date_source.toString();
          retTemplateMap.staticFieldsMap.dateOffset = grTemplate.date_offset_type.toString();
          retTemplateMap.staticFieldsMap.dateUnits = grTemplate.date_offset_units.toString();
          retTemplateMap.staticFieldsMap.dateQuantity = grTemplate.date_offset_quantity.toString();
          //translation fields
          retTemplateMap.staticFieldsMap.show_translated_fields = grTemplate.show_translated_fields.toString();
          retTemplateMap.staticFieldsMap.global_short_desc = grTemplate.short_description_for_employee.getDisplayValue();
          retTemplateMap.staticFieldsMap.global_desc = grTemplate.description_for_employee.getDisplayValue();
      }
      var tempArray = retTemplateValue.split('^');
      for (var i = 0; i < tempArray.length - 1; i++) {
          var idx = tempArray[i].indexOf('=');
          retTemplateMap.templateFieldsMap[tempArray[i].substr(0, idx)] = tempArray[i].substr(idx + 1, tempArray[i].length);
          retTemplateMap.templateFieldArray.push(tempArray[i].substr(0, idx));
      }
      return retTemplateMap;
  };

  var _getElements = function(coe) {
      var grDictionary = new GlideRecord(coe);
      grDictionary.initialize();

      return grDictionary.getElements();
  };

  var _arraySplice = function(arry, idx, val) {
      var index = idx;
      var length = arry.length;
      while (length < index) {
          arry[index - 1] = '';
          index--;
      }
      arry[idx] = val;
  };

  var _arrayClean = function(arry, deleteValue) {
      for (var i = 0; i < arry.length; i++) {
          if (arry[i] == deleteValue) {
              arry.splice(i, 1);
              i--;
          }
      }
  };

  var _isFieldActive = function(field, table) {
      var grDictionary = new GlideRecord('sys_dictionary');
      grDictionary.addQuery('element', field);
      grDictionary.addQuery('name', table);
      grDictionary.query();

      if (grDictionary.next())
          return grDictionary.active;
      else
          return false;
  };

  var _getCurrencyList = function(field, table) {
      var list = [];
      var grCurr = new GlideRecord(table);
      grCurr.initialize();
      var ele = grCurr.getElement(field);
      var refCode = ele.getSessionCurrencyCode();
      list.push({
          label: refCode + '',
          value: refCode + ''
      });
      var currencyTypes = new GlideRecord('fx_currency');
      currencyTypes.addActiveQuery();
      currencyTypes.orderBy('code');
      currencyTypes.query();
      while (currencyTypes.next())
          if (currencyTypes.code != refCode) list.push({
              label: currencyTypes.code + '',
              value: currencyTypes.code + ''
          });

      return list;
  };

  var _getBooleanList = function(addNone) {
      var boolList = [];
      if (addNone)
          boolList.push({
              label: gs.getMessage('-- None --'),
              value: ''
          });
      boolList.push({
          label: gs.getMessage('True'),
          value: 'true'
      });
      boolList.push({
          label: gs.getMessage('False'),
          value: 'false'
      });

      return boolList;
  };

  var _getReferenceDetails = function(field, tablename, coe) {
      var refDetails = {};

      var grReference = new GlideRecord('sys_dictionary');
      grReference.addQuery('name', tablename);
      grReference.addQuery('element', field);
      grReference.query();
      if (grReference.next()) {
          refDetails.reference = grReference.reference.toString();
          refDetails.qualifier = '';
      }

      return refDetails;
  };

  var _getReferenceDisp = function(refSysid, refTable) {
      var grRefTable = new GlideRecord(refTable);
      if (grRefTable.get(refSysid))
          return grRefTable.getDisplayValue().toString();

      return '';
  };

  var _getListValues = function(listValues, listTable) {
      var arrayAvailableOptions = {
          availableOptions: [],
          value: []
      };
      var qry = 'sys_idIN' + listValues;
      var grList = new GlideRecord(listTable);
      grList.addEncodedQuery(qry);
      grList.query();

      while (grList.next()) {
          arrayAvailableOptions.availableOptions.push({
              name: grList.getDisplayValue().toString(),
              value: grList.sys_id.toString()
          });
          arrayAvailableOptions.value.push(grList.sys_id.toString());
      }

      return arrayAvailableOptions;
  };

  var _getChoiceInteger = function(field, tablename) {
      var grDictionary = new GlideRecord('sys_dictionary');
      grDictionary.addQuery('element', field);
      grDictionary.addQuery('name', tablename);
      grDictionary.query();

      if (grDictionary.next())
          return grDictionary.choice.toString();

      return '';
  };

  var _getTemplateFieldDetails = function(elementName, elementValue, elementTable, elementType, coe, isChoice, jsonTemplateMap, templateFieldArray, arrayExcludeFields, canWrite) {
      var retTempFieldDetails = {
          templateField: {},
          onPage: '',
          validField: '',
          idx: ''
      };

      var templateField = {};
      if (arrayExcludeFields.indexOf(elementValue) == -1 && _isFieldActive(elementValue, elementTable)) {
          if (elementType == "reference" || elementType == "glide_list") {
              var refDetails = _getReferenceDetails(elementValue, elementTable, coe);
              templateField.reference = refDetails.reference;
              templateField.qualifier = refDetails.qualifier;
          }

          if (elementType != "variables" && (elementValue.indexOf("sys_") < 0)) {
              retTempFieldDetails.validField = true;
              templateField.display = elementName;
              templateField.name = elementValue;
              templateField.type = elementType;
              templateField.table = coe;
              templateField.canWrite = canWrite;
              templateField.booleanList = _getBooleanList();
              templateField.choiceInteger = _getChoiceInteger(elementValue, elementTable);
              templateField.isChoice = isChoice;
              if ((elementType == 'integer' || elementType == 'string') && (templateField.choiceInteger == 1 || templateField.choiceInteger == 3))
                  templateField.choiceList = _getChoiceList(templateField.name, templateField.table);
              templateField.choiceValue = '';
              if (elementType == 'currency')
                  templateField.currencyList = _getCurrencyList(elementValue, coe);
              if (templateField.name in jsonTemplateMap) {
                  retTempFieldDetails.idx = templateFieldArray.indexOf(templateField.name);
                  if (elementType == "reference") {
                      templateField.refValue = jsonTemplateMap[templateField.name];
                      templateField.refDisp = _getReferenceDisp(jsonTemplateMap[templateField.name], templateField.reference);
                      retTempFieldDetails.onPage = true;
                  } else if (elementType == "glide_list") {
                      var listInfo = _getListValues(jsonTemplateMap[templateField.name], templateField.reference);
                      templateField.availableOptions = listInfo.availableOptions;
                      templateField.value = listInfo.value;
                      retTempFieldDetails.onPage = true;
                  } else if ((elementType == 'glide_duration') || (elementType == 'timer') || (elementType == 'currency')) {
                      templateField.value = jsonTemplateMap[templateField.name];
                      retTempFieldDetails.onPage = true;
                  } else if ((elementType == 'integer' || elementType == 'string') && (templateField.choiceInteger == 1 || templateField.choiceInteger == 3)) {
                      templateField.choiceValue = jsonTemplateMap[templateField.name];
                      retTempFieldDetails.onPage = true;
                  } else if (elementType == 'boolean') {
                      templateField.boolValue = jsonTemplateMap[templateField.name];
                      retTempFieldDetails.onPage = true;
                  } else if ((elementType == 'journal_list') || (elementType == 'journal_input') || (elementType == 'user_input') || (elementType == 'journal') || (elementType == 'translated_html') || (elementType == 'html')) {
                      templateField.value = jsonTemplateMap[templateField.name];
                      retTempFieldDetails.onPage = true;
                  } else if ((elementType == 'integer' || elementType == 'string' || elementType == 'percent_complete' || elementType == 'url') && (templateField.choiceInteger == 0)) {
                      templateField.value = jsonTemplateMap[templateField.name];
                      retTempFieldDetails.onPage = true;
                  } else if ('assigned_to' in jsonTemplateMap) {
                      templateField.assignedTo.value = jsonTemplateMap['assigned_to'].toString();
                      templateField.assignedTo.name = _getReferenceDisp(jsonTemplateMap['assigned_to'], 'sys_user');
                  } else {
                      templateField.value = jsonTemplateMap[templateField.name];
                      retTempFieldDetails.onPage = false;
                  }
              } else {
                  templateField.value = '';
                  retTempFieldDetails.onPage = false;
              }
          } else
              retTempFieldDetails.validField = false;
      }
      retTempFieldDetails.templateField = templateField;

      return retTempFieldDetails;
  };

  HRServiceCreatorUtilAjax.prototype.getTemplateInfo = function() {
      var staticFieldInfo = {
          'short_description': '',
          'skills': '',
          'assignment_group': '',
          'priority': '',
          'assigned_to': ''
      };

      var excludeFields = gs.getProperty('sn_hr_core.template_exclude_fields');
      var arrayExcludeFields = [];

      if (excludeFields)
          arrayExcludeFields = excludeFields.replace(/ /g, '').split(',');

      var jsonTemplateInfo = {
          name: '',
          active: 'true',
          coe: '',
          shortDescription: '',
          assigned_to: '',
          availableSkillOptions: [],
          skillValue: [],
          show_translated_fields: 'false',
          global_short_desc: '',
          global_desc: '',
          owningGrp: {
              name: '',
              value: ''
          },
          assignmentGroup: {
              name: '',
              value: ''
          },
          assignedTo: {
              name: '',
              value: ''
          },
          priority: '',
          assignmentOption: '',
          priorityList: [],
          templateFields: [],
          newTemplateFields: []
      };

      var grTemplate = new GlideRecord('sn_hr_core_template');
      var sysid = this.getParameter('sysparm_sysid');
      if (!grTemplate.canRead() && !gr.canCreate())
          return null;
          
      var coe;
  	if(!gs.nil(this.getParameter('sysparm_coe')))
  		coe = String(this.getParameter('sysparm_coe'));


      var jsonTemplateFieldValues = _getTemplateMap(sysid);
      var jsonTemplateMap = jsonTemplateFieldValues.templateFieldsMap;
      var templateFieldArray = jsonTemplateFieldValues.templateFieldArray;
      jsonTemplateInfo.name = jsonTemplateFieldValues.staticFieldsMap.name;
      jsonTemplateInfo.active = jsonTemplateFieldValues.staticFieldsMap.active;
      jsonTemplateInfo.coe = jsonTemplateFieldValues.staticFieldsMap.coe;
      jsonTemplateInfo.owningGrp.name = jsonTemplateFieldValues.staticFieldsMap.owningGrp.name;
      jsonTemplateInfo.owningGrp.value = jsonTemplateFieldValues.staticFieldsMap.owningGrp.value;
      jsonTemplateInfo.assignmentOption = jsonTemplateFieldValues.staticFieldsMap.assignmentOption;
      // Translation fields
      jsonTemplateInfo.show_translated_fields = jsonTemplateFieldValues.staticFieldsMap.show_translated_fields;
      jsonTemplateInfo.global_short_desc = jsonTemplateFieldValues.staticFieldsMap.global_short_desc;
      jsonTemplateInfo.global_desc = jsonTemplateFieldValues.staticFieldsMap.global_desc;

      coe = coe ? coe : jsonTemplateInfo.coe;
      jsonTemplateInfo.priorityList = _getChoiceList('priority', coe);
      var grElements = coe ? _getElements(coe) : '';
      var elementsLength = grElements.length;
      var newTemplateFields = [];
      for (var i = 0; i < elementsLength; i++) {
          var qualifier = '';
          var elementName = grElements[i].getLabel().toString();
          var elementValue = grElements[i].getName().toString();
          var elementTable = grElements[i].getED().getTableName().toString();
          var elementType = grElements[i].getED().getInternalType().toString();
          var isChoice = grElements[i].getED().isChoiceTable().toString();
          var canWrite = 'true';
          var canRead = 'true';

          var templateField = {};
          if (elementType == 'glide_date_time' || elementType == 'due_date' || elementType == 'glide_date' || elementType == 'date' || elementType == 'datetime' || elementType == 'integer_date' || elementType == 'schedule_date_time')
              continue;

          if (elementValue in staticFieldInfo) {
              if ('short_description' in jsonTemplateMap)
                  jsonTemplateInfo.shortDescription = jsonTemplateMap['short_description'];
              if ('rich_description' in jsonTemplateMap)
                  jsonTemplateInfo.rich_description = jsonTemplateMap['rich_description'];
              if ('assigned_to' in jsonTemplateMap) {
                  jsonTemplateInfo.assignedTo.value = jsonTemplateMap['assigned_to'].toString();
                  jsonTemplateInfo.assignedTo.name = _getReferenceDisp(jsonTemplateMap['assigned_to'], 'sys_user');
              }
              if ('skills' in jsonTemplateMap) {
                  var skillInfo = _getListValues(jsonTemplateMap['skills'], 'cmn_skill');
                  jsonTemplateInfo.availableSkillOptions = skillInfo.availableOptions;
                  jsonTemplateInfo.skillValue = skillInfo.value;
              }
              if ('assignment_group' in jsonTemplateMap) {
                  jsonTemplateInfo.assignmentGroup.value = jsonTemplateMap['assignment_group'].toString();
                  jsonTemplateInfo.assignmentGroup.name = _getReferenceDisp(jsonTemplateMap['assignment_group'], 'sys_user_group');
              }
              if ('priority' in jsonTemplateMap)
                  jsonTemplateInfo.priority = jsonTemplateMap['priority'];
              continue;
          }

          if (canRead == 'true') {
              var templateFieldDetails = _getTemplateFieldDetails(elementName, elementValue, elementTable, elementType, coe, isChoice, jsonTemplateMap, templateFieldArray, arrayExcludeFields, canWrite);
              if (templateFieldDetails.validField)
                  if (templateFieldDetails.onPage)
                      _arraySplice(newTemplateFields, templateFieldDetails.idx, templateFieldDetails.templateField);
                  else
                      jsonTemplateInfo.templateFields.push(templateFieldDetails.templateField);
          }
      }
      _arrayClean(newTemplateFields, '');
      jsonTemplateInfo.newTemplateFields = newTemplateFields;
      jsonTemplateInfo.coe = coe;
      return new global.JSON().encode(jsonTemplateInfo);
  };

  HRServiceCreatorUtilAjax.prototype.getTaskTemplateInfo = function() {
      var staticFieldInfo = {
          'short_description': '',
          'optional': '',
          'hr_task_type': '',
          'state': '',
          'set_reminder': '',
          'when_to_send': '',
          'interval': '',
          'email_template': '',
          'task_support_team': '',
          'parent_case_users': '',
          'groups': '',
          'queue': '',
          'assigned_to': '',
          'skills': '',
          'assignment_group': '',
          'show_translated_fields': 'false',
          'global_short_desc': '',
          'global_desc': '',
      };

      var excludeFields = gs.getProperty('sn_hr_core.template_exclude_fields');
      var arrayExcludeFields = [];

      if (excludeFields)
          arrayExcludeFields = excludeFields.replace(/ /g, '').split(',');

      var jsonTemplateInfo = {
          name: '',
          shortDescription: '',
          optional: '',
          active: 'true',
          owningGrp: {
              name: '',
              value: ''
          },
          setReminder: '',
          whenToSend: '',
          reminderInterval: '',
          reminderTemplate: {
              name: '',
              value: ''
          },
          assignedTo: {
              name: '',
              value: ''
          },
          parentTable: '',
          assignTo: '',
          assignmentType: '',
          assignmentOption: '',
          useAssignmentDate: '',
          dueDateInfo: {},
          hr_task_type: '',
          checklistInfo: [],
          state: '',
          templateFields: [],
          newTemplateFields: [],
          messages: {
              'Select user': gs.getMessage('Select user'),
              'Select date': gs.getMessage('Select date')
          },
          task_support_team: '',
          parent_case_users: '',
          groups: '',
          queue: {
              value: '',
              displayValue: ''
          },
          assignmentGroup: {
              name: '',
              value: ''
          },
          availableSkillOptions: [],
          skillValue: []
      };

      var grTemplate = new GlideRecord('sn_hr_core_template');
      var sysid = this.getParameter('sysparm_sysid');
      if (!grTemplate.canRead() && !grTemplate.canCreate())
          return null;

      var coe = this.getParameter('sysparm_coe');
      var jsonTemplateFieldValues = _getTemplateMap(sysid);
      var jsonTemplateMap = jsonTemplateFieldValues.templateFieldsMap;
      var templateFieldArray = jsonTemplateFieldValues.templateFieldArray;
      jsonTemplateInfo.name = jsonTemplateFieldValues.staticFieldsMap.name;
      jsonTemplateInfo.active = jsonTemplateFieldValues.staticFieldsMap.active;
      jsonTemplateInfo.owningGrp.name = jsonTemplateFieldValues.staticFieldsMap.owningGrp.name;
      jsonTemplateInfo.owningGrp.value = jsonTemplateFieldValues.staticFieldsMap.owningGrp.value;
      jsonTemplateInfo.assignmentType = jsonTemplateFieldValues.staticFieldsMap.assignmentType;
      jsonTemplateInfo.assignmentOption = jsonTemplateFieldValues.staticFieldsMap.assignmentOption;
      jsonTemplateInfo.parentTable = jsonTemplateFieldValues.staticFieldsMap.parentTable;
      jsonTemplateInfo.assignTo = jsonTemplateFieldValues.staticFieldsMap.assignTo;
      jsonTemplateInfo.useAssignmentDate = jsonTemplateFieldValues.staticFieldsMap.useAssignmentDate;
      jsonTemplateInfo.dueDateInfo.dateSource = jsonTemplateFieldValues.staticFieldsMap.dateSource;
      jsonTemplateInfo.dueDateInfo.dateOffset = jsonTemplateFieldValues.staticFieldsMap.dateOffset;
      jsonTemplateInfo.dueDateInfo.dateUnits = jsonTemplateFieldValues.staticFieldsMap.dateUnits;
      jsonTemplateInfo.dueDateInfo.dateQuantity = jsonTemplateFieldValues.staticFieldsMap.dateQuantity;
      // Translation fields
      jsonTemplateInfo.show_translated_fields = jsonTemplateFieldValues.staticFieldsMap.show_translated_fields;
      jsonTemplateInfo.global_short_desc = jsonTemplateFieldValues.staticFieldsMap.global_short_desc;
      jsonTemplateInfo.global_desc = jsonTemplateFieldValues.staticFieldsMap.global_desc;

      var grElements = _getElements(coe);
      var elementsLength = grElements.length;
      var newTemplateFields = [];
      for (i = 0; i < elementsLength; i++) {
          var qualifier = '';
          var elementName = grElements[i].getLabel().toString();
          var elementValue = grElements[i].getName().toString();
          var elementTable = grElements[i].getED().getTableName().toString();
          var elementType = grElements[i].getED().getInternalType().toString();
          var isChoice = grElements[i].getED().isChoiceTable().toString();
          var canWrite = 'true';
          var canRead = 'true';
          if (elementValue === 'rich_description' && elementName === 'Description')
            elementName = 'Rich Description';

          var templateField = {};
          if (elementType == 'glide_date_time' || elementType == 'due_date' || elementType == 'glide_date' || elementType == 'date' || elementType == 'datetime' || elementType == 'integer_date' || elementType == 'schedule_date_time')
              continue;

          if (elementValue in staticFieldInfo) {
              if ('short_description' in jsonTemplateMap)
                  jsonTemplateInfo.shortDescription = jsonTemplateMap['short_description'];
              if ('rich_description' in jsonTemplateMap)
                  jsonTemplateInfo.rich_description = jsonTemplateMap['rich_description'];
              if ('optional' in jsonTemplateMap)
                  jsonTemplateInfo.optional = jsonTemplateMap['optional'];
              if ('hr_task_type' in jsonTemplateMap)
                  jsonTemplateInfo.hr_task_type = jsonTemplateMap['hr_task_type'];
              if ('state' in jsonTemplateMap)
                  jsonTemplateInfo.state = jsonTemplateMap['state'];
              if ('set_reminder' in jsonTemplateMap)
                  jsonTemplateInfo.setReminder = jsonTemplateMap['set_reminder'];
              if ('when_to_send' in jsonTemplateMap)
                  jsonTemplateInfo.whenToSend = jsonTemplateMap['when_to_send'];
              if ('interval' in jsonTemplateMap)
                  jsonTemplateInfo.reminderInterval = jsonTemplateMap['interval'];
              if ('email_template' in jsonTemplateMap) {
                  jsonTemplateInfo.reminderTemplate.value = jsonTemplateMap['email_template'].toString();
                  jsonTemplateInfo.reminderTemplate.name = _getReferenceDisp(jsonTemplateMap['email_template'], 'sn_hr_core_email_content');
              }
              if ('assigned_to' in jsonTemplateMap) {
                  jsonTemplateInfo.assignedTo.value = jsonTemplateMap['assigned_to'].toString();
                  jsonTemplateInfo.assignedTo.name = _getReferenceDisp(jsonTemplateMap['assigned_to'], 'sys_user');
              }
              if ('task_support_team' in jsonTemplateMap)
                  jsonTemplateInfo.task_support_team = jsonTemplateMap['task_support_team'];
              if ('parent_case_users' in jsonTemplateMap)
                  jsonTemplateInfo.parent_case_users = _getListValues(jsonTemplateMap['parent_case_users'], 'sn_hr_core_service_approval_option');
              if ('groups' in jsonTemplateMap)
                  jsonTemplateInfo.groups = _getListValues(jsonTemplateMap['groups'], 'sys_user_group');
              if ('queue' in jsonTemplateMap) {
                  jsonTemplateInfo.queue.value = jsonTemplateMap['queue'].toString();
                  jsonTemplateInfo.queue.displayValue = _getReferenceDisp(jsonTemplateMap['queue'], 'chat_queue');
              }
              if ('skills' in jsonTemplateMap) {
                  var skillInfo = _getListValues(jsonTemplateMap['skills'], 'cmn_skill');
                  jsonTemplateInfo.availableSkillOptions = skillInfo.availableOptions;
                  jsonTemplateInfo.skillValue = skillInfo.value;
              }
              if ('assignment_group' in jsonTemplateMap) {
                  jsonTemplateInfo.assignmentGroup.value = jsonTemplateMap['assignment_group'].toString();
                  jsonTemplateInfo.assignmentGroup.name = _getReferenceDisp(jsonTemplateMap['assignment_group'], 'sys_user_group');
              }
              continue;
          }

          if (canRead == 'true') {
              var templateFieldDetails = _getTemplateFieldDetails(elementName, elementValue, elementTable, elementType, coe, isChoice, jsonTemplateMap, templateFieldArray, arrayExcludeFields, canWrite);
              if (templateFieldDetails.validField)
                  if (templateFieldDetails.onPage)
                      _arraySplice(newTemplateFields, templateFieldDetails.idx, templateFieldDetails.templateField);
                  else
                      jsonTemplateInfo.templateFields.push(templateFieldDetails.templateField);
              //Adding Checklist info if task type is Checklist
              if (jsonTemplateInfo.hr_task_type == 'checklist') {
                  var checklistInfo = new sn_hr_core.hr_ChecklistUtil().getChecklistItems(sysid);
                  if (checklistInfo)
                      jsonTemplateInfo.checklistInfo = checklistInfo;
              }
          }
      }
      _arrayClean(newTemplateFields, '');
      jsonTemplateInfo.newTemplateFields = newTemplateFields;
      return new global.JSON().encode(jsonTemplateInfo);
  };

  var _saveHRCoreTemplate = function(data, name, active, owningGrp, coe, sysid, assignmentType, assignmentOption, parentTable, assignTo, useAssignmentDate, dateInfo, taskTemplate, show_translated_fields, global_short_desc, global_desc) {
      var retResult = {};
      var grSaveTemplate = new GlideRecord('sn_hr_core_template');
      if (!grSaveTemplate.get(sysid))
          grSaveTemplate.initialize();

      grSaveTemplate.table = coe;
      grSaveTemplate.template = data;
      grSaveTemplate.name = name;
      grSaveTemplate.active = active;
      grSaveTemplate.owning_group = owningGrp;
      // translation fields
      grSaveTemplate.show_translated_fields = show_translated_fields;
      grSaveTemplate.short_description_for_employee.setDisplayValue(global_short_desc);
      grSaveTemplate.description_for_employee.setDisplayValue(global_desc);
      if (taskTemplate) {
          grSaveTemplate.assignment_type = assignmentType;
          grSaveTemplate.assignment_option = assignmentOption;
          grSaveTemplate.parent_case_table = parentTable;
          grSaveTemplate.assign_to = assignTo;
          grSaveTemplate.use_assignment_date = useAssignmentDate;
          grSaveTemplate.due_date_source = dateInfo.dateSource;
          grSaveTemplate.date_offset_type = dateInfo.dateOffset;
          grSaveTemplate.date_offset_units = dateInfo.dateUnits;
          grSaveTemplate.date_offset_quantity = dateInfo.dateQuantity;
      }

      if (grSaveTemplate.isValidRecord()) {
          if (grSaveTemplate.canWrite())
              retResult.sysid = grSaveTemplate.update();
      } else {
          if (!grSaveTemplate.canCreate())
              return retResult;
          retResult.sysid = grSaveTemplate.insert();
      }
      retResult.name = name;
      return retResult;
  };

  HRServiceCreatorUtilAjax.prototype.saveTemplate = function() {
      var grTemplate = new GlideRecord('sn_hr_core_template');
      var sysid = this.getParameter('sysparm_sysid');
      if (!grTemplate.canWrite() && !grTemplate.canCreate())
          return null;

      var jsonResult = {};
      var data = this.getParameter('sysparm_data');
      var hrSysid = this.getParameter('sysparm_hrsysid');
      var coe = this.getParameter('sysparm_coe');
      var name = this.getParameter('sysparm_templatename');
      var active = this.getParameter('sysparm_active');
      var owningGrp = this.getParameter('sysparm_owning');
      var assignmentOption = this.getParameter('sysparm_assignmentOption');
      var assignmentType = '';
      var parentTable = '';
      var assignTo = '';
      var useAssignmentDate = '';
      var dateInfo = {
          dateSource: '',
          dateOffset: '',
          dateUnits: '',
          dateQuantity: ''
      };

      var show_translated_fields = this.getParameter('sysparm_show_translated_fields');
      var global_short_desc = this.getParameter('sysparm_global_short_desc');
      var global_desc = this.getParameter('sysparm_global_desc');
      var result = _saveHRCoreTemplate(data, name, active, owningGrp, coe, sysid, assignmentType, assignmentOption, parentTable, assignTo, useAssignmentDate, dateInfo, false, show_translated_fields, global_short_desc, global_desc);
      jsonResult.sysid = result.sysid;
      jsonResult.name = result.name;

      return new global.JSON().encode(jsonResult);
  };

  HRServiceCreatorUtilAjax.prototype.saveTaskTemplate = function() {
      var grTemplate = new GlideRecord('sn_hr_core_template');
      var sysid = this.getParameter('sysparm_sysid');
      if (!grTemplate.canWrite() && !grTemplate.canCreate())
          return null;

      var checklistInfo = JSON.parse(this.getParameter('sysparm_checklistInfo'));
      if (checklistInfo && checklistInfo.length > 0) {
          var checklistTable = this.getParameter('sysparm_checklistTable');
          new sn_hr_core.hr_ChecklistUtil().updateChecklist(sysid, checklistInfo, checklistTable);
      }
      var jsonResult = {};
      var data = this.getParameter('sysparm_data');
      var hrSysid = this.getParameter('sysparm_hrsysid');
      var orderTaskId = this.getParameter('sysparm_ordertaskid');
      var coe = this.getParameter('sysparm_coe');
      var name = this.getParameter('sysparm_templatename');
      var active = this.getParameter('sysparm_active');
      var owningGrp = this.getParameter('sysparm_owning');
      var assignmentType = this.getParameter('sysparm_assigntype');
      var assignmentOption = this.getParameter('sysparm_assignmentOption');
      var parentTable = this.getParameter('sysparm_parenttable');
      var assignTo = this.getParameter('sysparm_assignto');
      var useAssignmentDate = this.getParameter('sysparm_useassignmentdate');
      var dateInfo = {};
      dateInfo.dateSource = this.getParameter('sysparm_datesource');
      dateInfo.dateOffset = this.getParameter('sysparm_dateoffset');
      dateInfo.dateUnits = this.getParameter('sysparm_dateunits');
      dateInfo.dateQuantity = this.getParameter('sysparm_datequantity');
      var show_translated_fields = this.getParameter('sysparm_show_translated_fields');
      var global_short_desc = this.getParameter('sysparm_global_short_desc');
      var global_desc = this.getParameter('sysparm_global_desc');
      var result = _saveHRCoreTemplate(data, name, active, owningGrp, coe, sysid, assignmentType, assignmentOption, parentTable, assignTo, useAssignmentDate, dateInfo, true, show_translated_fields, global_short_desc, global_desc);
      jsonResult.sysid = result.sysid;
      jsonResult.name = result.name;
      return new global.JSON().encode(jsonResult);
  };

  HRServiceCreatorUtilAjax.prototype.getTinyMCEConfig = function() {
      var config = {
          toolbar: [
              gs.getProperty('glide.ui.html.editor.v4.toolbar.line1'),
              gs.getProperty('glide.ui.html.editor.v4.toolbar.line2')
          ],
          plugins: gs.getProperty('glide.ui.html.editor.v4.enabled_plugins'),
          font_formats: gs.getProperty('glide.ui.html.editor.v4.font.collection'),
          fullpage_default_font_family: gs.getProperty('glide.ui.html.editor.v4.font.collection'),
          convert_urls: gs.getProperty('glide.ui.html.editor.convert_urls'),
          relative_urls: gs.getProperty('glide.ui.html.editor.relative_urls'),
          allow_script_urls: gs.getProperty('glide.ui.html.image.allow_url'),
          menubar: false,
          branding: false,
          remove_trailing_brs: true,
          extended_valid_elements: gs.getProperty(' glide.ui.html.editor.extended_valid_elements')
      };
      var answer = new global.JSON().encode(config);
      return answer;
  };
})();

Sys ID

0db2d96c3b8032005a10695593efc432

Offical Documentation

Official Docs: