Name

global.StockRuleTransfer

Description

No description available

Script

var StockRuleTransfer = Class.create();
StockRuleTransfer.prototype = {
  initialize : function() {
  },

  /**
   * creates transfer order with a single consumable transfer order line
   */
  consumableTransfer : function(parent, stockroom, model, amount) {
  	var to = new GlideRecord("alm_transfer_order");
  	to.initialize();
  	to.from_stockroom = parent;
  	to.to_stockroom = stockroom;
  	to.from_location = parent.location;
  	to.to_location = stockroom.location;
  	var transferId = to.insert();

  	var tol = new GlideRecord("alm_transfer_order_line");
  	tol.initialize();
  	tol.transfer_order = transferId;
  	tol.model = model;
  	tol.quantity_requested = amount;
  	tol.insert();
  },

  /**
   * creates transfer order with multiple asset transfer order line
   */
  assetTransfer : function(parent, stockroom, model, amount) {
  	var to = new GlideRecord("alm_transfer_order");
  	to.initialize();
  	to.from_stockroom = parent;
  	to.to_stockroom = stockroom;
  	to.from_location = parent.location;
  	to.to_location = stockroom.location;
     
      var transferId = "";

  	var gr = new GlideRecord("alm_asset");
  	gr.addQuery("model", model);
  	gr.addQuery("stockroom", parent);
  	gr.addQuery("install_status", "6");
  	gr.addQuery("substatus", "available");
  	global.AssetUtils.addAssetQuery(gr, global.AssetUtils.ASSET_FUNCTION_FEATURE.STOCK_RULE);
  	gr.query();

  	for ( var i = 0; i < amount; ++i) {
  		if (gr.next()) {

  			if (i == 0) {
  				transferId = to.insert();
  			}

  			var tol = new GlideRecord("alm_transfer_order_line");
  			tol.initialize();
  			tol.transfer_order = transferId;
  			tol.model = model;
  			tol.asset = gr.sys_id;
  			tol.insert();
  		} else {
  			gs.addErrorMessage(gs.getMessage("Parent stockroom ran out of assets to transfer. Aborting transfer"));
  			break;
  		}
  	}
  },

  checkStockroomAvailability : function(stockroom, model) {
  	// retrieve all matching assets in the stockroom
  	var gr = new GlideRecord("alm_asset");
  	gr.addQuery("stockroom", stockroom);
  	gr.addQuery("model", model);
  	gr.addQuery("install_status", "6");
  	gr.addQuery("substatus", "available").addOrCondition("substatus",
  			"reserved");
  	gr.addQuery('active_to', 'false').addOrCondition('active_to', null);
  	global.AssetUtils.addAssetQuery(gr, global.AssetUtils.ASSET_FUNCTION_FEATURE.STOCK_RULE);
  	gr.query();
  	// count quantity
  	var count = 0;
  	while (gr.next())
  		count += parseInt(gr.quantity,10);

  	return count;
  },

  checkStockroomTransferAvailability : function(stockroom, model) {
  	// retrieve all matching assets in the stockroom
  	var gr = new GlideRecord("alm_asset");
  	gr.addQuery("stockroom", stockroom);
  	gr.addQuery("model", model);
  	gr.addQuery("install_status", "6");
  	gr.addQuery("substatus", "available");
  	gr.addQuery('active_to', 'false').addOrCondition('active_to', null);
  	global.AssetUtils.addAssetQuery(gr, global.AssetUtils.ASSET_FUNCTION_FEATURE.STOCK_RULE);
  	gr.query();

  	// count quantity
  	var count = 0;
  	while (gr.next())
  		count += parseInt(gr.quantity,10);

  	return count;
  },

  getTotalRecordCount : function(stockroom, model) {
  	return this.checkStockroomAvailability(stockroom, model) +
  			this.transferOrderAvailability(stockroom, model);
  },

  /**
   * retrieves record count for assets that are currently in a transfer order
   * going to that stockroom
   */
  transferOrderAvailability : function(stockroom, model) {

  	var tols = new GlideRecord('alm_transfer_order_line');
  	tols.addQuery('transfer_order.to_stockroom', stockroom);
  	tols.addQuery('model', model);
  	tols.addQuery('stage', 'NOT IN', 'received,delivered,cancelled');
  	tols.query();

  	var count = 0;
  	while (tols.next()) {

  		if (global.AssetUtils.isAssetLoanerInTOL(tols)) {
              continue;
          }
  		if (!tols.quantity_remaining.nil())
  			count += parseInt(tols.quantity_remaining,10);
  		else
  			count += parseInt(tols.quantity_requested,10);

  		count -= parseInt(tols.quantity_returned,10);
  	}

  	return count;
  },

  type : 'StockRuleTransfer'
};

Sys ID

8a280f81c3731000b959fd251eba8f88

Offical Documentation

Official Docs: