Need to restrict user from selecting less than 5 working days date from current days and also need to restrict user from selecting weekends

Musab Rasheed
Tera Sage
Tera Sage

Hi,

I have a urgent requirement to be finished and it is as follows.

I have a date field on catalog form and i Need to restrict user from selecting less than 5 working days date from current date and also need to restrict user from selecting weekends.

I have gone through few links   but it is pretty confusing. please help me on this.

Thanks

Please hit like and mark my response as correct if that helps
Regards,
Musab
1 ACCEPTED SOLUTION

Hi,



I have completed this requirement successfully. below code will work for me.



CS:



function onChange(control, oldValue, newValue, isLoading) {


    if (isLoading || newValue == '') {


          return;


    }




    //Type appropriate comment here, and begin script below




var cdt = newValue; //The date field


  var dttype = 'day'; //this can be day, hour, minute, second. By default it will return seconds.


g_form.hideFieldMsg('due_date');



var day = new GlideAjax('ClientDateTimeUtils');


  day.addParam('sysparm_name','getDateDifferenceExcWeekends');


  day.addParam('sysparm_fdt', cdt);


  day.addParam('sysparm_difftype', dttype);


  day.getXML(checkDay);



  function checkDay(response){


  var answer = response.responseXML.documentElement.getAttribute("answer");


// alert(answer);


  if(answer == 'Sunday' || answer == 'Saturday'){


g_form.showFieldMsg('due_date', "Date should not be on Weekends " , 'error');


// alert("Date should not be in Weekend");


  g_form.clearValue('due_date'); // Pass the variable name here


  g_form.setMandatory('due_date');


  }


else


{


var ajax = new GlideAjax('ClientDateTimeUtils');


  ajax.addParam('sysparm_name','getNowDateTimeDiff');


  ajax.addParam('sysparm_fdt', cdt);


  ajax.addParam('sysparm_difftype', dttype);


  ajax.getXML(doSomething);



  function doSomething(response){


  var answer = response.responseXML.documentElement.getAttribute("answer");


  //alert(answer);


  if(answer<0 || answer<5){


  g_form.showFieldMsg('due_date', "Date should be more than 5 working days from today " , 'error');


  //alert('Change value');


// alert("Date should be more than 5 working days from today.");


  g_form.clearValue('due_date'); // Pass the variable name here


  g_form.setMandatory('due_date');


  }


  }


}


  }



Script Include:



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;


  },



  //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;


  },



getDateDifferenceExcWeekends: function(){


  //Make Sure that start and end are GlideDateTime Objects


  var firstDT = this.getParameter('sysparm_fdt');


  var gdt = new GlideDateTime(firstDT);


  var days = gdt.getDayOfWeekLocalTime();


  //var days = firstDT.getGlideObject().getDayOfWeek();


  gs.log('Days is: '+days);


  var day;


  if (days == 1) {


  day = 'Monday';


  } else if (days == 2) {


  day = 'Tuesday';


  } else if (days == 3) {


  day = 'Wednesday';


  } else if (days == 4) {


  day = 'Thursday';


  } else if (days == 5) {


  day = 'Friday';


  } else if (days == 6) {


  day = 'Saturday';


  } else {


  day = "Sunday";


  }


  return day;


  }



  });




P.S : I got this code from community and modified as per my requirement.



Please hit like or helpful if it has helped.



Thanks.


Please hit like and mark my response as correct if that helps
Regards,
Musab

View solution in original post

7 REPLIES 7

gdd
Giga Expert

hi,



easiest way would be to add select box and add options on the run time by fetching required dates.



so that we will restrict user to see only required dates.


Hi,



I have completed this requirement successfully. below code will work for me.



CS:



function onChange(control, oldValue, newValue, isLoading) {


    if (isLoading || newValue == '') {


          return;


    }




    //Type appropriate comment here, and begin script below




var cdt = newValue; //The date field


  var dttype = 'day'; //this can be day, hour, minute, second. By default it will return seconds.


g_form.hideFieldMsg('due_date');



var day = new GlideAjax('ClientDateTimeUtils');


  day.addParam('sysparm_name','getDateDifferenceExcWeekends');


  day.addParam('sysparm_fdt', cdt);


  day.addParam('sysparm_difftype', dttype);


  day.getXML(checkDay);



  function checkDay(response){


  var answer = response.responseXML.documentElement.getAttribute("answer");


// alert(answer);


  if(answer == 'Sunday' || answer == 'Saturday'){


g_form.showFieldMsg('due_date', "Date should not be on Weekends " , 'error');


// alert("Date should not be in Weekend");


  g_form.clearValue('due_date'); // Pass the variable name here


  g_form.setMandatory('due_date');


  }


else


{


var ajax = new GlideAjax('ClientDateTimeUtils');


  ajax.addParam('sysparm_name','getNowDateTimeDiff');


  ajax.addParam('sysparm_fdt', cdt);


  ajax.addParam('sysparm_difftype', dttype);


  ajax.getXML(doSomething);



  function doSomething(response){


  var answer = response.responseXML.documentElement.getAttribute("answer");


  //alert(answer);


  if(answer<0 || answer<5){


  g_form.showFieldMsg('due_date', "Date should be more than 5 working days from today " , 'error');


  //alert('Change value');


// alert("Date should be more than 5 working days from today.");


  g_form.clearValue('due_date'); // Pass the variable name here


  g_form.setMandatory('due_date');


  }


  }


}


  }



Script Include:



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;


  },



  //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;


  },



getDateDifferenceExcWeekends: function(){


  //Make Sure that start and end are GlideDateTime Objects


  var firstDT = this.getParameter('sysparm_fdt');


  var gdt = new GlideDateTime(firstDT);


  var days = gdt.getDayOfWeekLocalTime();


  //var days = firstDT.getGlideObject().getDayOfWeek();


  gs.log('Days is: '+days);


  var day;


  if (days == 1) {


  day = 'Monday';


  } else if (days == 2) {


  day = 'Tuesday';


  } else if (days == 3) {


  day = 'Wednesday';


  } else if (days == 4) {


  day = 'Thursday';


  } else if (days == 5) {


  day = 'Friday';


  } else if (days == 6) {


  day = 'Saturday';


  } else {


  day = "Sunday";


  }


  return day;


  }



  });




P.S : I got this code from community and modified as per my requirement.



Please hit like or helpful if it has helped.



Thanks.


Please hit like and mark my response as correct if that helps
Regards,
Musab

vinitha3
Tera Guru

Hello,



Out of box it is not that easy to set for the SNOW date time picker.



these links may be useful for you:



How to disable days from being selected on the Date/Time Datepicker field



How to remove Sundays and Saturdays from the calendar pickers?



Best way is to validate on 'Onsubmit" script.



Thanks,


Vinitha.K



Please mark helpful or correct based on the impact.


Hi,



I have completed this requirement successfully. below code will work for me.



CS:



function onChange(control, oldValue, newValue, isLoading) {


    if (isLoading || newValue == '') {


          return;


    }




    //Type appropriate comment here, and begin script below




var cdt = newValue; //The date field


  var dttype = 'day'; //this can be day, hour, minute, second. By default it will return seconds.


g_form.hideFieldMsg('due_date');



var day = new GlideAjax('ClientDateTimeUtils');


  day.addParam('sysparm_name','getDateDifferenceExcWeekends');


  day.addParam('sysparm_fdt', cdt);


  day.addParam('sysparm_difftype', dttype);


  day.getXML(checkDay);



  function checkDay(response){


  var answer = response.responseXML.documentElement.getAttribute("answer");


// alert(answer);


  if(answer == 'Sunday' || answer == 'Saturday'){


g_form.showFieldMsg('due_date', "Date should not be on Weekends " , 'error');


// alert("Date should not be in Weekend");


  g_form.clearValue('due_date'); // Pass the variable name here


  g_form.setMandatory('due_date');


  }


else


{


var ajax = new GlideAjax('ClientDateTimeUtils');


  ajax.addParam('sysparm_name','getNowDateTimeDiff');


  ajax.addParam('sysparm_fdt', cdt);


  ajax.addParam('sysparm_difftype', dttype);


  ajax.getXML(doSomething);



  function doSomething(response){


  var answer = response.responseXML.documentElement.getAttribute("answer");


  //alert(answer);


  if(answer<0 || answer<5){


  g_form.showFieldMsg('due_date', "Date should be more than 5 working days from today " , 'error');


  //alert('Change value');


// alert("Date should be more than 5 working days from today.");


  g_form.clearValue('due_date'); // Pass the variable name here


  g_form.setMandatory('due_date');


  }


  }


}


  }



Script Include:



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;


  },



  //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;


  },



getDateDifferenceExcWeekends: function(){


  //Make Sure that start and end are GlideDateTime Objects


  var firstDT = this.getParameter('sysparm_fdt');


  var gdt = new GlideDateTime(firstDT);


  var days = gdt.getDayOfWeekLocalTime();


  //var days = firstDT.getGlideObject().getDayOfWeek();


  gs.log('Days is: '+days);


  var day;


  if (days == 1) {


  day = 'Monday';


  } else if (days == 2) {


  day = 'Tuesday';


  } else if (days == 3) {


  day = 'Wednesday';


  } else if (days == 4) {


  day = 'Thursday';


  } else if (days == 5) {


  day = 'Friday';


  } else if (days == 6) {


  day = 'Saturday';


  } else {


  day = "Sunday";


  }


  return day;


  }



  });




P.S : I got this code from community and modified as per my requirement.



Please hit like or helpful if it has helped.



Thanks.


Please hit like and mark my response as correct if that helps
Regards,
Musab