Approval Info Widget comment issue same comment showing up 3 times

NikolaTesla
Tera Expert

I have an issue where everything is working but it captures the reject reason 3 times and post them back in RITM 3 times creating 3 notifications. I only want it to post once so there won't be 3 notifcations and 3 same comments. Thanks in advance.

 

My Current code:

 

Code for Approval info widget is below(Paris release):

Server Side :

(function() {
    data.actionPreventedMsg = gs.getMessage("Update failed");
    var gr = $sp.getRecord();
    if (gr == null || !gr.isValid()) {
        data.isValid = false;
        return;
    }

    data.isValid = true;
    data.isMine = isApprovalMine(gr);
    var userApprovalAccess = gs.hasRole("approval_admin") || (gs.hasRole("approver_user") && data.isMine);
   
    var approverDisplay = gr.approver.getDisplayValue();
    if (!data.isMine && approverDisplay)
        data.approverDisplay = approverDisplay;

    if (approverDisplay) {
        data.approvedMsg = gs.getMessage("Approved by {0}", approverDisplay);
        data.rejectedMsg = gs.getMessage("Rejected by {0}", approverDisplay);
    } else {
        data.approvedMsg = gs.getMessage("Approved");
        data.rejectedMsg = gs.getMessage("Rejected");
    }

    if (input && input.op && userApprovalAccess) {
        gr.state = input.op;

        // Store rejection reason if applicable
        if (input.op === 'rejected' && input.rejectionReason) {
            // Check if rejection reason already exists in comments to prevent duplicate entries
            if (!gr.comments.includes(input.rejectionReason)) {
                gr.comments = "Rejection Reason: " + input.rejectionReason;
            }
        }

        data.updateID = gr.update();
        if (GlideStringUtil.nil(data.updateID)) {
            gr = $sp.getRecord();
        }
        data.op = "";
    }

    var fields = $sp.getFields(gr, 'state,sys_created_on');

    if (gr.sys_mod_count > 0)
        fields.push($sp.getField(gr, 'sys_updated_on'));

    data.fields = fields;
    data.state = gr.state.toString();
    data.sys_updated_on = gr.sys_updated_on.toString();
    data.sys_id = gr.getUniqueValue();
    data.table = gr.getTableName();
    var record = getRecordBeingApproved(gr);
    data.label = record.getLabel();
    data.approvedStatusMsg = gs.getMessage("{0} has been approved", record.number);

    // Append rejection reason to the related RITM/task if applicable
    if (gr.state == 'rejected' && input.rejectionReason) {
        var taskGR = new GlideRecord('sc_req_item'); // Change to 'task' if needed
        if (taskGR.get(record.sys_id)) {
            // Check if rejection reason already exists in task comments to prevent duplicate entries
            if (!taskGR.comments.includes(input.rejectionReason)) {
                taskGR.comments = "Rejected: " + input.rejectionReason;
                taskGR.update();
            }
        }
    }

    data.esignature = {
        username:  gs.getUserName(),
        userSysId: gs.getUserID(),
        e_sig_required: checkESig(gr)
    };

    function checkESig(approvalGR) {
        var esigRegistryGR = new GlideRecord("e_signature_registry");
        if (!esigRegistryGR.isValid())
            return false;
       
        var table = approvalGR.getValue("source_table");
        if (!table)
            table = approvalGR.sysapproval.sys_class_name;
        if (!table)
            return false;
       
        esigRegistryGR.addQuery("enabled", "true");
        esigRegistryGR.addQuery("table_name", table);
        esigRegistryGR.query();
        return esigRegistryGR.hasNext();
    }
   
    function getRecordBeingApproved(gr) {
        if (!gr.sysapproval.nil())
            return gr.sysapproval.getRefRecord();
        return gr.document_id.getRefRecord();
    }
})();

 

 

Client Controller :

function ($scope, spUIActionsExecuter, spUtil) {
    var c = this;
   
    var ESIGNATURE = {
        "approved": "cbfe291147220100ba13a5554ee4904d",
        "rejected": "580f711147220100ba13a5554ee4904b"
    };

    spUtil.recordWatch($scope, "sysapproval_approver", "state=requested^sys_id=" + c.data.sys_id);
    c.approvalInProgress = false;
   
    c.action = function(state) {
        if (state === 'rejected') {
            var rejectionReason = prompt("Please provide a rejection reason:");
            if (!rejectionReason || rejectionReason.trim() === '') {
                spUtil.addErrorMessage("Rejection reason is required.");
                return;
            }
            c.data.rejectionReason = rejectionReason;
        }

        if (c.data.esignature.e_sig_required) {
            var requestParams = {
                username: c.data.esignature.username,
                userSysId: c.data.esignature.userSysId
            };
            spUIActionsExecuter.executeFormAction(ESIGNATURE[state], "sysapproval_approver", c.data.sys_id, [] , "", requestParams).then(function(response) {});
        } else {
            c.approvalInProgress = true;
            c.data.op = state;
            c.server.update().then(function() {
                c.approvalInProgress = false;
                if (!c.data.updateID)
                    spUtil.addErrorMessage(c.data.actionPreventedMsg);
                else {
                    c.data.state = state;
                    if (state === 'approved') {
                        spUtil.addInfoMessage(c.data.approvedStatusMsg);
                    } else if (state === 'rejected') {
                        spUtil.addInfoMessage("Approval rejected with reason: " + c.data.rejectionReason);
                    }
                }
            });
        }
    };
}
0 REPLIES 0