How to design a Suitelet page for Mass Approval

Here we have to design a suitelet page using suitelet script.

/**
 * @NApiVersion 2.1
 * @NScriptType Suitelet
 */
/*
 ********************************************************************************************************
 * 
 * Joinbranded-France-NS
 * 
 * JOINF-1804 : Mass Approval of inventory adjustment workflow. 
 * 
 * *****************************************************************************************************
 * 
 * Author : Jobin and Jismi IT Services
 * 
 * Date Created: 29 - June - 2023
 * 
 * Created by: Linu Paul, Jobin and Jismi IT Services
 * 
 * Description: In this Suitelet Script, we displayed the Inventory Adjustment Requests from custom record, all of which are in a pending status
  
 * Revision History: 
 * 
 * *
 * ********************************************************************************************************
 */
define(['N/task', 'N/ui/serverWidget', 'N/search', 'N/file', 'N/record', 'N/runtime', 'N/error'], (task, serverWidget, search, file, record, runtime, error) => {
    "use strict";
    const INVENTORY_ADJUSTMENT = 20812;
    const onRequest = (scriptContext) => {

        let currentUser = runtime.getCurrentUser().id;
        log.debug("current user", currentUser);
        let employeeSearchObj = search.create({
            type: "employee",
            filters:
                [
                    ["internalid", "anyof", currentUser]
                ],
            columns:
                [
                    search.createColumn({ name: "custentity_jj_ia_req_approvers", label: "IA Request approvers" })
                ]
        });
        let searchResultCount = employeeSearchObj.runPaged().count;
        log.debug("employeeSearchObj result count", searchResultCount);
        let checkboxValue;
        if (searchResultCount > 0) {

            employeeSearchObj.run().each(function (result) {
                checkboxValue = result.getValue("custentity_jj_ia_req_approvers");
            });
            log.debug("checkbox Value", checkboxValue);
        }
        if (checkboxValue == true) {
            try {
                let form = serverWidget.createForm({
                    title: 'Inventory Adjustment Request'
                });
                if (scriptContext.request.method === 'GET') {

                    let sublist = form.addSublist({
                        id: '_jj_sublist',
                        type: serverWidget.SublistType.LIST,
                        label: 'View Inventory Adjustment Request'
                    });
                    sublist.addField({
                        id: 'custrecord_jj_tick',
                        type: serverWidget.FieldType.CHECKBOX,
                        label: 'Select'
                    });
                    sublist.addField({
                        id: 'internalid',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Internal ID',
                        align: serverWidget.LayoutJustification.RIGHT
                    });
                    sublist.addField({
                        id: 'custrecord_jj_name',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Inventory Adjustment Name',
                        align: serverWidget.LayoutJustification.RIGHT
                    });
                    sublist.addField({
                        id: 'custrecord_jj_subsidiary',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Subsidiary',
                        align: serverWidget.LayoutJustification.RIGHT
                    });
                    sublist.addField({
                        id: 'custrecord_jj_account',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Adjustment Account',
                        align: serverWidget.LayoutJustification.RIGHT
                    });
                    sublist.addField({
                        id: 'custrecord_jj_date',
                        type: serverWidget.FieldType.DATE,
                        label: 'Date',
                        align: serverWidget.LayoutJustification.RIGHT
                    });
                    sublist.addField({
                        id: 'custrecord_jj_status',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Status',
                        align: serverWidget.LayoutJustification.RIGHT
                    });
                    sublist.addMarkAllButtons();
                    form.addSubmitButton({
                        label: "Submit"
                    });
                    let customrecord_jj_inv_adjustment_requestSearchObj = search.create({
                        type: "customrecord_jj_inv_adjustment_request",
                        filters:
                            [
                                ["custrecord_jj_ia_req_status", "anyof", "1"],
                                "AND",
                                ["formulatext: {custrecord_jj_ia_request.custrecord_jj_ia_req_item}", "isnotempty", ""],
                                "AND",
                                ["isinactive", "is", "F"],
                                "AND",
                                ["formulanumeric: case when {custrecord_jj_created_by.altname}={user.altname} then 0 else 1 end", "equalto", "1"]
                            ],
                        columns:
                            [
                                search.createColumn({ name: "internalid", label: "Internal ID" }),
                                search.createColumn({
                                    name: "name",
                                    sort: search.Sort.ASC,
                                    label: "ID"
                                }),
                                search.createColumn({ name: "custrecord_jj_ia_req_subsidiary", label: "SUBSIDIARY " }),
                                search.createColumn({ name: "custrecord_jj_ia_req_adjustment_account", label: "ADJUSTMENT ACCOUNT " }),
                                search.createColumn({ name: "custrecord_jj_ia_req_date", label: "Date" }),
                                search.createColumn({ name: "custrecord_jj_ia_req_status", label: "STATUS" })
                            ]
                    });
                    let searchResultCount = customrecord_jj_inv_adjustment_requestSearchObj.runPaged().count;
                    if (searchResultCount > 0) {
                        let arr = [];
                        let obj;
                        let searchResult = customrecord_jj_inv_adjustment_requestSearchObj.run();
                        searchResult.each(function (result) {
                            obj = {};
                            obj.internalid = result.getValue(searchResult.columns[0]);
                            obj.custrecord_jj_name = result.getValue(searchResult.columns[1]);
                            obj.custrecord_jj_subsidiary = result.getText(searchResult.columns[2]);
                            obj.custrecord_jj_account = result.getText(searchResult.columns[3]);
                            obj.custrecord_jj_date = result.getValue(searchResult.columns[4]);
                            obj.custrecord_jj_status = result.getText(searchResult.columns[5]);
                            arr.push(obj);
                            return true;
                        });
                        //Rendering the array to sublist
                        for (let j = 0; j < arr.length; j++) {
                            sublist.setSublistValue({
                                id: 'internalid',
                                line: j,
                                value: arr[j].internalid
                            });
                            sublist.setSublistValue({
                                id: 'custrecord_jj_name',
                                line: j,
                                value: arr[j].custrecord_jj_name
                            });
                            sublist.setSublistValue({
                                id: 'custrecord_jj_subsidiary',
                                line: j,
                                value: arr[j].custrecord_jj_subsidiary
                            });
                            sublist.setSublistValue({
                                id: 'custrecord_jj_account',
                                line: j,
                                value: arr[j].custrecord_jj_account
                            });
                            sublist.setSublistValue({
                                id: 'custrecord_jj_date',
                                line: j,
                                value: arr[j].custrecord_jj_date
                            });
                            sublist.setSublistValue({
                                id: 'custrecord_jj_status',
                                line: j,
                                value: arr[j].custrecord_jj_status
                            });
                        }
                    }
                    else {
                        log.debug("No Inventory Adjustment Request");
                    }
                    scriptContext.response.writePage(form);
                }

                //Post action of Suitelet

                else {
                    let lineCount = scriptContext.request.getLineCount('_jj_sublist');
                    let contentArray = [];
                    let suiteUrl = "/app/site/hosting/scriptlet.nl?script=2139&deploy=1"
                    let suiteLink = "<a href=" + suiteUrl + ">" + "GO BACK</a>"
                    if (lineCount > 0) {
                        let ifChecked = 0, adjInternalId;
                        for (let i = 0; i < lineCount; i++) {
                            let tempObj = {};
                            let sublistFieldValue = scriptContext.request.getSublistValue({
                                group: '_jj_sublist',
                                name: 'custrecord_jj_tick',
                                line: i
                            });
                            if (sublistFieldValue == "T") {
                                ifChecked = 1;
                                adjInternalId = scriptContext.request.getSublistValue({
                                    group: '_jj_sublist',
                                    name: 'internalid',
                                    line: i
                                });
                                tempObj.internalid = adjInternalId;
                                contentArray.push(tempObj);
                                record.submitFields({
                                    type: 'customrecord_jj_inv_adjustment_request',
                                    id: adjInternalId,
                                    values: {
                                        'custrecord_jj_ia_req_mapreducestatus': 1,
                                    }
                                });
                            }
                        }
                        let savedFile;
                        if (ifChecked == 1) {
                            let content = JSON.stringify(contentArray);
                            let fileObj = file.create({
                                name: `Adjst_Inventory_${new Date().getTime}.txt`,
                                fileType: file.Type.PLAINTEXT,
                                contents: content,
                                description: 'Adjust Inventory',
                                folder: INVENTORY_ADJUSTMENT
                            });
                            savedFile = fileObj.save();
                            let mapReduceScriptId = 'customscript_jj_mr_masaproval_joinf1804';
                            let mapReduceDeployId = 'customdeploy_jj_mr_masaproval_joinf1804';
                            let mrTask = task.create({
                                taskType: task.TaskType.MAP_REDUCE,
                                scriptId: mapReduceScriptId,
                                deploymentId: mapReduceDeployId,
                                params: {
                                    custscript_jj_adjst_records: savedFile,

                                }
                            });
                            let mrTaskId = mrTask.submit()
                            let taskStatus = task.checkStatus(mrTaskId);
                            log.debug("Map Reduce Status", taskStatus.status);
                            let approvedUrl = "https://7036058-sb1.app.netsuite.com/app/common/search/searchresults.nl?searchid=16529&saverun=T&whence="
                            let approvedLink = "<a href=" + approvedUrl + ">" + "Link to the Approved Custom Records</a>"
                            scriptContext.response.write('<b><h2> Inventory Adjustment Request Created</h2></b></br>'
                                + approvedLink);
                        }
                        else {
                            log.debug("There is no selected records");
                            scriptContext.response.write('<b><h2> There is No Selected Records to create Inventory Adjustment Request</h2></b></br>'
                                + suiteLink);
                        }
                    }
                    else {
                        log.debug("There is no records to display");
                        scriptContext.response.write('<b><h2> There is No Records in Pending Approval Status</h2></b></br>'
                            + suiteLink);
                    }
                }
            }
            catch (e) {
                log.error("error@request function", e);
                return false;
            }
        }
        else {
            log.debug("inside else");
            let customError = error.create({
                name: 'PERMISSION VIOLATION',
                message: "You have no permission to view the Inventory Adjustment Request Mass Approval Page ",
                notifyOff: false
            });
            throw customError.message;
        }
    }
    return { onRequest }
});

Leave a comment

Your email address will not be published. Required fields are marked *