Name

global.OnCallMemberSNC

Description

No description available

Script

var OnCallMemberSNC = Class.create();
OnCallMemberSNC.prototype = {
  initialize: function(_gr) {
  	this._log = new GSLog("com.snc.on_call_rotation.log.level", this.type);
  	if (!_gr)
  		this._initEmpty();
  	else if (typeof _gr === "string")
  		this._initFromSysId(_gr);
  	else
  		this._initFromGr(_gr);
  },

  getId: function () {
  	return this._sys_id;
  },

  getGr: function() {
  	return this._gr;
  },

  getTableName: function() {
  	return "cmn_rota_member";
  },

  getEndDate: function() {
  	if (!this._gr.isValidField("to"))
  		return null;

  	var to = this._gr.to + "";
  	if (!to)
  		return null;

  	var endGdt = new GlideDateTime();
  	endGdt.setValue(to);

  	var roster = new OnCallRoster(this._rosterSysId);
  	var days = roster.getNumberOfDaysTillNextRotation(endGdt, true);
  	endGdt.addDaysUTC(parseInt(days));

  	if (this._log.atLevel(GSLog.DEBUG))
  		this._log.debug("[getEndDate] endDate: " + endGdt);

  	return endGdt;
  },

  getDomain: function() {
  	return this._domain;
  },

  setDomain: function(domain) {
  	this._domain = domain;
  },

  getRosterId: function() {
  	return this._rosterSysId;
  },

  setRosterId: function(rosterSysId) {
  	this._rosterSysId = rosterSysId;
  },

  getMemberId: function() {
  	return this._memberSysId;
  },

  setMemberId: function(memberSysId) {
  	this._memberSysId = memberSysId;
  },

  getRotationScheduleId: function() {
  	return this._rotationScheduleSysId;
  },

  setRotationScheduleId: function(rotationScheduleSysId) {
  	this._rotationScheduleSysId = rotationScheduleSysId;
  },

  getOrder: function() {
  	return this._order;
  },

  setOrder: function(order) {
  	this._order = order;
  },

  getFrom: function() {
  	return this._from;
  },

  setFrom: function(from) {
  	if (from && from.indexOf("-") === -1 && from.length === 8)
  		from = from.substring(0, 4) + "-" + from.substring(4, 6) + "-" + from.substring(6, 8);
  	this._from = from;

  	if (this._log.atLevel(GSLog.DEBUG))
  		this._log.debug("[setFrom] from: " + this._from);
  },

  getTo: function() {
  	return this._to;
  },

  setTo: function(to) {
  	this._to = to;
  },

  getGroupDomain: function() {
  	var domain = GlideDomainSupport.getCurrentDomainValueOrGlobal();
  	if (!this._rosterSysId)
  		return domain;

  	var rosterGr = new GlideRecord("cmn_rota_roster");
  	if (!rosterGr.get(this._rosterSysId))
  		return domain;

  	var rotaGr = new GlideRecord("cmn_rota");
  	if (!rotaGr.get(rosterGr.rota + ""))
  		return domain;

  	var groupGr = new GlideRecord("sys_user_group");
  	if (!groupGr.get(rotaGr.group + ""))
  		return domain;

  	if (groupGr.isValidField("sys_domain")) {
  		var domainFromGroup = groupGr.sys_domain + "";
  		if (domainFromGroup && domainFromGroup !== "undefined")
  			domain = domainFromGroup;
  	}
  	return domain;
  },

  create: function(enableWorkFlow) {
  	enableWorkFlow = enableWorkFlow + "" === "false" ? false : true;
  	this._gr = new GlideRecord(this.getTableName());
  	this._gr.setWorkFlow(enableWorkFlow);
  	this._populateGr();
  	this._sys_id = this._gr.insert() + "";

  	if (this._log.atLevel(GSLog.DEBUG))
  		this._log.debug("[create] enableWorkFlow: " + enableWorkFlow + " called on record: " + this._sys_id);

  	return this._sys_id;
  },

  update: function(enableWorkFlow) {
  	var updated = false;
  	if (!this._gr) {
  		this._log.error("[update] called on cmn_rota_member that is NOT in database: " + this.toString());
  		return updated;
  	}

  	enableWorkFlow = enableWorkFlow + "" === "false" ? false : true;
  	this._gr.setWorkFlow(enableWorkFlow);
  	this._populateGr();
  	if (this._sys_id === this._gr.sys_id + "")
  		updated = this._gr.update() + "" ? true : false;
  	else
  		if (this._log.atLevel(GSLog.DEBUG))
  			this._log.debug("[update] expected sys_id: " + this._sys_id + " actual sys_id: " + this._gr.sys_id);

  	if (this._log.atLevel(GSLog.DEBUG))
  		this._log.debug("[update] updated: " + updated + " enableWorkFlow: " + enableWorkFlow + " member: " + this.toString());

  	return updated;
  },
  
  deleteRecord: function() {
  	var deleted = false;
  	if (!this._gr) {
  		this._log.error("[deleteRecord] called on cmn_rota_member that is NOT in database: " + this.toString());
  		return deleted;
  	}

  	this._populateGr();
  	if (this._sys_id === this._gr.sys_id + "")
  		deleted = this._gr.deleteRecord() + "" ? true : false;
  	else
  		if (this._log.atLevel(GSLog.DEBUG))
  			this._log.debug("[deleteRecord] expected sys_id: " + this._sys_id + " actual sys_id: " + this._gr.sys_id);

  	if (this._log.atLevel(GSLog.DEBUG))
  		this._log.debug("[deleteRecord] deleted: " + updated + " member: " + this.toString());

  	return deleted;
  },

  toString: function() {
  	return "sys_id: " + this._sys_id + " sys_domain: " + this._domain + " rosterSysId: " + this._rosterSysId + " memberSysId: " + this._memberSysId +
  		" rotation_schedule: " + this._rotationScheduleSysId + " order: " + this._order + " from: " + this._from +
  		" to: " + this._to;
  },

  _populateGr: function() {
  	this._domain = this.getGroupDomain();
  	this._gr.setValue("sys_domain", this._domain);
  	this._gr.setValue("roster", this._rosterSysId);
  	this._gr.setValue("member", this._memberSysId);
  	this._gr.setValue("rotation_schedule", this._rotationScheduleSysId);
  	this._gr.setValue("order", this._order);
  	this._gr.setValue("from", this._from);
  	this._gr.setValue("to", this._to);
  },

  _initFromSysId: function(sysId) {
  	sysId = sysId || "";

  	if (this._log.atLevel(GSLog.DEBUG))
  			this._log.debug("[_initFromSysId] sysId: " + sysId);

  	var gr = new GlideRecord(this.getTableName());
  	if (!sysId || !gr.get(sysId))
  		this._initEmpty();
  	else {
  		this._gr = gr;
  		this._sys_id = this._gr.sys_id + "";
  		this._rosterSysId = this._gr.roster + "";
  		this._memberSysId = this._gr.member + "";
  		this._rotationScheduleSysId = this._gr.rotation_schedule + "";
  		this._order = parseInt(this._gr.order + "");
  		this._from = this._gr.from + "";
  		this._to = this._gr.to + "";
  		this._domain = this.getGroupDomain();
  	}
  },

  _initFromGr: function(gr) {
  	if (!gr)
  		this._log.error("[_initFromGr] called invalid gliderecord");
  	else
  		this._initFromSysId(gr.sys_id + "");
  },

  _initEmpty: function() {
  	if (this._log.atLevel(GSLog.DEBUG))
  		this._log.debug("[_initEmpty] create empty: " + this.type);

  	this._rosterSysId = "";
  	this._memberSysId = "";
  	this._rotationScheduleSysId = "";
  	this._order = 0;
  	this._from = "";
  	this._to = "";
  	this._sys_id = "";
  },

  type: 'OnCallMemberSNC'
};

Sys ID

77a00db3d7230300532c24837e61036c

Offical Documentation

Official Docs: