Need to populate approver based on amount selected

suuriyas
Tera Contributor

HI Community,

 

I have a requirement, in catalog form we have these variables, based on the amount selected the approver need to be populated in the additional approver field. I have written a script but it is not working as expected it because the value in amount in eur will display as 400 000.00 and not as 400000.00 (we have used regex pattern in script to achieve this) because of this my existing script is not populating the approver details.

suuriyas_1-1743164419255.png

catalog client script:

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
 
    var amt = g_form.getValue("amount_in_eur");
    var ru = g_form.getValue("reporting_unit");
    var ajax = new GlideAjax('x_kaoy_finops.PaymentApproverFilter');
    ajax.addParam('sysparm_name', 'vendorapproverFilter');
    ajax.addParam('sysparm_reporting_unit', ru);
    ajax.addParam('sysparm_amount', amt);
    ajax.getXML(getApprover);

    function getApprover(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
       // alert(answer);
        g_form.setValue('approver', answer);
    }

}
 
Script Include
var PaymentApproverFilter = Class.create();
PaymentApproverFilter.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

    customerRefund: function(rep_unit, amt_in_eur) {
        var answerRefund = [];
        var pay = new GlideRecord('x_kaoy_finops_payment_form_approvers');
        var amtInt = parseFloat(amt_in_eur).toFixed(2);
        pay.addQuery('reporting_unit', rep_unit);

        if (amtInt < 100000) {
            return ''; //No approval Needed
        }

        if (amtInt < 500000) {

            pay.addQuery('min_amount_in_approval_eur', '<=', amtInt);
            pay.addQuery('max_amount_in_approval_eur', '>', amtInt);
        }
        if (amtInt >= 500000) {

            pay.addQuery('min_amount_in_approval_eur', '<=', amtInt);
            pay.addEncodedQuery('max_amount_in_approval_eur=NULL');
        }
        pay.addEncodedQuery('active=true^approver_for_payment_types=Customer Refund');
        pay.query();
        while (pay.next()) {
            answerRefund.push(pay.approver.toString());
        }
        return answerRefund.toString();
    },


    getcustomerRefundApprovers: function() {
        var ru = this.getParameter("sysparm_reporting_unit");
        var am = this.getParameter("sysparm_amount");

        return this.customerRefund(ru, am);
    },




    vendorapproverFilter: function() {

        var ru = this.getParameter("sysparm_reporting_unit");
        var am = this.getParameter("sysparm_amount");
        //gs.debug("running sI");
        var amt = parseFloat(am).toFixed(2);
        var gr = new GlideRecord('x_kaoy_finops_payment_form_approvers');
        var answer = [];
        gr.addQuery('reporting_unit', ru);
        if (amt < 100000) {
            return ''; //No approval Needed
        }
        if (amt < 500000) {
            gr.addQuery('min_amount_in_approval_eur', '<=', amt);
            gr.addQuery('max_amount_in_approval_eur', '>', amt);
        }
        if (amt >= 500000) {
            gr.addQuery('min_amount_in_approval_eur', '<=', amt);
            gr.addEncodedQuery('max_amount_in_approval_eur=NULL');
        }
        gr.addEncodedQuery('active=true^approver_for_payment_types=Vendor Payment');
        gr.query();
        while (gr.next()) {
            answer.push(gr.approver.toString());
        }
        return answer.toString();

    },


    type: 'PaymentApproverFilter'
});
 
In Payment table , values will be displaying like this
suuriyas_2-1743164745205.png

 

How can we achieve this

 

1 ACCEPTED SOLUTION

J Siva
Tera Sage

Hi @suuriyas 

Add the below lines to your script. It'll work as expected.

 

var amt = g_form.getValue("amount_in_eur");
//-----START------
var result = amt.replace(/\s+/g, "");
//-----END--------
    var ru = g_form.getValue("reporting_unit");
    var ajax = new GlideAjax('x_kaoy_finops.PaymentApproverFilter');
    ajax.addParam('sysparm_name', 'vendorapproverFilter');
    ajax.addParam('sysparm_reporting_unit', ru);
    ajax.addParam('sysparm_amount', result); // send the converted string 
    ajax.getXML(getApprover);

    function getApprover(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
       // alert(answer);
        g_form.setValue('approver', answer);
    }

Hope this helps.

Regards,

Siva

 

View solution in original post

4 REPLIES 4

J Siva
Tera Sage

Hi @suuriyas 

Add the below lines to your script. It'll work as expected.

 

var amt = g_form.getValue("amount_in_eur");
//-----START------
var result = amt.replace(/\s+/g, "");
//-----END--------
    var ru = g_form.getValue("reporting_unit");
    var ajax = new GlideAjax('x_kaoy_finops.PaymentApproverFilter');
    ajax.addParam('sysparm_name', 'vendorapproverFilter');
    ajax.addParam('sysparm_reporting_unit', ru);
    ajax.addParam('sysparm_amount', result); // send the converted string 
    ajax.getXML(getApprover);

    function getApprover(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
       // alert(answer);
        g_form.setValue('approver', answer);
    }

Hope this helps.

Regards,

Siva

 

suuriyas
Tera Contributor

HI @J Siva ,

 

It worked 

But can you please explain me what this command is, it would be helpful for me to understand

Sure. It'll remove the white spaces from the string.

\s -> white space 

We are removing all the white spaces by replacing it with empty string.

Hope this helps.

 

Vasantharajan N
Giga Sage
Giga Sage

@suuriyas - I can see the variable is of type currency. Can you share the field type (min_amount_in_approval_eur & max_amount_in_approval_eur)on the table against which you are running the amount comparison.


Thanks & Regards,
Vasanth