I need to allow user only to select date after 7 days excluding business days.

niveditakumari
Mega Sage

Hi,  

 

I need to allow user to select date after 7 days but it should calculate only business days not weekend. In our project as per client we follow Friday, Saturday as weekend and I need to exclude Friday, Saturday. When user select date then it should calculate for Sunday, Monday, Tuesday, Wednesday, Thursday as business day.  

Can you please help me with that. 

 

Regards, 

Nivedita 

 

 

1 ACCEPTED SOLUTION

@niveditakumari 

it worked see

Script Include:

var ValidationUtils = Class.create();
ValidationUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    validateDate: function() {

        var selected_date = new GlideDateTime(this.getParameter('sysparm_expectedDate'));
        var requiredDate = new GlideDateTime(); // Todays Date
        var businessDays = 7;
        var daysAdded = 0;
        while (daysAdded < businessDays) {
            requiredDate.addDays(1); // Move to the next day
            var dayOfWeek = requiredDate.getDayOfWeek(); // 1 = Sunday, 2 = Monday, ..., 7 = Saturday
            if (dayOfWeek != 6 && dayOfWeek != 7) { // Exclude Friday (6) and Saturday (7)
                daysAdded++;
            }
        }
        var output = {};
        if (selected_date.getDate() > requiredDate.getDate()) {
            output.correctDateSelected = 'Yes';

        } else {
            output.correctDateSelected = 'No';
            output.requiredDate = requiredDate.getDate().toString();
        }
        return JSON.stringify(output);
    },
    type: 'ValidationUtils'
}); 

AnkurBawiskar_1-1742903835567.png

 

Client Script:

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

    g_form.hideFieldMsg('my_datetime');

    var validateSelectedDate = new GlideAjax('global.ValidationUtils');
    validateSelectedDate.addParam('sysparm_name', 'validateDate');
    validateSelectedDate.addParam('sysparm_expectedDate', g_form.getValue('my_datetime')); //Replace your date time variable
    validateSelectedDate.getXMLAnswer(function getExpectedDate(answer) {
        var validatedOutput = JSON.parse(answer);
        if (validatedOutput.correctDateSelected == 'No') {
            g_form.showFieldMsg('my_datetime', 'kindly select date after ' + validatedOutput.requiredDate.toString(), 'error');
        }
    });

    //Type appropriate comment here, and begin script below

}

AnkurBawiskar_0-1742903809426.png

 

Output:

business days.gif

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

38 REPLIES 38

@niveditakumari 

when your onSubmit runs please use field message to show/hide the error

so when user is stopped user gets field message, then user changes the value, again if user submits it will clear the field message and if date is fine, it will allow user to submit

function onSubmit() {
    //Type appropriate comment here, and begin script below
    g_form.hideFieldMsg('expected_date_time');

    var validateSelectedDate = new GlideAjax('global.ValidationUtils');
    validateSelectedDate.addParam('sysparm_name', 'validateDate');
    validateSelectedDate.addParam('sysparm_expectedDate', g_form.getValue('expected_date_time')); //Replace your date time variable
    validateSelectedDate.getXMLAnswer(function getExpectedDate(answer) {
        var validatedOutput = JSON.parse(answer);

        if (validatedOutput.correctDateSelected == 'No') {
            g_form.showFieldMsg('expected_date_time', 'kindly select date after ' + validatedOutput.requiredDate.toString(), 'error');
            return false;
        }
    });
}

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Hi @Ankur Bawiskar

 

I have added script for field error message but I'm not able to get field error message. 

Please see attached screenshot : 

function onSubmit() {
    //Type appropriate comment here, and begin script below

    var validateSelectedDate = new GlideAjax('global.ValidationUtils');
    validateSelectedDate.addParam('sysparm_name', 'validateDate');
    validateSelectedDate.addParam('sysparm_expectedDate', g_form.getValue('expected_date_time')); //Replace your date time variable
    validateSelectedDate.getXMLAnswer(function getExpectedDate(answer) {
        var validatedOutput = JSON.parse(answer);

        if (validatedOutput.correctDateSelected == 'No') {
            g_form.showFieldMsg('expected_date_time', 'kindly select date after ' + validatedOutput.requiredDate.toString(), 'error');
            //g_form.addErrorMessage('kindly select date after ' + validatedOutput.requiredDate.toString());
            return false;
        }
    });
niveditakumari_0-1742895984039.png

 

 
Regards,
Nivedita 
 
 

@niveditakumari 

I will suggest to use onChange rather than onSubmit.

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

@niveditakumari 

use toString() in script include. it should work fine

            output.requiredDate = requiredDate.getDate().toString();
If my response helped please mark it correct and close the thread so that it benefits future readers.
Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Hi @Ankur Bawiskar

 

I have added above line but not working. 

Please find attached screenshot : 

 

Client Script 

function onSubmit() {
    //Type appropriate comment here, and begin script below

    var validateSelectedDate = new GlideAjax('global.ValidationUtils');
    validateSelectedDate.addParam('sysparm_name', 'validateDate');
    validateSelectedDate.addParam('sysparm_expectedDate',       g_form.getValue('expected_date_time')); //Replace your date time variable
    validateSelectedDate.getXMLAnswer(function getExpectedDate(answer) {
        var validatedOutput = JSON.parse(answer);

        if (validatedOutput.correctDateSelected == 'No') {
            g_form.clearValue('expected_date_time');
            g_form.showFieldMsg('expected_date_time', 'kindly select date after ' + validatedOutput.requiredDate.toString(), 'error');
            //g_form.addErrorMessage('kindly select date after ' + validatedOutput.requiredDate.toString());
            return false;
        }
    });
 
Script Include 
var ValidationUtils = Class.create();
ValidationUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    validateDate: function() {

        var selected_date = new GlideDateTime(this.getParameter('sysparm_expectedDate'));
        var requiredDate = new GlideDateTime(); // Todays Date
        var businessDays = 7;
        var daysAdded = 0;

        while (daysAdded < businessDays) {
            requiredDate.addDays(1); // Move to the next day
            var dayOfWeek = requiredDate.getDayOfWeek(); // 1 = Sunday, 2 = Monday, ..., 7 = Saturday

            if (dayOfWeek != 6 && dayOfWeek != 7) { // Exclude Friday (6) and Saturday (7)
                daysAdded++;
            }
        }

        var output = {};
        if (selected_date.getDate() > requiredDate.getDate()) {
            output.correctDateSelected = 'Yes';

        } else {
            output.correctDateSelected = 'No';
            output.requiredDate = requiredDate.getDate().toString();
        }

        return JSON.stringify(output);
    },
    type: 'ValidationUtils'
}); 
 
I'm selecting tomorrow date in date field and it is not showing error message. It is submitting request.
Can you please correct that. 
 
Regards, 
Nivedita