purplemanchris
9/10/2019 - 12:36 PM

LoanerUtils Class and methods example with Arrays

var LoanerUtils = Class.create();
LoanerUtils.prototype = {
  /**********
   * Initialization stuff here...
   *
   **********/
  initialize : function() {
    this.overdueRemindTime = gs.getProperty('x_cdltd_loaner_req.overdue.remindtime', 24) * 60 * 60 * 1000;
    this.pickupLeadTime    = gs.getProperty('x_cdltd_loaner_req.pickup.leadtime', 24) * 60 * 60 * 1000;
    this.returnRemindTime  = gs.getProperty('x_cdltd_loaner_req.return.remindtime', 24) * 60 * 60 * 1000;
	  
	this.appScopeName = gs.getCurrentScopeName();
	this.loanerTableName = this.appScopeName + '_loaner_request';
	this.pickupEvent = this.appScopeName + '.pickup';
	this.returnEvent = this.appScopeName + '.return';
	this.remindEvent = this.appScopeName + '.reminder';
	this.overdueEvent = this.appScopeName + '.overdue';
  },

  /**********
   *
   * getOverdueRequests - retrieve a list of overdue records
   *
   * @param - None
   * @return: array of sys_ids
   *
   **********/
  getOverdueRequests : function() {

    var a = [];
    var gr = new GlideRecord(this.loanerTableName);
    
	var rightNow = new GlideDateTime().getDisplayValue();
    gr.addQuery('end_date', '<=', rightNow);
    gr.addQuery('state', 17);
    gr.query();

    while (gr.next()) {
      a.push(gr.sys_id.toString());
    }
    return a;
  },

  /**********
   *
   * timeToRemindOverdue - Use the passed in ID to check if the record is time to remind again
   *
   * @param - id: sys_id of the loaner record to check
   * @return - boolean: true = time to remind
   *
   **********/
  timeToRemindOverdue : function(id) {

    var gr = new GlideRecord(this.loanerTableName);
	  
	  var noticeTime = new GlideDateTime();
	  var tempDate = noticeTime.add(this.overdueRemindTime) + '';

    if (!gr.get(id)) {
      gs.log('>>>DEBUG: LoanerUtils: timeToRemindOverdue(): FAILED TO RETRIEVE RECORD');
      return false;
    }
    var baseDate = (gr.last_overdue_reminder == '') ? gr.end_date : gr.last_overdue_reminder;

    return (baseDate <= tempDate) ? true : false;
  },

  /**********
   *
   * sendOverdueReminder - Queue an event to send a reminder and update the necessary
   *                       record fields to indicate they've been reminded
   *
   * @param - id: sys_id of the loaner record to check
   * @return - None
   *
   **********/
  sendOverdueReminder : function(id) {

    var gr = new GlideRecord(this.loanerTableName);

    if (!gr.get(id)) {
      gs.log('>>>DEBUG: LoanerUtils: setLastOverdueReminder(): FAILED TO RETRIEVE RECORD');
      return;
    }
    ++gr.overdue_count;

    // Record the last time a reminder was sent
    gr.last_overdue_reminder = new GlideDateTime().getDisplayValue();
    gr.update();

    // Send the overdue reminder
    gs.eventQueue(this.overdueEvent, gr, gr.start_date, gr.end_date);
  },

  /**********
   *
   * getNullPickupReminders - Get a list of records in state 'Ready for Pickup'
   *                          that haven't been reminded before
   *
   * @param - None
   * @return - array of sys_ids
   *
   **********/
  getNullPickupReminders : function() {

    var a = [];
    var gr = new GlideRecord(this.loanerTableName);
	var noticeTime = new GlideDateTime();
	noticeTime.add(this.pickupLeadTime);
	
    gr.addQuery('state', 16);
    gr.addQuery('pick_up_reminder', '');
    gr.addQuery('start_date', '<=', noticeTime);
    gr.query();

    while (gr.next()) {
      a.push(gr.sys_id.toString());
    }
    return a;
  },

  /**********
   *
   * sendPickupReminder - Queue an event to send a reminder and update the pickup reminder field
   *
   * @param - id: sys_id of the loaner record to check
   * @return - None
   *
   **********/
  sendPickupReminder : function(id) {

    var gr = new GlideRecord(this.loanerTableName);

    if (!gr.get(id)) {
      gs.debug('>>>DEBUG: LoanerUtils: sendPickupReminder(): FAILED TO RETRIEVE RECORD');
      return;
    }

    // Log the time the pickup reminder was sent and avoid sending again
    gr.pick_up_reminder = new GlideDateTime().getDisplayValue();
    gr.update();

    // Send the pickup reminder
    gs.eventQueue(this.pickupEvent, gr, gr.start_date, gr.end_date);
    return;
  },

  /**********
   *
   * getNullReturnReminders - Get a list of records that need reminding to bring their item back
   *
   * @param - None
   * @return - array of sys_ids
   *
   **********/
  getNullReturnReminders : function() {

    var a = [];
    var gr = new GlideRecord(this.loanerTableName);
	  
	var noticeTime = new GlideDateTime();
	var tempDate = noticeTime.add(this.returnRemindTime) + '';

    gr.addQuery('state', 17);
    gr.addQuery('return_reminder', '');
    gr.addQuery('end_date', '<=', tempDate);
    gr.query();

    while (gr.next()) {
      a.push(gr.sys_id.toString());
    }
    return a;
  },

  /**********
   *
   * setReturnReminder - Queue a return reminder and update field when reminder was sent
   *
   * @param - id: sys_id of the loaner record to check
   * @return - None
   *
   **********/
  sendReturnReminder : function(id) {

    var gr = new GlideRecord(this.loanerTableName);

    if (!gr.get(id)) {
      gs.debug('>>>DEBUG: LoanerUtils: sendReturnReminder(): FAILED TO RETRIEVE RECORD');
      return;
    }

    // Set this record to never remind again
    gr.return_reminder = new GlideDateTime().getDisplayValue();
    gr.update();

    // Send the return reminder
    gs.eventQueue(this.returnEvent, gr, gr.start_date, gr.end_date);
  },

  type: 'LoanerUtils'
};