Name

global.PortalBoardWidget

Description

Decorator on Portal Board widget

Script

var PortalBoardWidget = Class.create();

PortalBoardWidget.prototype = {
  initialize: function(id) {
  	this.gr = new GlideRecord('planned_task_custom_console_widget');
  	if(!JSUtil.nil(id))
  		this.gr.get(id);
  	this.ppmConfigHelper = new PPMConfigHelper();
  	
  },
  
  demandFilter: function() {	
      return this.gr.getValue('demand_filter');
  },
  
  projectFilter: function() {
      return this.gr.getValue('project_filter');
  },
  
  name: function() {
  	return this.gr.getDisplayValue('name');
  },
  
  color: function() {
      return this.gr.getValue('color');
  },
  
  scripted: function() {
      if(JSUtil.nil(this.gr.getValue('scripted')))
  		return false;
  	else if(this.gr.getValue('scripted')=='0')
  		return false;
  	else
  		return true;
  },
  
  script: function() {
      return this.gr.getValue('script');
  },
  
  active: function() {
      if(JSUtil.nil(this.gr.getValue('active')))
  		return false;
  	else if(this.gr.getValue('active')=='0')
  		return false;
  	else
  		return true;
  },
  
  order: function() {
      return parseInt(this.gr.getValue('order'));
  },
  
  displayOnBoard: function() {
      if(JSUtil.nil(this.gr.getValue('display_on_board')))
  		return false;
  	else if(this.gr.getValue('actdisplay_on_boardive')=='0')
  		return false;
  	else
  		return true;
  },
  
  aggregateType: function() {
      return this.gr.getValue('aggregate_type');
  },
  
  projectAggregateColumn: function() {
      return this.gr.getValue('project_aggregate_column');
  },
  
  demandAggregateColumn: function() {
      return this.gr.getValue('demand_aggregate_column');
  },
  
  formatterRequired: function() {
      return this.gr.getValue('formatter_required');
  },
  
  tableInstanceOf: function(table) {
      var gr = new GlideRecord(this.table());
      return gr.instanceOf(table);
  },
  
  getTables: function(table){
  	return this.ppmConfigHelper.getProjectTables(table);
  },
  
  getWidgetValue: function(consoleId) {
  	var retObj = {};
  	try{
  		if(this.scripted())
  			retObj = this.getScriptedWidgetValue(consoleId);
  		else
  			retObj = this.getFilterWidgetValue(consoleId);
  	}catch(e){
  		retObj["value"] = "";
  		gs.error("PortalBoardWidget:getWidgetValue:"+JSON.stringify(e));
  	}
  	
  	retObj['name'] = this.name();
  	retObj['color'] = this.color();
  	retObj['order'] = this.order();
  	retObj['sys_id'] = this.id();
  	retObj['parent'] = this.getParent();
  	retObj['show_label'] = this.getShowLabel();
  	retObj['short_description'] = this.getShortDescription();
  	retObj['children'] = [];
  	retObj['visible'] = true;
  	retObj['fullFetch'] = true;
  	return retObj;
  },
  getScriptedWidgetValue: function(consoleId) {
  	var retObj={};
  	var ptc = new PortalBoard(consoleId);
  	
  	var params = {
  			projectFilter: ptc.filter(),
  			demandFilter: ptc.table2Filter(),
  			projectClass: ptc.table(),
  			demandClass: ptc.table2(),
  			boardSysId: consoleId
  		};
  	var evaluator = new GlideScopedEvaluator();
  	var val = evaluator.evaluateScript(this.gr, 'script', params);
  	
  	retObj['value'] = val+'';
  	return retObj;
  },
  addDurations: function(prjDuration, dmnDuration){
  	var prjDur = new GlideDuration(prjDuration);
  	prjDur.add(dmnDuration);
  	return prjDur;
  },
  
  getFilterWidgetValue: function(consoleId) {
  	var ptc = new PortalBoard(consoleId);
  	var retObj={};
  	var prjAggre='';
  	var dmnAggre='';
  	var prjAggColumn='sys_id';
  	var dmnAggColumn='sys_id';
  	var dmnColumnType='string';
  	var prjColumnType='string';
  	if(this.aggregateType()!='COUNT'){
  		prjAggColumn=this.projectAggregateColumn();
  		dmnAggColumn=this.demandAggregateColumn();
  	}
  	if(!JSUtil.nil(ptc.filter())) {
  		var prjGa = new GlideAggregate(ptc.table());
  		prjColumnType=prjGa.getElement(prjAggColumn).getED().getInternalType();
  		prjGa.addAggregate(this.aggregateType(),prjAggColumn);
  		if(JSUtil.notNil(this.projectFilter()))
  			prjGa.addEncodedQuery(this.projectFilter());
  		prjGa.addEncodedQuery(ptc.filter());
  		//To avoid teamspace project/demand records
  		prjGa.addEncodedQuery('sys_class_nameIN'+this.getTables(ptc.table()));  
  		prjGa.setGroup(false);
  		prjGa.query();
  		if(prjGa.next())
  			prjAggre = prjGa.getAggregate(this.aggregateType(),prjAggColumn);
  		else
  			prjAggre = '';
  		if(JSUtil.has(prjAggre) && prjAggre!='' && prjAggColumn!='glide_duration')
  			prjAggre=parseFloat(prjAggre);
  		else if (prjColumnType!='glide_duration')
  			prjAggre = 0;
  	}
  	if(!JSUtil.nil(ptc.table2Filter())) {
  		var dmnGa = new GlideAggregate(ptc.table2());
  		dmnColumnType=dmnGa.getElement(dmnAggColumn).getED().getInternalType();
  		dmnGa.addAggregate(this.aggregateType(),dmnAggColumn);
  		if(JSUtil.notNil(this.demandFilter()))
  			dmnGa.addEncodedQuery(this.demandFilter());
  		dmnGa.addEncodedQuery(ptc.table2Filter());
  		dmnGa.addQuery('sys_class_name', ptc.table2());//To avoid teamspace project/demand records
  		dmnGa.setGroup(false);
  		dmnGa.query();
  		if(dmnGa.next())
  			dmnAggre = dmnGa.getAggregate(this.aggregateType(),dmnAggColumn);
  		else
  			dmnAggre = '';
  		if(JSUtil.has(dmnAggre) && dmnAggre!='' && dmnColumnType!='glide_duration')
  			dmnAggre=parseFloat(dmnAggre);
  		else if (dmnColumnType!='glide_duration')
  			dmnAggre = 0;
  	}
  	
  	if(this.aggregateType()=='SUM' || this.aggregateType()=='COUNT' && (dmnColumnType!='glide_duration' && prjColumnType!='glide_duration'))
  		retObj['value']=prjAggre+dmnAggre;
  	else if (dmnColumnType=='glide_duration' && prjColumnType=='glide_duration')
  		retObj['value']=this.addDurations(prjAggre,dmnAggre);
  	else
  		retObj['value']=0;
  	if(this.aggregateType()=='MIN') {
  		if(!JSUtil.notNil(prjAggre))
  			retObj['value']= dmnAggre;
  		if(!JSUtil.notNil(dmnAggre))
  			retObj['value']= prjAggre;
  		if(dmnAggre<prjAggre)
  			retObj['value']= dmnAggre;
  		else
  			retObj['value']= prjAggre;
  	}
  	
  	if(this.aggregateType()=='MAX') {
  		if(!JSUtil.notNil(prjAggre))
  			retObj['value']= dmnAggre;
  		if(!JSUtil.notNil(dmnAggre))
  			retObj['value']= prjAggre;
  		if(dmnAggre>prjAggre)
  			retObj['value']= dmnAggre;
  		else
  			retObj['value']= prjAggre;
  	}
  	return retObj;
  		
  },
  
  id: function() {
      return this.gr.getValue('sys_id');
  },
  
  isValid: function() {
  	return this.gr.isValidRecord();
  },
  
  getParent:function(){
  	return this.gr.getValue('parent');
  },
  
  getShowLabel:function(){
  	return this.gr.getValue('show_label');
  },
  
  getShortDescription:function(){
  	return this.gr.getValue('short_description');
  },
  
  //used in the form
  widgetParentFilter: function (widgetSysId) {
  	var filter = "^parentISEMPTY";
  	if(widgetSysId != -1){
  		filter += "^sys_id!=" + widgetSysId;
  	}
  	return filter;
  },
  
  getPartialWidgetValue: function() {
  	//partial values for widget in case of hidden values.
  	var retObj = {};
  	retObj['name'] = this.name();
  	retObj['order'] = this.order();
  	retObj['sys_id'] = this.id();
  	retObj['parent'] = this.getParent();
  	retObj['visible'] = false;
  	retObj['fullFetch'] = false;
  	retObj['children'] = [];
  	return retObj;
  },

  type: 'PortalBoardWidget'    
};

Sys ID

dd6d96f75f13030056976e303e46661e

Offical Documentation

Official Docs: