ServiceNowLearningWithRepo/2c4209629f7322107f44d6013024ab4a/update/sys_script_include_0397977b9fa032107f44f1328124abcb.xml

251 lines
7.6 KiB
XML

<?xml version="1.0" encoding="UTF-8"?><record_update table="sys_script_include">
<sys_script_include action="INSERT_OR_UPDATE">
<access>package_private</access>
<active>true</active>
<api_name>x_cdltd_loaner_req.LoanerUtils</api_name>
<caller_access/>
<client_callable>false</client_callable>
<description/>
<name>LoanerUtils</name>
<script><![CDATA[var LoanerUtils = Class.create();
LoanerUtils.prototype = {
/**********
*
* Initialization stuff goes here...
*
**********/
initialize : function() {
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.overdueRemindTime = gs.getProperty('x_cdltd_loaner_req.overdue.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.overdueEvent = this.appScopeName + '.overdue';
},
/**********
*
* 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 noticeTime = new GlideDateTime();
noticeTime.add(this.pickupLeadTime);
// Notice that the below is looking for the same LNR records as the scheduled script
var gr = new GlideRecord(this.loanerTableName);
gr.addQuery('state', 16); // i.e., "Ready for Pickup"
gr.addQuery('pick_up_reminder', '');
gr.addQuery('start_date', '<=', noticeTime); // Basically, Start Date in the past
gr.query();
while (gr.next()) {
a.push(gr.sys_id.toString()); // pump these records into an array, then use sendPickupReminder() to fire the events
}
return a;
},
/**********
*
* sendPickupReminder - Queue an event to send a pickup 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 return their item
*
* @param - None
* @return - array of sys_ids
*
**********/
getNullReturnReminders : function() {
var a = [];
var noticeTime = new GlideDateTime();
noticeTime.add(this.returnRemindTime);
var gr = new GlideRecord(this.loanerTableName);
gr.addQuery('state', 17); // State "Checked Out"
gr.addQuery('return_reminder', '');
gr.addQuery('end_date', '<=', noticeTime);
gr.query();
while (gr.next()) {
a.push(gr.sys_id.toString());
}
return a;
},
/**********
*
* sendReturnReminder - Queue an event to send a return reminder and update the return reminder field
*
* @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;
}
// Log the time the return reminder was sent and avoid sending again
gr.return_reminder = new GlideDateTime().getDisplayValue();
gr.update();
// Send the return reminder
gs.eventQueue(this.returnEvent, gr, gr.start_date, gr.end_date);
return;
},
/**********
*
* getOverdueRequests - retrieve a list of overdue records
*
* @param - None
* @return: array of sys_ids
*
**********/
getOverdueRequests : function() {
var a = [];
var rightNow = new GlideDateTime().getDisplayValue();
var gr = new GlideRecord(this.loanerTableName);
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);
if (!gr.get(id)) {
gs.debug('>>>DEBUG: LoanerUtils: timeToRemindOverdue(): FAILED TO RETRIEVE RECORD');
return false;
}
// The overdue.remindtime property sets how often to bug the tardy borrower
// Subtracting that time from the current time allows us to see if it's time to remind again
var noticeTime = new GlideDateTime();
noticeTime.subtract(this.overdueRemindTime);
var baseDate = (gr.last_overdue_reminder == '') ? gr.end_date : gr.last_overdue_reminder;
return (baseDate <= noticeTime) ? true : false;
// EXAMPLE 1 -----
// overdue.remindtime is set to 24
// Original noticeTime is 2:00pm Mar 28
// Subtract overdue.remindtime for new noticeTime: 2:00pm Mar 27
// baseDate = last_overdue_reminder = 4:00am Mar 28 (10 hours ago)
// Is 4:00am Mar 28 before 2:00pm Mar 27?
// No, so no send.
// EXAMPLE 2 -----
// overdue.remindtime is set to 8
// Original noticeTime is 2:00pm Mar 28
// Subtract overdue.remindtime for new noticeTime: 6:00am Mar 28
// baseDate = last_overdue_reminder = 4:00am Mar 28 (10 hours ago)
// Is 4:00am Mar 28 before 6:00am Mar 28?
// Yes, so send.
},
/**********
*
* sendOverdueReminder - Queue an event to send another 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.error('>>>DEBUG: LoanerUtils: setLastOverdueReminder(): FAILED TO RETRIEVE RECORD');
return;
}
// Currently there is no application logic that uses the overdue count
// What future requirement would _you_ use this for? ;-)
++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);
return;
},
type: 'LoanerUtils'
};]]></script>
<sys_class_name>sys_script_include</sys_class_name>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2025-10-19 20:53:48</sys_created_on>
<sys_id>0397977b9fa032107f44f1328124abcb</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_name>LoanerUtils</sys_name>
<sys_package display_value="Loaner Request" source="x_cdltd_loaner_req">2c4209629f7322107f44d6013024ab4a</sys_package>
<sys_policy>read</sys_policy>
<sys_scope display_value="Loaner Request">2c4209629f7322107f44d6013024ab4a</sys_scope>
<sys_update_name>sys_script_include_0397977b9fa032107f44f1328124abcb</sys_update_name>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2025-10-19 20:53:48</sys_updated_on>
</sys_script_include>
</record_update>