Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

due date needs to set based on the priority value

Sanjay Kumar10
Tera Expert

I need to set Due date based on the priority value. If priority is 1 then due date should needs to be updated with 20 days from creation date likewise if priority is 2 then due date would be 30 days from creation date. If priority is 3 then due date would be 60 days from creation date and if priority is either 4 or 5 then due date would be 120 days from creation date. I can able to update it but the issue I'm facing is due date is updating 7 hours more. for example; I selected priority 1 and created on 05-Aug-2024 02:09:20 and due date is updating as 25-Aug-2024 09:09:20. Below are the code which I wrote. Could someone please help me to fix it.

 

Script Include:

 

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

    fetchDate: function() {

        var priority = this.getParameter('sysparm_priority');
        var num = this.getParameter('sysparm_number');
      //  gs.log('ppp = ' + priority);
       // gs.log('nnnn = ' + num);


        var problemGr = new GlideRecord('problem');
        problemGr.addQuery('number', num);
        problemGr.query();
        if (problemGr.next()) {
            var creationDate = problemGr.getValue('sys_created_on');
           // gs.log('ccc = ' + creationDate);
        }
        var days;
        if (priority == 1) {
            days = 20;
        } else if (priority == 2) {
            days = 30;
        } else if (priority == 3) {
            days = 60;
        } else if (priority == 4 || priority == 5) {
            days = 120;
        }
        //gs.log('aaaa = ' + days);
        if (days) {
            var newDueDate = new GlideDateTime(creationDate);
            newDueDate.addDaysUTC(days);
            return newDueDate;
        }

    },

    type: 'addDaysonduedate'
});
 
 
 
 
Client script:
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if ( newValue === '') {
      return;
   }

   var ga = new GlideAjax('addDaysonduedate');
   ga.addParam('sysparm_name', 'fetchDate');
   ga.addParam('sysparm_priority', newValue);
   ga.addParam('sysparm_number', g_form.getValue('number'));
   ga.getXML(dueDate);

   function dueDate(response){
    var answer = response.responseXML.documentElement.getAttribute('answer');
    g_form.setValue('due_date', answer);
   }
}
 
 
1 REPLY 1

Sumanth16
Kilo Patron

Hi @Sanjay Kumar10 ,

 

Approach 1:

Sample below.

#ClientCallable Script Include

 

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

	calculateDueDate: function(){
		var priority = this.getParameter('sysparm_priority');
		var gdt = new GlideDateTime();
		if(priority >= 3){
			return '';
		}
		gdt.addDaysUTC(7 * parseInt(priority));
		return gdt;
	},

    type: 'CLProblemUtilsAJAX'
});

 

 

#OnChange Client Script

 

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

    var ga = new GlideAjax('global.CLProblemUtilsAJAX');
    ga.addParam('sysparm_name', 'calculateDueDate');
    ga.addParam('sysparm_priority', g_form.getValue('priority'));
    ga.getXMLAnswer(function(response) {
        if (!response) {
            g_form.clearValue('due_date');
            g_form.setReadOnly('due_date', false);
            g_form.setMandatory('due_date', true);
            return;
        }
        g_form.setValue('due_date', response);
        g_form.setReadOnly('due_date', true);
    });

 

 

 

Approach 2:

For this ,use before business rule.

when to run before insert, update

condition priority is changes 

(function executeRule(current, previous /*null when async*/) {
var datevalue = current.priority;
var days1;

if (datevalue == '1') {
days1 = 7; // P1
} else if (datevalue == '2') {
days1 = 12; // P2
} else if (datevalue == '3' || datevalue == '4' || datevalue == '5') {
current.setValue('due_date', ''); // Clear the due date
}

if (days1) {
var ed = new GlideDateTime();
ed.addDays(days1);
current.due_date = ed;
}
})(current, previous);

 

 

Mark the comment as a correct answer and also helpful once worked.

 

Thanks & Regards,
Sumanth Meda