Validate Planned start date must be greater than 3 days from opened date

Evan2
Kilo Guru

Hello All,

How to restrict change requester to  raise a change request if  planned start date is less than 3 days from opened date. Currently I am able to raise change request for any date.

find_real_file.png

Regards,

Evan

1 ACCEPTED SOLUTION

Evan2
Kilo Guru

Hi All,

 

I have achieved this by below client scripts.

 

Client Script :

find_real_file.png

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue == '') {
return;
}


var cd=g_form.getValue('requested_by_date');
var sites = new GlideAjax('ClientDateTimeUtils');
sites.addParam('sysparm_name', 'getDayOfWeek');
sites.addParam('sysparm_locID', cd);
//sites.getXML(processResponse);
sites.getXMLWait();

var comDate = sites.getAnswer();
//alert(comDate);
if(g_form.getValue('type')=="Emergency")
{}
else
{
if(comDate == 6 || comDate== 7)
{
g_form.addErrorMessage('We dont work on weeends!');
g_form.setValue('requested_by_date','');
return false;
}
var compareDate2 = compareDateToNow(g_form.getValue('requested_by_date'));
if(compareDate2 < 0 ){
g_form.addErrorMessage('Please select only future date for Requested Implementation Date');
g_form.setValue('requested_by_date','');
return false;
}
//Type appropriate comment here, and begin script below
if(g_form.getValue('type') == "Routine"){
var rid = g_form.getValue('requested_by_date');
var opn = g_form.getValue('opened_at');

if (g_form.getValue('u_major_change') == 'Yes'){
var differenceLead = getDateDiffLeadTime(opn,rid);

if(differenceLead < 0 ){
g_form.addErrorMessage('Requested Implementaion Date should be 5 days ahead of the Opened date for Major Change.If you want to expedite the change please raise a Emergency Change Request');
g_form.setValue('requested_by_date','');
return false;
}
}
else{
var differenceLead3 = getDateDiffLeadTime3(opn,rid);

if(differenceLead3 < 0){
g_form.addErrorMessage('Requested Implementaion Date should be 3 days ahead of the Opened date for Minor Change.If you want to expedite the change please raise a Emergency Change Request');
g_form.setValue('requested_by_date','');
return false;
}



}





}
/*else{
var compareDate2 = compareDateToNow(g_form.getValue('requested_by_date'));
if(compareDate2 < 0){
g_form.addErrorMessage('Please select only future date for Requested Implementation Date');
g_form.setValue('requested_by_date','');
return false;
}
}*/

}
}
//g_form.setValue('start_date', rid);

function getDateDiffLeadTime(date_1, date_2){
var ga = new GlideAjax('ABCDateTimeUtils');
ga.addParam('sysparm_name','getDateDiffLead');
ga.addParam('date_1',date_1);
ga.addParam('date_2',date_2);
ga.getXMLWait();
var d1 = ga.getAnswer();
return d1;
}
function compareDateToNow(date_2){
var ga = new GlideAjax('ABCDateTimeUtils');
ga.addParam('sysparm_name','getDateDiff');
ga.addParam('date_2',date_2);
ga.getXMLWait();
var comDate = ga.getAnswer();
return comDate;
}
function getDateDiffLeadTime3(date_1, date_2){
var ga = new GlideAjax('ABCDateTimeUtils');
ga.addParam('sysparm_name','getDateDiffLead3');
ga.addParam('date_1',date_1);
ga.addParam('date_2',date_2);
ga.getXMLWait();
var d1 = ga.getAnswer();
return d1;
}

 

 

 

 

 

 

Script Include-1 (ClientDateTimeUtils)

 

var ClientDateTimeUtils = Class.create();
ClientDateTimeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

//Takes a Single Date/Time Field and returns its time difference from nowDateTime().
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getNowDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(gs.nowDateTime(), firstDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getNowDateTimeDiff: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Diff the amount of time between two different Date/Time fields
//params = sysparm_fdt (the first date/time field), sysparm_sdt (second date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var secondDT = this.getParameter('sysparm_sdt'); // Second Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, secondDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeDiff: FIRST DT: " + firstDT + " -SECOND DT: " + secondDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Takes your date/time field and returns the amount of time before now. A positive is time before now, a negative number is after now.
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeBeforeNow: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeBeforeNow: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Returns true if it is before now, and false if it is after now.
//params = sysparm_fdt (the first date/time field)
getDateTimeBeforeNowBool: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var answer = '';
if (diff >= 0){answer = 'true';}
else {answer = 'false';}
return answer;
},

//Returns the Date/Time of right now.
getNowDateTime: function(){
var now = gs.nowDateTime(); //Now Date/Time
return now;
},

//Returns the Date right now.
getNowDate: function(){
var now = GlideDate();; //Now Date
return now.getLocalDate();
},

//Returns the Time of right now.
getNowTime: function(){
var now = GlideTime();; //Now Time
var modnow = now.getLocalTime().toString().split(' ');
return modnow[1];
},

//Takes a date/time field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - second, minute, hour, day, week, month, year), sysparm_addtime (amount of time to add based on the type).
addDateTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - second (addSeconds()), minute (need to add conversion), hour (need to add conversion), day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDateTime(firstDT);

if(addTYPE == 'second'){day.addSeconds(addTIME);}
else if (addTYPE == 'minute'){day.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){day.addSeconds(addTIME*(60*60));}
else if (addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

//Takes a glide date field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - day, week, month, year),sysparm_addtime (amount of time to add based on the type).
addDateAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDate();
day.setValue(firstDT);

if(addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

addTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var time = GlideTime();
time.setValue(firstDT);

if(addTYPE == 'second'){time.addSeconds(addTIME);}
else if (addTYPE == 'minute'){time.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){time.addSeconds(addTIME*(60*60));}
else {time.addSeconds(addTIME);}

var modtime = time.toString().split(' ');
//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + time;
return modtime[1];
},

//Private function to calculate the date difference return result in second, minute, hour, day.
_calcDateDiff: function(diffTYPE, seconds){
var thisdiff;
if (diffTYPE == "day"){thisdiff = seconds/86400;}
else if (diffTYPE == "hour"){thisdiff = seconds/3600;}
else if (diffTYPE == "minute"){thisdiff = seconds/60;}
else if (diffTYPE == "second"){thisdiff = seconds;}
else {thisdiff = seconds;}
return thisdiff;
},

//Returns the Day of Week
getDayOfWeek: function(){
var firstDT = this.getParameter('sysparm_locID'); // Date-Time Field
var day = GlideDateTime();
day.setValue(firstDT);
var dayofweek = day.getDayOfWeekLocalTime();
return dayofweek;
}


});

 

Script Include-2 (ABCDateTimeUtils)

 

var ABCDateTimeUtils = Class.create();
ABCDateTimeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

//Takes a Single Date/Time Field and returns its time difference from nowDateTime().
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getNowDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(gs.nowDateTime(), firstDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getNowDateTimeDiff: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Diff the amount of time between two different Date/Time fields
//params = sysparm_fdt (the first date/time field), sysparm_sdt (second date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var secondDT = this.getParameter('sysparm_sdt'); // Second Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, secondDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeDiff: FIRST DT: " + firstDT + " -SECOND DT: " + secondDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Takes your date/time field and returns the amount of time before now. A positive is time before now, a negative number is after now.
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeBeforeNow: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeBeforeNow: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Returns true if it is before now, and false if it is after now.
//params = sysparm_fdt (the first date/time field)
getDateTimeBeforeNowBool: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var answer = '';
if (diff >= 0){answer = 'true';}
else {answer = 'false';}
return answer;
},

//Returns the Date/Time of right now.
getNowDateTime: function(){
var now = gs.nowDateTime(); //Now Date/Time
return now;
},

//Returns the Date right now.
getNowDate: function(){
var now = GlideDate(); //Now Date
return now.getLocalDate();
},

//Returns the Time of right now.
getNowTime: function(){
var now = GlideTime(); //Now Time
var modnow = now.getLocalTime().toString().split(' ');
return modnow[1];
},

//Takes a date/time field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - second, minute, hour, day, week, month, year), sysparm_addtime (amount of time to add based on the type).
addDateTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - second (addSeconds()), minute (need to add conversion), hour (need to add conversion), day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDateTime(firstDT);

if(addTYPE == 'second'){day.addSeconds(addTIME);}
else if (addTYPE == 'minute'){day.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){day.addSeconds(addTIME*(60*60));}
else if (addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

//Takes a glide date field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - day, week, month, year),sysparm_addtime (amount of time to add based on the type).
addDateAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDate();
day.setValue(firstDT);

if(addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

addTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var time = GlideTime();
time.setValue(firstDT);

if(addTYPE == 'second'){time.addSeconds(addTIME);}
else if (addTYPE == 'minute'){time.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){time.addSeconds(addTIME*(60*60));}
else {time.addSeconds(addTIME);}

var modtime = time.toString().split(' ');
//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + time;
return modtime[1];
},

//Private function to calculate the date difference return result in second, minute, hour, day.
_calcDateDiff: function(diffTYPE, seconds){
var thisdiff;
if (diffTYPE == "day"){thisdiff = seconds/86400;}
else if (diffTYPE == "hour"){thisdiff = seconds/3600;}
else if (diffTYPE == "minute"){thisdiff = seconds/60;}
else if (diffTYPE == "second"){thisdiff = seconds;}
else {thisdiff = seconds;}
return thisdiff;
},

// Date Validation for Change Management Implementation Plan
getDateDiff: function() {

var date_1 = this.getParameter('date_1');
var date_2 = this.getParameter('date_2');
gs.log("date1 and date 2" + date_1 + "date 2" + date_2);
var sDeD = gs.dateDiff(date_1,date_2,true);
gs.log('getDateDiff retuning value:'+sDeD);
return sDeD;
},
getConvertDate: function() {
var toptsk = this.getParameter('sysparm_chgStart');
var endDatetsk = this.getParameter('sysparm_funStartDate1');
//gs.log('ICC Change:toptsk&&endDatetsk'+toptsk+':::'+endDatetsk);

/*var temp = new Packages.java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
var cdt = toptsk;
cdt = temp.parse(cdt);
var output = new Packages.java.text.SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
var output1 = output.format(cdt);
var dateDiff = gs.dateDiff(output1,endDatetsk,true);*/
//var date1 = new GlideDateTime();
var year = toptsk.split('-')[0];
var month = toptsk.split('-')[1];
var dayTime = toptsk.split('-')[2];
var day = dayTime.split(' ')[0];
var time = dayTime.split(' ')[1];
var ndate= day + '-' + month + '-' + year + ' ' + time;
//gs.log("End Date" + ndate + "endDatetsk" + endDatetsk);

//gs.log('ICC Change:ndate&&endDatetsk'+ndate+':::'+endDatetsk);

/*var date1 = new GlideDateTime();
var date2 = new GlideDateTime();
date1.setDisplayValueInternal(ndate);
date2.setDisplayValueInternal(endDatetsk);*/
var diffSeconds = gs.dateDiff(ndate, endDatetsk,true);
//var diffSeconds = gs.dateDiff(ndate.getDisplayValue(), endDatetsk.getDisplayValue(),true);
//gs.log('ICC Change diffSeconds:'+diffSeconds);
return diffSeconds;
//return dateDiff;
},
getDateDiffLead: function() {
var date_1 = new GlideDateTime();
var date_2 = new GlideDateTime();
date_1 = this.getParameter('date_1');
date_2 = this.getParameter('date_2');
var date_1Split = date_1.split(" ");
var datePart = date_1Split[0].split("-");
var Date1AfterSplit = datePart[2] + '-' + datePart[1] + '-' + datePart[0] + " " + date_1Split[1];

var date_2Split = date_2.split(" ");
var datePart2 = date_2Split[0].split("-");
var Date2AfterSplit = datePart2[2] + '-' + datePart2[1] + '-' + datePart2[0] + " " + date_2Split[1];

gs.log("First date" + Date1AfterSplit + "Second Date" + Date2AfterSplit);
var opnlead = new GlideDateTime(Date1AfterSplit);

var rid = new GlideDateTime(Date2AfterSplit);
//rid.setValueUTC(rid);
opnlead.addDaysLocalTime(5);
rid.addDaysLocalTime(0);



var sDeD = gs.dateDiff(opnlead,rid,true);
gs.log('getDateDiff retuning value:'+sDeD);
return sDeD;
},
getDateDiffLead3: function() {
var date_1 = new GlideDateTime();
var date_2 = new GlideDateTime();
date_1 = this.getParameter('date_1');
date_2 = this.getParameter('date_2');
var date_1Split = date_1.split(" ");
var datePart = date_1Split[0].split("-");
var Date1AfterSplit = datePart[2] + '-' + datePart[1] + '-' + datePart[0] + " " + date_1Split[1];

var date_2Split = date_2.split(" ");
var datePart2 = date_2Split[0].split("-");
var Date2AfterSplit = datePart2[2] + '-' + datePart2[1] + '-' + datePart2[0] + " " + date_2Split[1];

gs.log("First date" + Date1AfterSplit + "Second Date" + Date2AfterSplit);
var opnlead = new GlideDateTime(Date1AfterSplit);

var rid = new GlideDateTime(Date2AfterSplit);
//rid.setValueUTC(rid);
opnlead.addDaysLocalTime(3);
rid.addDaysLocalTime(0);


var sDeD = gs.dateDiff(opnlead,rid,true);
gs.log('getDateDiff retuning value:'+sDeD);
return sDeD;
},
});

 

 

This is working as expected. Below is the screenshot-

find_real_file.png

Regards,

Evan

View solution in original post

4 REPLIES 4

Mark Roethof
Tera Patron
Tera Patron

Hi there,

Have you considered using a (Catalog) UI Policy to achieve date validations? There's almost no-code needed to achieve date validations this way. Have a look at an article I wrote on this:
No Code date validations thru (Catalog) UI Policies

If my answer helped you in any way, please then mark it as helpful.

Kind regards,
Mark

---

LinkedIn
Community article list

 

Kind regards,

 

Mark Roethof

Independent ServiceNow Consultant

10x ServiceNow MVP

---

 

~444 Articles, Blogs, Videos, Podcasts, Share projects - Experiences from the field

LinkedIn

Omkar Joshi
Giga Guru

Hi,

 

Use the below scripts,

 

 

client script: onChange()

 

 

var ga = new GlideAjax('global.UserData');
ga.addParam('sysparm_name', 'delievery_date');
ga.addParam('plannedeDate', g_form.getValue('planned_start_date'));//check fields names

ga.addParam('openedDate', g_form.getValue('opened_date')); //check fields names
ga.getXML(myCallBack);

function myCallBack(response) {
var greeting = response.responseXML.documentElement.getAttribute('answer');


var arr=greeting.split(' ');
g_form.hideErrorBox('u_om_delivery_date');
//alert(arr[0]);
if(arr[0]>3||arr[0].length>3)
{
//print error message

}
}

 

 

 

Add this function in the script include:

 

delievery_date : function(){
var plannedeDate= this.getParameter('plannedeDate');

var openedDate= this.getParameter('openedDate');


var plannedeDate1=new GlideDateTime(date);
var openedDate1=new GlideDateTime(openedDate);

var diff=gs.dateDiff(openedDate1,plannedeDate1,false);

return diff;
},

asifnoor
Kilo Patron

Hi,

create a catalog client script onchange on your planned start date field and add the below code.

function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
      return;
   }
    var selectedDateNum = getDateFromFormat(newValue,g_user_date_format); 
    var opened_dateNum = getDateFromFormat(g_form.getValue("opened_date"),g_user_date_format); //check variable name.
opened_dateNum = opened_dateNum-259200; //259200 equal to 3 days.
	if(selectedDateNum > opened_dateNum) {
		g_form.showFieldMsg('planned_start_date','Selected date cannot be greater than 3 days of opened date','error');
	} else {
		g_form.clearMessages();
	}   
}

Note: check the variable names.

Mark the comment as a correct answer and helpful if this helps.

Evan2
Kilo Guru

Hi All,

 

I have achieved this by below client scripts.

 

Client Script :

find_real_file.png

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue == '') {
return;
}


var cd=g_form.getValue('requested_by_date');
var sites = new GlideAjax('ClientDateTimeUtils');
sites.addParam('sysparm_name', 'getDayOfWeek');
sites.addParam('sysparm_locID', cd);
//sites.getXML(processResponse);
sites.getXMLWait();

var comDate = sites.getAnswer();
//alert(comDate);
if(g_form.getValue('type')=="Emergency")
{}
else
{
if(comDate == 6 || comDate== 7)
{
g_form.addErrorMessage('We dont work on weeends!');
g_form.setValue('requested_by_date','');
return false;
}
var compareDate2 = compareDateToNow(g_form.getValue('requested_by_date'));
if(compareDate2 < 0 ){
g_form.addErrorMessage('Please select only future date for Requested Implementation Date');
g_form.setValue('requested_by_date','');
return false;
}
//Type appropriate comment here, and begin script below
if(g_form.getValue('type') == "Routine"){
var rid = g_form.getValue('requested_by_date');
var opn = g_form.getValue('opened_at');

if (g_form.getValue('u_major_change') == 'Yes'){
var differenceLead = getDateDiffLeadTime(opn,rid);

if(differenceLead < 0 ){
g_form.addErrorMessage('Requested Implementaion Date should be 5 days ahead of the Opened date for Major Change.If you want to expedite the change please raise a Emergency Change Request');
g_form.setValue('requested_by_date','');
return false;
}
}
else{
var differenceLead3 = getDateDiffLeadTime3(opn,rid);

if(differenceLead3 < 0){
g_form.addErrorMessage('Requested Implementaion Date should be 3 days ahead of the Opened date for Minor Change.If you want to expedite the change please raise a Emergency Change Request');
g_form.setValue('requested_by_date','');
return false;
}



}





}
/*else{
var compareDate2 = compareDateToNow(g_form.getValue('requested_by_date'));
if(compareDate2 < 0){
g_form.addErrorMessage('Please select only future date for Requested Implementation Date');
g_form.setValue('requested_by_date','');
return false;
}
}*/

}
}
//g_form.setValue('start_date', rid);

function getDateDiffLeadTime(date_1, date_2){
var ga = new GlideAjax('ABCDateTimeUtils');
ga.addParam('sysparm_name','getDateDiffLead');
ga.addParam('date_1',date_1);
ga.addParam('date_2',date_2);
ga.getXMLWait();
var d1 = ga.getAnswer();
return d1;
}
function compareDateToNow(date_2){
var ga = new GlideAjax('ABCDateTimeUtils');
ga.addParam('sysparm_name','getDateDiff');
ga.addParam('date_2',date_2);
ga.getXMLWait();
var comDate = ga.getAnswer();
return comDate;
}
function getDateDiffLeadTime3(date_1, date_2){
var ga = new GlideAjax('ABCDateTimeUtils');
ga.addParam('sysparm_name','getDateDiffLead3');
ga.addParam('date_1',date_1);
ga.addParam('date_2',date_2);
ga.getXMLWait();
var d1 = ga.getAnswer();
return d1;
}

 

 

 

 

 

 

Script Include-1 (ClientDateTimeUtils)

 

var ClientDateTimeUtils = Class.create();
ClientDateTimeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

//Takes a Single Date/Time Field and returns its time difference from nowDateTime().
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getNowDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(gs.nowDateTime(), firstDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getNowDateTimeDiff: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Diff the amount of time between two different Date/Time fields
//params = sysparm_fdt (the first date/time field), sysparm_sdt (second date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var secondDT = this.getParameter('sysparm_sdt'); // Second Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, secondDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeDiff: FIRST DT: " + firstDT + " -SECOND DT: " + secondDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Takes your date/time field and returns the amount of time before now. A positive is time before now, a negative number is after now.
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeBeforeNow: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeBeforeNow: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Returns true if it is before now, and false if it is after now.
//params = sysparm_fdt (the first date/time field)
getDateTimeBeforeNowBool: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var answer = '';
if (diff >= 0){answer = 'true';}
else {answer = 'false';}
return answer;
},

//Returns the Date/Time of right now.
getNowDateTime: function(){
var now = gs.nowDateTime(); //Now Date/Time
return now;
},

//Returns the Date right now.
getNowDate: function(){
var now = GlideDate();; //Now Date
return now.getLocalDate();
},

//Returns the Time of right now.
getNowTime: function(){
var now = GlideTime();; //Now Time
var modnow = now.getLocalTime().toString().split(' ');
return modnow[1];
},

//Takes a date/time field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - second, minute, hour, day, week, month, year), sysparm_addtime (amount of time to add based on the type).
addDateTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - second (addSeconds()), minute (need to add conversion), hour (need to add conversion), day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDateTime(firstDT);

if(addTYPE == 'second'){day.addSeconds(addTIME);}
else if (addTYPE == 'minute'){day.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){day.addSeconds(addTIME*(60*60));}
else if (addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

//Takes a glide date field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - day, week, month, year),sysparm_addtime (amount of time to add based on the type).
addDateAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDate();
day.setValue(firstDT);

if(addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

addTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var time = GlideTime();
time.setValue(firstDT);

if(addTYPE == 'second'){time.addSeconds(addTIME);}
else if (addTYPE == 'minute'){time.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){time.addSeconds(addTIME*(60*60));}
else {time.addSeconds(addTIME);}

var modtime = time.toString().split(' ');
//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + time;
return modtime[1];
},

//Private function to calculate the date difference return result in second, minute, hour, day.
_calcDateDiff: function(diffTYPE, seconds){
var thisdiff;
if (diffTYPE == "day"){thisdiff = seconds/86400;}
else if (diffTYPE == "hour"){thisdiff = seconds/3600;}
else if (diffTYPE == "minute"){thisdiff = seconds/60;}
else if (diffTYPE == "second"){thisdiff = seconds;}
else {thisdiff = seconds;}
return thisdiff;
},

//Returns the Day of Week
getDayOfWeek: function(){
var firstDT = this.getParameter('sysparm_locID'); // Date-Time Field
var day = GlideDateTime();
day.setValue(firstDT);
var dayofweek = day.getDayOfWeekLocalTime();
return dayofweek;
}


});

 

Script Include-2 (ABCDateTimeUtils)

 

var ABCDateTimeUtils = Class.create();
ABCDateTimeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

//Takes a Single Date/Time Field and returns its time difference from nowDateTime().
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getNowDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(gs.nowDateTime(), firstDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getNowDateTimeDiff: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Diff the amount of time between two different Date/Time fields
//params = sysparm_fdt (the first date/time field), sysparm_sdt (second date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var secondDT = this.getParameter('sysparm_sdt'); // Second Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, secondDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeDiff: FIRST DT: " + firstDT + " -SECOND DT: " + secondDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Takes your date/time field and returns the amount of time before now. A positive is time before now, a negative number is after now.
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeBeforeNow: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeBeforeNow: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Returns true if it is before now, and false if it is after now.
//params = sysparm_fdt (the first date/time field)
getDateTimeBeforeNowBool: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var answer = '';
if (diff >= 0){answer = 'true';}
else {answer = 'false';}
return answer;
},

//Returns the Date/Time of right now.
getNowDateTime: function(){
var now = gs.nowDateTime(); //Now Date/Time
return now;
},

//Returns the Date right now.
getNowDate: function(){
var now = GlideDate(); //Now Date
return now.getLocalDate();
},

//Returns the Time of right now.
getNowTime: function(){
var now = GlideTime(); //Now Time
var modnow = now.getLocalTime().toString().split(' ');
return modnow[1];
},

//Takes a date/time field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - second, minute, hour, day, week, month, year), sysparm_addtime (amount of time to add based on the type).
addDateTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - second (addSeconds()), minute (need to add conversion), hour (need to add conversion), day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDateTime(firstDT);

if(addTYPE == 'second'){day.addSeconds(addTIME);}
else if (addTYPE == 'minute'){day.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){day.addSeconds(addTIME*(60*60));}
else if (addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

//Takes a glide date field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - day, week, month, year),sysparm_addtime (amount of time to add based on the type).
addDateAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDate();
day.setValue(firstDT);

if(addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

addTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var time = GlideTime();
time.setValue(firstDT);

if(addTYPE == 'second'){time.addSeconds(addTIME);}
else if (addTYPE == 'minute'){time.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){time.addSeconds(addTIME*(60*60));}
else {time.addSeconds(addTIME);}

var modtime = time.toString().split(' ');
//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + time;
return modtime[1];
},

//Private function to calculate the date difference return result in second, minute, hour, day.
_calcDateDiff: function(diffTYPE, seconds){
var thisdiff;
if (diffTYPE == "day"){thisdiff = seconds/86400;}
else if (diffTYPE == "hour"){thisdiff = seconds/3600;}
else if (diffTYPE == "minute"){thisdiff = seconds/60;}
else if (diffTYPE == "second"){thisdiff = seconds;}
else {thisdiff = seconds;}
return thisdiff;
},

// Date Validation for Change Management Implementation Plan
getDateDiff: function() {

var date_1 = this.getParameter('date_1');
var date_2 = this.getParameter('date_2');
gs.log("date1 and date 2" + date_1 + "date 2" + date_2);
var sDeD = gs.dateDiff(date_1,date_2,true);
gs.log('getDateDiff retuning value:'+sDeD);
return sDeD;
},
getConvertDate: function() {
var toptsk = this.getParameter('sysparm_chgStart');
var endDatetsk = this.getParameter('sysparm_funStartDate1');
//gs.log('ICC Change:toptsk&&endDatetsk'+toptsk+':::'+endDatetsk);

/*var temp = new Packages.java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
var cdt = toptsk;
cdt = temp.parse(cdt);
var output = new Packages.java.text.SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
var output1 = output.format(cdt);
var dateDiff = gs.dateDiff(output1,endDatetsk,true);*/
//var date1 = new GlideDateTime();
var year = toptsk.split('-')[0];
var month = toptsk.split('-')[1];
var dayTime = toptsk.split('-')[2];
var day = dayTime.split(' ')[0];
var time = dayTime.split(' ')[1];
var ndate= day + '-' + month + '-' + year + ' ' + time;
//gs.log("End Date" + ndate + "endDatetsk" + endDatetsk);

//gs.log('ICC Change:ndate&&endDatetsk'+ndate+':::'+endDatetsk);

/*var date1 = new GlideDateTime();
var date2 = new GlideDateTime();
date1.setDisplayValueInternal(ndate);
date2.setDisplayValueInternal(endDatetsk);*/
var diffSeconds = gs.dateDiff(ndate, endDatetsk,true);
//var diffSeconds = gs.dateDiff(ndate.getDisplayValue(), endDatetsk.getDisplayValue(),true);
//gs.log('ICC Change diffSeconds:'+diffSeconds);
return diffSeconds;
//return dateDiff;
},
getDateDiffLead: function() {
var date_1 = new GlideDateTime();
var date_2 = new GlideDateTime();
date_1 = this.getParameter('date_1');
date_2 = this.getParameter('date_2');
var date_1Split = date_1.split(" ");
var datePart = date_1Split[0].split("-");
var Date1AfterSplit = datePart[2] + '-' + datePart[1] + '-' + datePart[0] + " " + date_1Split[1];

var date_2Split = date_2.split(" ");
var datePart2 = date_2Split[0].split("-");
var Date2AfterSplit = datePart2[2] + '-' + datePart2[1] + '-' + datePart2[0] + " " + date_2Split[1];

gs.log("First date" + Date1AfterSplit + "Second Date" + Date2AfterSplit);
var opnlead = new GlideDateTime(Date1AfterSplit);

var rid = new GlideDateTime(Date2AfterSplit);
//rid.setValueUTC(rid);
opnlead.addDaysLocalTime(5);
rid.addDaysLocalTime(0);



var sDeD = gs.dateDiff(opnlead,rid,true);
gs.log('getDateDiff retuning value:'+sDeD);
return sDeD;
},
getDateDiffLead3: function() {
var date_1 = new GlideDateTime();
var date_2 = new GlideDateTime();
date_1 = this.getParameter('date_1');
date_2 = this.getParameter('date_2');
var date_1Split = date_1.split(" ");
var datePart = date_1Split[0].split("-");
var Date1AfterSplit = datePart[2] + '-' + datePart[1] + '-' + datePart[0] + " " + date_1Split[1];

var date_2Split = date_2.split(" ");
var datePart2 = date_2Split[0].split("-");
var Date2AfterSplit = datePart2[2] + '-' + datePart2[1] + '-' + datePart2[0] + " " + date_2Split[1];

gs.log("First date" + Date1AfterSplit + "Second Date" + Date2AfterSplit);
var opnlead = new GlideDateTime(Date1AfterSplit);

var rid = new GlideDateTime(Date2AfterSplit);
//rid.setValueUTC(rid);
opnlead.addDaysLocalTime(3);
rid.addDaysLocalTime(0);


var sDeD = gs.dateDiff(opnlead,rid,true);
gs.log('getDateDiff retuning value:'+sDeD);
return sDeD;
},
});

 

 

This is working as expected. Below is the screenshot-

find_real_file.png

Regards,

Evan