Name

global.FixProgramPortfolioIndex

Description

No description available

Script

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

  uniqueValues: function(table, column, filterQuery) {
      // //gs.info("Into uniqueValues: " + table + "-" + column + "-" + filterQuery);
      var uniqueIds = [];
      var unique = new GlideAggregate(table);
      unique.addAggregate('COUNT', column);
      unique.setGroup(true);
      unique.groupBy(column);
      if(JSUtil.notNil(filterQuery));
          unique.addEncodedQuery(filterQuery);
      unique.query();
      //gs.info("uniqueValues Query: " + unique.getEncodedQuery());
      while(unique.next()) {
          uniqueIds.push(unique.getValue(column));
      }
      return uniqueIds;
  },

  contextRows: function(table, filterQuery, orderBy) {
      // //gs.info("Into contextRows: " + table + "-" + filterQuery + "-" + orderBy);
      var gr = new GlideRecord(table);
      gr.addEncodedQuery(filterQuery);
      gr.orderBy(orderBy);
      gr.query();
      //gs.info("contextRows Query: " + gr.getEncodedQuery());
      return gr;
  },

  updateIndexes: function(table, context, contextId, groupBy, orderBy) {
      // //gs.info("Into updateIndexs: " + table + "-" + context + "-" + contextId + "-" + orderBy);
      var count = 1;
      var filterQuery = context + "=" +contextId;
      var fiscalYearIds = this.uniqueValues(table, groupBy, filterQuery);
      for (var i = 0; i < fiscalYearIds.length; i++) {
          var contextFilterQuery =  filterQuery + "^" + groupBy + "=" + fiscalYearIds[i];
          var contextRows = this.contextRows(table, contextFilterQuery, orderBy);
          while(contextRows.next()) {
              contextRows[context] = count;
              contextRows.setWorkflow(false);
              contextRows.update();
              count += 1;
          }
      };
  },

  fixIndexes: function() {
      // //gs.info("Into fixIndexes");
      var table = "project_funding";
      var groupBy = "fiscal_period";
      this.fixProgramIndexes(table, groupBy);
      this.fixPortfolioIndexes(table, groupBy);
  },

  fixProgramIndexes: function(table, groupBy) {
      // //gs.info("Into fixProgramIndexes");
      var context = "program";
      var programIds = this.uniqueValues(table, context);
      //gs.info("programIds: " + programIds.join(","));
      for (var i = 0; i < programIds.length; i++) {
          this.updateIndexes(table, context, programIds[i],  groupBy, "program_index");
      }
  },

  fixPortfolioIndexes: function(table, groupBy) {
      // //gs.info("Into fixPortfolioIndexes");
      var context = "portfolio";
      var portfolioIds = this.uniqueValues(table, context);
      //gs.info("portfolioIds: " + portfolioIds.join(","));
      for (var i = 0; i < portfolioIds.length; i++) {
          this.updateIndexes(table, context, portfolioIds[i], groupBy, "portfolio_index");
      }
  },

  type: 'FixProgramPortfolioIndex'
};

Sys ID

c8862ade9f231200598a5bb0657fcf9c

Offical Documentation

Official Docs: