Name

global.PlannedTaskNotificationHandler

Description

Notification handler - handles accepting of notification and raising notification

Script

var PlannedTaskNotificationHandler = Class.create();
PlannedTaskNotificationHandler.prototype = {
  initialize: function() {
      this.syncColumns = ['start_date', 'end_date', 'duration', 'short_description'];
      this.plannedTaskNotification = new PlannedTaskNotification();
  },

  raiseNotification: function(taskId, origTaskId, relationId, previousStartDate) {
      PPMDebug.log("Into PlannedTaskNotificationHandler.raiseNotification -> " + taskId + " | " + origTaskId + 
          " | " + relationId);
      var ptn = new PlannedTaskNotification();
      var relation = ShadowTaskQueryHelper.relationRecord(relationId);
      if ( relation.isValidRecord() ) {
          var predUpstreamTask = relation.parent.getRefRecord();
          if ( predUpstreamTask.isValidRecord() ) {
              var shadowTaskOfAffectedTask = ShadowTaskQueryHelper.projectTaskRecord(taskId);
              var params = {  source_id: predUpstreamTask.getValue('sys_id'), 
                              task_id: origTaskId, 
                              shadow_task_id: taskId, 
                              relation_applied: relation.getValue("sys_id"),
                              start_date: shadowTaskOfAffectedTask.getValue('start_date'),
                              previous_start_date: previousStartDate
                          };
              params.msg = this.formulateNotificationMessage(params);
              var raised = ptn.isNewNotificationPending(params);
              var notification;
              var extenalRelation = ShadowTaskQueryHelper.findExternalRelation(params.relation_applied);
              var downStreamRelation = new PlannedTaskRelation(ShadowTaskQueryHelper.findDownstreamShadowRelation(extenalRelation.getValue("sys_id")));
              downStreamRelation.setProcessFlag(false);
              if ( !raised.status ) {
                  notification = ptn.createNotification(params);
                  return {status: true, record: notification};
              }
              else {
                  notification = raised.record;
                  //ptn.updateNotification(notification, params);
                  return { status: false, record: notification};
              }
          }
      }
      return { status: false };
  },
  
  formulateNotificationMessage: function(params) {
      PPMDebug.log("Into PlannedTaskNotificationHandler.formulateNotificationMessage -> " + (new JSON()).encode(params));
      var affectedTask = ShadowTaskQueryHelper.projectTaskRecord(params['task_id']);
      var sourceTask = ShadowTaskQueryHelper.projectTaskRecord(params['source_id']);
      var shadowTaskOfAffectedTask = ShadowTaskQueryHelper.projectTaskRecord(params['shadow_task_id']);
      var previousStartDate = new GlideDateTime();
      if(JSUtil.notNil(params['previous_start_date'])) {
          previousStartDate.setValue(params['previous_start_date']);
      } else {
          previousStartDate.setValue(shadowTaskOfAffectedTask.getValue('start_date'));
      }
      var msg = gs.getMessage('{0} - {1} impacted by changes in {2} - {3} with Current Start Date: {4} to New Start Date: {5}', 
                  [affectedTask.getValue('number'), affectedTask.getDisplayValue(), 
                  sourceTask.getValue('number'), sourceTask.getDisplayValue(),
                  affectedTask.getDisplayValue("start_date"), previousStartDate.getDisplayValue()]);
      PPMDebug.log("Into PlannedTaskNotificationHandler.formulateNotificationMessage msg-> " + msg);
      return msg;
  },

  acceptNotification: function (_current) {
      PPMDebug.log("Into PlannedTaskNotificationHandler.acceptNotification -> " + _current.getValue("sys_id")); 
      var notif = new PlannedTaskNotification(_current);
      var project = notif.getProject();       
      this.acceptNotificationAndRecalRelationIfRequired(project.getValue('sys_id'), project.getValue('sys_class_name'), notif.getValue('sys_id'));
  },
  
  acceptNotificationAndRecalRelationIfRequired: function(entityId, sysClassName, notificationSysid){
  	gs.info("Into PlannedTaskNotificationHandler.acceptNotificationAndRecalRelationIfRequired, entityID-> "+entityId +",sysClassName-> "+sysClassName+
  		                " ,notification id ->"+notificationSysid);
  	var api = new SNC.PlannedTaskAPI();
      var msgs = PlanningConsoleMessages.seededMessages();
      api.setTranslatedMessages(msgs);
      var data =  api.acceptNotification(entityId, sysClassName, notificationSysid);
      PostEngineHandlers.fire(entityId, data);
      this._recalculateDownstreamRelationWhenFireBrFromPlanningConsoleIsEnabled(entityId, sysClassName, api, notificationSysid);
  	return data;
  },
  
 _recalculateDownstreamRelationWhenFireBrFromPlanningConsoleIsEnabled: function(entityId, sysClassName, plannedTaskAPI, notificationSysid){
  	var fireBrEnabledFromPlanningConsoleIsEnabled = PMPropertiesUtil.getProperty('com.snc.project.fire_brs_from_planning_console', sysClassName);
  	if(fireBrEnabledFromPlanningConsoleIsEnabled){
  		this._recalculateDownstreamRelationAndFirePostEngineHandlers(entityId, notificationSysid, plannedTaskAPI);
  	}
  },
  
  _recalculateDownstreamRelationAndFirePostEngineHandlers: function(topTaskId ,notificationSysid, plannedTaskAPI){
  	 var plannedTaskNotification = new PlannedTaskNotification();
  	 plannedTaskNotification =  plannedTaskNotification.get(notificationSysid);
  	 var relationApplied =  plannedTaskNotification.getValue("relation_applied");
  	 if(JSUtil.notNil(relationApplied)){
  		  PPMDebug.log("Into PlannedTaskNotificationHandler._recalculateRelation  relationApplied-> " +relationApplied);
  		  var extenalRelation = ShadowTaskQueryHelper.findExternalRelation(relationApplied);
            var downStreamShadowRelation = new PlannedTaskRelation(ShadowTaskQueryHelper.findDownstreamShadowRelation(extenalRelation.getValue("sys_id")));
  		  downStreamShadowRelation.setProcessFlag(true);
            var data =  plannedTaskAPI.recalculateRelation(downStreamShadowRelation.record(), topTaskId, "update");
  		  PostEngineHandlers.fire(topTaskId, data);
  	 }
  }, 

  type: 'PlannedTaskNotificationHandler'
};

Sys ID

e15d7dc39f122200598a5bb0657fcf03

Offical Documentation

Official Docs: