Name

sn_grc.LicenseStrategy

Description

No description available

Script

var LicenseStrategy = Class.create();
LicenseStrategy.prototype = {
  initialize: function() {

  },

  updateLightUserAudit: function(tableName, operation, user) {
      var operationName = this._getOperationField(operation);
      var timeStamp = this.getCurrentMonthAccrualPeriod();
      var gr = new GlideRecord("sn_grc_light_user_audit");
      gr.addQuery("table_name", tableName);
      gr.addQuery("user", user);
      gr.addQuery("accrual_period", timeStamp);
      gr.query();
      if (gr.next()) {
          var operationValue = gr.getValue(operationName);
          gr.setValue(operationName, parseInt(operationValue) + 1);
          gr.update();
      } else {
          this._createLiteUserRecord(tableName, user, timeStamp, operationName);
      }
  },

  updateUniqueUserTable: function(user) {
      var timeStamp = this.getCurrentMonthAccrualPeriod();
      this.addToGRCUsageTable(user, timeStamp);
  },

  copyLightUserPrevDayTableData: function() {
      var lightUserUsageEntry = new GlideRecord("sn_grc_light_user_audit");
      var g1 = new GlideDateTime();
      g1.addDaysUTC(-1);
      var g2 = new GlideDateTime(g1.getDate() + " 00:00:00");
      lightUserUsageEntry.addQuery("sys_updated_on", ">=", g2);
      lightUserUsageEntry.query();
      while (lightUserUsageEntry.next()) {
          this._addLightUserToGRCUsageTable(lightUserUsageEntry.user, lightUserUsageEntry.accrual_period);
      }
  },

  copyPrevDayTableData: function() {
      var uaUsageEntry = new GlideRecord("ua_app_usage");
      uaUsageEntry.addQuery("produce_count", "!=", 0);
      uaUsageEntry.addQuery("app_id", 'IN', this._getApps());
      var g1 = new GlideDateTime();
      g1.addDaysUTC(-1);
      var g2 = new GlideDateTime(g1.getDate() + " 00:00:00");
      uaUsageEntry.addQuery("sys_updated_on", ">=", g2);
      uaUsageEntry.query();
      while (uaUsageEntry.next()) {
          this.addToGRCUsageTable(uaUsageEntry.user, uaUsageEntry.time_stamp);
      }
  },

  updateUniqueUsageTable: function(asmt) {
      var user;
      if (asmt.getTableName() == 'asmt_assessment_instance')
          user = asmt.user;
      else
          user = asmt.assigned_to;
      var timeStamp = this.getCurrentMonthAccrualPeriod();
      this.addToGRCUsageTable(user, timeStamp);
  },

  getLastMonthAccrualPeriod: function() {
      var month = new GlideDateTime(gs.beginningOfLastMonth()).getMonthLocalTime();
      var year = new GlideDateTime(gs.beginningOfLastMonth()).getYearLocalTime();
      var timeStamp = year + "-" + month;
      if (month < 10)
          timeStamp = year + "-0" + month;
      return timeStamp;
  },

  _createLiteUserRecord: function(tableName, user, timeStamp, operationName) {
      try {
          gr = new GlideRecord("sn_grc_light_user_audit");
          gr.initialize();
          gr.setValue("table_name", tableName);
          gr.setValue("user", user);
          gr.setValue(operationName, 1);
          gr.setValue("accrual_period", timeStamp);
          gr.insert();
      } catch (e) {}
  },

  _getOperationField: function(operation) {
      if (operation == "update") {
          return "update_count";
      } else if (operation == "insert") {
          return "insert_count";
      } else if (operation == "delete") {
          return "delete_count";
      }
  },

  _hasUniqueUserUsageEntry: function(user, accrual_period) {
      var usageEntry = new GlideRecord(this.uniqueUserTableName);
      usageEntry.addQuery("user", user);
      usageEntry.addQuery("accrual_period", accrual_period);
      usageEntry.setLimit(1);
      usageEntry.query();
      return usageEntry.hasNext();
  },

  _createUniquerUserUsageRecord: function(user, accrual_period, isLiteuser) {
      try {
          var usageEntry = new GlideRecord(this.uniqueUserTableName);
          usageEntry.setValue("user", user);
          usageEntry.setValue("accrual_period", accrual_period);
          usageEntry.setValue("is_light_user", isLiteuser);
          usageEntry.insert();
      } catch (e) {}
  },

  _getUniqueUserUsageEntry: function(user, accrual_period) {
      var usageEntry = new GlideRecord(this.uniqueUserTableName);
      usageEntry.addQuery("user", user);
      usageEntry.addQuery("accrual_period", accrual_period);
      usageEntry.setLimit(1);
      usageEntry.query();
      if (usageEntry.next())
          return usageEntry;
      else
          return null;
  },

  _addLightUserToGRCUsageTable: function(user, accrual_period) {
      if (!this._hasUniqueUserUsageEntry(user, accrual_period)) {
          this._createUniquerUserUsageRecord(user, accrual_period, true);
      }
  },

  addToGRCUsageTable: function(user, accrual_period) {
      //Check if the user entry exists in sn_grc_unique_user_usage and insert if not exists
      if (this._hasUniqueUserUsageEntry(user, accrual_period)) {
          var usageEntry = this._getUniqueUserUsageEntry(user, accrual_period);
          if (usageEntry.is_light_user == true && this._isOperator(user)) {
              usageEntry.setValue("is_light_user", false);
              usageEntry.update();
          }
      } else {
          this._createUniquerUserUsageRecord(user, accrual_period, false);
      }
  },

  getCurrentMonthAccrualPeriod: function() {
      var month = new GlideDateTime(gs.beginningOfThisMonth()).getMonthLocalTime();
      var year = new GlideDateTime(gs.beginningOfThisMonth()).getYearLocalTime();
      var timeStamp = year + "-" + month;
      if (month < 10)
          timeStamp = year + "-0" + month;
      return timeStamp;
  },

  _getApps: function() {
      var apps = [];
      var m2mOfApplicationFamilyApplications = new GlideRecord("sn_grc_m2m_family_application");
      m2mOfApplicationFamilyApplications.addQuery("licensable_application_family", this.appFamilyId);
      m2mOfApplicationFamilyApplications.addQuery("application_for_licensing.active", true);
      m2mOfApplicationFamilyApplications.query();

      while (m2mOfApplicationFamilyApplications.next()) {
          var pluginId = m2mOfApplicationFamilyApplications.application_for_licensing.application_name.scope;
          if (!gs.nil(pluginId)) {
              pluginId = pluginId.replace("com.", "");
              apps.push(pluginId);
          }
      }
      return apps;
  },


  _isOperator: function(user) {
      var gr = new GlideRecord('sys_user_has_role');
      gr.addQuery('user', user);
      gr.addQuery('role.name', 'sn_grc.business_user');
      gr.query();
      return gr.hasNext();
  },

  type: 'LicenseStrategy'
};

Sys ID

1395d2a8c71130100a079e0703c260c3

Offical Documentation

Official Docs: