Name

global.ProblemTaskStateUtilsSNC

Description

Provides utility APIs for state transitions on the Problem Task record.

Script

var ProblemTaskStateUtilsSNC = Class.create();

ProblemTaskStateUtilsSNC.prototype = {
  initialize: function(argument) {
  },
  
  STATES: {
  	ASSESS: ProblemTaskState.States.ASSESS,
  	WORK_IN_PROGRESS: ProblemTaskState.States.WORK_IN_PROGRESS,
  	CLOSED: ProblemTaskState.States.CLOSED
  },

  COLUMNS: {
  	STATE: "state",
  	CLOSE_CODE: "close_code",
  },
  
  PROPERTIES: {
  	REASSES_FROM_CLOSED: "problem_task.closed.role.reaassess_from_closed",
  	CLOSED_PROBLEM_CAN_CREATE_PROBLEM_TASK: "problem.closed.can_create_tasks",
  	CAN_REASSESS_PTASK_WHEN_CLOSED_PRB: "problem_task.closed.can_reassess_on_closed_problem"
  },

  ROLE_PROP_CHOICES: {
  	NOBODY: "-nobody-",
  	PROBLEM_COORDINATOR: "problem_coordinator",
  	PROBLEM_ANALYST: "problem_task_analyst"
  },

  validateStateTransition: function(problemTaskGr, state) {

  	if (!problemTaskGr || !state || !problemTaskGr.isValid())
  		return false;

  	if (sn_sm.RecordStateValidator.isValidStateTransition(problemTaskGr, state))
  		return true;

  	return false;

  },
  	
  canReassessPtask: function(current) {
  	if (current.state == this.STATES.CLOSED && this.validateStateTransition(current, this.STATES.ASSESS)) {

  		var user = gs.getUser();
  		var closeCode = current.getValue(this.COLUMNS.CLOSE_CODE);
  		var reaccessFromClosedRole = gs.getProperty(this.PROPERTIES.REASSES_FROM_CLOSED);
  		
  		if ((reaccessFromClosedRole != this.ROLE_PROP_CHOICES.NOBODY) && user.hasRole(reaccessFromClosedRole)) 
  			return true;
  	}
  	return false;
  },
  
  canReassesPtaskForClosedPrb: function(current) {
  	var canReassessWhenPrbClosed = gs.getProperty(this.PROPERTIES.CAN_REASSESS_PTASK_WHEN_CLOSED_PRB) + '' === 'true';
  	if (current.problem.state + '' === ProblemState.STATES.CLOSED && !canReassessWhenPrbClosed)
  		return false;
  	return true;
  },
  
  isAllowedToReAssess: function(current) {
  	return ((this.canReassessPtask(current) && this.canReassesPtaskForClosedPrb(current)));
  },

  isAllowedToCancel: function(current) {
  	
  	if (current.state!=this.STATES.CLOSED)
  		if ((current.state==this.STATES.ASSESS)||(current.state==this.STATES.WORK_IN_PROGRESS))
  			if (this._isAllowedToClose(current))
  				return true;
  	return false;
  },
  
  isAllowedToComplete: function(current) {
  	
  	if (current.state!=this.STATES.CLOSED)
  		if (current.state==this.STATES.WORK_IN_PROGRESS)
  			if (this._isAllowedToClose())
  				return true;
  	return false;
  			
  },
  
  _isAllowedToClose: function() {
  	var user = gs.getUser();
  	var result = user.hasRole(this.ROLE_PROP_CHOICES.PROBLEM_ANALYST);
  	return result;
  
  },

  onReAssess: function(problemGr) {

  	if(!problemGr || !problemGr.isValid())
  		return false;

  	problemGr.setValue(this.COLUMNS.STATE, this.STATES.ASSESS);
  	problemGr.update();
  },
  
  canCreateProblemTask: function(source) {
  
  	if (source.state == ProblemState.STATES.CLOSED && gs.getProperty(this.PROPERTIES.CLOSED_PROBLEM_CAN_CREATE_PROBLEM_TASK) == 'false') 
  		return false;
  	
  	return true;
  },

  type: 'ProblemTaskStateUtilsSNC'
};

Sys ID

d12653fa535b13004247ddeeff7b12cb

Offical Documentation

Official Docs: