Need to send reminder email with number of days left for auto closure

rambo1
Tera Guru

Hi,

I am using below schedule job to close resolved cases in 3 business days, Now I want to send email to users with number of days left for closure of resolved case incase there is not response. for example, if case is resolved on friday, schedule job should run every day except on weekends and send email to user with number of days left for closure. i.e on monday 2 days left, tuesday 1 day left. Below is the schedule job used for closing :

var encQue = 'active=true^state=6^resolved_atISNOTEMPTY';
var gr = new GlideRecord('sn_customerservice_case');
gr.addEncodedQuery(encQue);
gr.query();
while(gr.next())
{
var nowGdt = new GlideDateTime(gr.resolved_at);
var myScheduleID = '090eecae0a0a0b260077e1dfa71da828'; //8-5 weekdays excluding holidays sys_id
var dueDays = 3;
var dueWorkingHours = 8;
var dueSeconds = dueDays*dueWorkingHours*60*60;
var leadTime = new GlideDuration(dueSeconds*1000);
var dueDateGdt;
var schedRec = new GlideRecord('cmn_schedule');
if (schedRec.get('name', myScheduleID))
{
var sched = new GlideSchedule(myScheduleID);
dueDateGdt = sched.add(nowGdt, leadTime, '');
}
if (dueDateGdt < gs.nowDateTime())
{
gr.setValue('state',3);
gr.update(); // please uncomment during testing.
//gs.print("Case NUmber from schedule job"+gr.number);

}
}

I would like send reminder every day after case gets resolved and with number of days left for the case to be autoclosed.

How do I get that number of days left for closure? subtraction of present resolved date and closed date doesnt work as I should show only business day. any suggestions?

7 REPLIES 7

Kieran Anson
Kilo Patron

Hi,

You could try the below script (largely untested).

Scheduled Job Condition Script:

//Check if the script can run (i.e don't allow to run on a weekend)

var now = new GlideDateTime();
var sched = new GlideSchedule(gs.getProperty('090eecae0a0a0b260077e1dfa71da828')); //Schedule
if(sched.isInSchedule(now))
	answer = true;

Run this script:

var now = new GlideDateTime();
var sched = new GlideSchedule('090eecae0a0a0b260077e1dfa71da828'); //08:00 - 17:00 (9hrs)
var busshrs = parsInt(9); //Business Hours in schedule.
var closenum = parsInt(3); //Number of reminders before closing.

var resolvedINCGR = new GlideRecord('incident');
resolvedINCGR.addActiveQuery();
resolvedINCGR.addQuery('state','6');
resolvedINCGR.query();

while (resolvedINCGR.next()){
	
	var rdate = new GlideDateTime(resolvedINCGR.resolved_at);
	//first check the amount of time elapsed.
	var dur = sched.duration(rdate, now).getNumericValue() / 1000 / 60 / 60;
	var days = Math.floor(dur / sched); // Get number of whole days.
	
	if ( days > closenum){ // If more than 3 days, close the record
		resolvedINCRGR.state = 3;
		resolvedINCGR.update();
	} else {
		gs.eventQueue('event_name',current,days); //Trigger event with the 'days' value as parm1 to be used in notification.
	}
	
}

 

Mark  Correct if this solves your issue and also mark 👍 Helpful if you find my response helpful for your question
Thanks

Hi Anson,

 

Thanks for your code, how can I use days sent in form of param1 in notification?

${event.parm1} will get the value in your notification

 

Thanks Anson, there is trouble in getting days. Any suggestions?