Name

sn_change_cab.CABChangeRequestSNC

Description

ServiceNow logic for CAB Change Requests

Script

var CABChangeRequestSNC = Class.create();
CABChangeRequestSNC.prototype = Object.extendsObject(CAB, {

  _addDateRangeQuery: function (gr, startDate, endDate) {
  	var cr = new global.ChangeRequestCalendar(this._gr);
  	cr._addDateRangeQuery(gr, startDate, endDate);
  },

  getRelatedSchedules: function (startDate, endDate) {
  	var cr = new global.ChangeRequestCalendar(this._gr);
  	return cr.getRelatedSchedules(startDate, endDate);
  },

  getChangesWithSameAssignedTo: function (startDate, endDate) {
  	var cr = new global.ChangeRequestCalendar(this._gr);
  	return cr.getChangesWithSameAssignedTo(startDate, endDate);
  },

  getChangesWithSameAssignmentGroup: function (startDate, endDate) {
  	var cr = new global.ChangeRequestCalendar(this._gr);
  	return cr.getChangesWithSameAssignmentGroup(startDate, endDate);
  },

  getChangesAffectingSamePrimaryCI: function (startDate, endDate) {
  	var cr = new global.ChangeRequestCalendar(this._gr);
  	return cr.getChangesAffectingSamePrimaryCI(startDate, endDate);
  },
  
  getScheduleInformation: function (windowArr, startDate, endDate) {
  	var cr = new global.ChangeRequestCalendar(this._gr);
  	return cr.getScheduleInformation(windowArr, startDate, endDate);
  },

  removeCABAgendaItems: function () {
  	var agendaItemGr = new GlideRecord(CAB.AGENDA_ITEM);
  	agendaItemGr.addQuery("task", this._gr.getUniqueValue());
  	agendaItemGr.addQuery("state", "pending");
  	agendaItemGr.query();
  	agendaItemGr.deleteMultiple();
  },

  updateAttendeesForAgendaItems: function (previous) {
  	var agendaItemGr = new GlideRecord(CAB.AGENDA_ITEM);
  	agendaItemGr.addQuery("task", this._gr.getUniqueValue());
  	agendaItemGr.addQuery("state", "pending");
  	agendaItemGr.query();
  	
  	if (!agendaItemGr.hasNext())
  		return;
  	
  	if (!CABAgendaItem.TASK_FIELDS_FOR_ATTENDEES)
  		return;
  	
  	var fieldData = {};
  	// Get any changes to fields we're interested in for creating attendees related to this Change
  	for (var i = 0; i < CABAgendaItem.TASK_FIELDS_FOR_ATTENDEES.length; i++) {
  		var fieldName = CABAgendaItem.TASK_FIELDS_FOR_ATTENDEES[i];
  		if (this._gr[fieldName].changes()) {
  			fieldData[fieldName] = {"currentValue": this._gr.getValue(fieldName)};
  			if (previous)
  				fieldData[fieldName]["previousValue"] = previous.getValue(fieldName);
  		}
  	}

  	while (agendaItemGr.next())
  		new CABAgendaItem(agendaItemGr).refreshAttendeesFromTaskData(fieldData);
  },
  
  updateDecisionforAgendaItem: function(decision) {
  	var agendaItemGr = new GlideRecord(CAB.AGENDA_ITEM);
  	agendaItemGr.addQuery("task", this._gr.getUniqueValue());
  	agendaItemGr.addQuery("cab_meeting.state", "NOT IN", "complete,canceled");
  	agendaItemGr.query();
  	
  	if (!decision)
  		decision = this._gr.getValue("approval");

  	while (agendaItemGr.next()) {
  		var agendaItem = new CABAgendaItem(agendaItemGr);
  		if (decision === "approved") {
  			if (agendaItem.isPending()) {
  				agendaItem.setPreApproved();
  			
  				if (agendaItemGr.cab_meeting.complete_preapproved_changes == true)
  					agendaItem.setComplete();
  			}
  			else if (agendaItem.isInProgress() || agendaItem.isPaused())
  				agendaItem.setApproved();
  			
  			agendaItem.update();
  		}
  		else if (decision === "rejected") {
  			var cabMeeting = new CABMeeting(agendaItemGr.cab_meeting.getRefRecord());
  			if (cabMeeting.isPending() && !agendaItem.isPending())
  				agendaItem.setPending();
  			
  			agendaItem.reject();
  		}
  	}
  },
  
  addApprovalDecisionToMeetingNotes: function(decisionDisplayValue) {
  	var agendaItemGr = new GlideRecord(CAB.AGENDA_ITEM);
  	agendaItemGr.addQuery("task", this._gr.getUniqueValue());
  	agendaItemGr.addQuery("cab_meeting.state", "in_progress");
  	agendaItemGr.query();

  	if (!decisionDisplayValue)
  		decisionDisplayValue = this._gr.getDisplayValue("approval");

  	while (agendaItemGr.next()) {
  		var agendaItem = new CABAgendaItem(agendaItemGr);
  		var meetingGr = agendaItemGr.cab_meeting.getRefRecord();
  		if (meetingGr && meetingGr.auto_add_agenda_decisions)
  			agendaItem.addDecisionToMeetingNotes(decisionDisplayValue, gs.getUserDisplayName());
  	}
  },

  toJS: function(includeCanWrite, dotWalkFields) {
  	var jsObj = this._toJS(this._gr, includeCanWrite);
  	
  	
  	if (dotWalkFields && Array.isArray(dotWalkFields))
  		dotWalkFields.forEach(function (fieldName) {
  			if (!fieldName)
  				return;
  			
  			var fieldPath = fieldName.split(".");
  			var element = this._gr;
  			fieldPath.forEach(function(pathEl) {
  				element = element[pathEl];
  			});
  			
  			jsObj[fieldName] = {
  				"value": element.toString(),
  				"display_value": element.getDisplayValue()
  			};
  		}, this);

  	return jsObj;
  },
  
  toSPForm: function() {
  	if (!this._gr.canRead())
  		return null;
  	
  	if (!this._cabFormUtil)
  		this._cabFormUtil = new global.CABFormUtil();
  	
  	return this._cabFormUtil.getForm(this._gr);
  },

  type: 'CABChangeRequestSNC'
});

Sys ID

19c4a6f3eb32120034d1eeea1206fe06

Offical Documentation

Official Docs: