API for RTPOS

Jira Code : BTN-619

A RESTlet for RTPOS to communicate with NetSuite. This RESTlet will expose the contents of a predefined Saved Search created in NetSuite.

/**
 * @NApiVersion 2.x
 * @NScriptType Restlet
 * @NModuleScope SameAccount
 */
/*******************************************************************************
 * * Jobin & Jismi IT Services | Balaji Trading | BTN-619 | RESTlet API for RTPOS *
 * **************************************************************************
 *
 * Author: Jobin & Jismi IT Services LLP
 *
 * Date Created : 05-April-2019
 *
 * Created By : Manu Antony,Jobin & Jismi IT Services LLP
 *
 * SCRIPT ID: customscript_jj_btn619_rl_api_rtpos
 *
 * DEPLOYMENT ID: customdeploy_jj_btn619_rl_api_rtpos
 *
 * REVISION HISTORY
 *
 *
 ******************************************************************************/
"use strict";
var ERROR_STACK = [];
define(["N/search", "N/log"], function (search, log) {
    //To check whether a value exists in parameter
    function checkForParameter(parameter, parameterName) {
        if (parameter !== null && parameter !== undefined && parameter !== false && parameter !== "null" && parameter !== "undefined" && parameter !== "false" && parameter != "" && parameter != " ")
            return true;
        if (parameterName)
            log.debug("Empty Value found", "Empty Value for parameter " + parameterName);
        return false;
    }

    //To assign a default value if the it is empty
    function assignDefaultValue(value, defaultValue) {
        if (checkForParameter(value)) return value;
        return defaultValue;
    }

    //To reject predefined set of values
    function rejectThisValues(value) {
        var rejectObj = {
            null: true,
            undefined: true,
            NaN: true,
            0: true,
            false: true,
            "": true
        };
        return rejectObj[value] ? false : true;
    }

    //Common Try-Catch function
    function applyTryCatch(DATA_OBJ, NAME) {
        function tryCatch(myfunction, key) {
            return function () {
                try {
                    return myfunction.apply(this, arguments);
                } catch (e) {
                    log.error("error in " + key, e);
                    ERROR_STACK.push({
                        "position": key,
                        "error": e.message
                    });
                    return false;
                }
            };
        }
        for (var key in DATA_OBJ) {
            if (typeof DATA_OBJ[key] === "function") {
                DATA_OBJ[key] = tryCatch(DATA_OBJ[key], NAME + "." + key);
            }
        }
    }

    var main = {
        formatSavedSearch: function (savedSearchObj, savedSearchName, pageNumber) {
            //Creating Column Names 
            var columns = savedSearchObj.columns;
            var columnsData = {};
            columns.forEach(function (result, counter) {
                columnsData[result.label] = result;
            });
            //Paginating Results
            var searchPageRanges;
            try {
                searchPageRanges = savedSearchObj.runPaged({
                    pageSize: 500
                });
            } catch (err) {
                return [];
            }
            if (searchPageRanges.pageRanges.length < 1)
                return [];
            pageNumber = parseInt(pageNumber) - 1;
            pageNumber = pageNumber < 0 ? 0 : pageNumber; // The minimum value is always 0
            pageNumber = pageNumber > (searchPageRanges.pageRanges.length - 1) ? (searchPageRanges.pageRanges.length - 1) : pageNumber; // The maximum value is always searchPageRanges.pageRanges.length
            //Fetching Row Data
            var rowData = [],
                tempRow = {};
            searchPageRanges.fetch({
                    index: pageNumber
                }).data
                .forEach(function (result) {
                    tempRow = undefined;
                    tempRow = {};
                    for (var key in columnsData)
                        tempRow[key] = {
                            value: result.getValue(columnsData[key]),
                            text: result.getText(columnsData[key])
                        };

                    rowData.push(tempRow);
                });
            return this.formatResponse({
                "status": "SUCCESS",
                "message": rowData.length > 0 ? "INVOICE EXISTS" : "INVOICE DOESN'T EXISTS",
                "timeStamp": Date.now(),
                "pageLength": searchPageRanges.pageRanges.length,
                "pageNumber": pageNumber + 1
            }, rowData, false);
        },
        searchInvoiceRTPOS: function (pageNumber) {
            var invoiceSearchObj = search.load({
                id: 'customsearch12271'
            });
            var searchResultCount = invoiceSearchObj.runPaged().count;
            log.debug("invoiceSearchObj result count", searchResultCount);
            return this.formatSavedSearch(invoiceSearchObj, 'invoiceSearchObj', pageNumber);
        },
        parseRequestBody: function (body) {
            try {
                return JSON.parse(body);
            } catch (err) {
                return false;
            }
        },
        processPOST: function (data) {
            data = this.parseRequestBody(data);
            if (!data)
                return this.formatResponse({
                    "status": "FAILURE",
                    "message": "ERROR WHILE PARSING JSON",
                    "timeStamp": Date.now()
                }, false, '@main.parseRequestBody');
            var invoiceSearch = this.searchInvoiceRTPOS(assignDefaultValue(data.pageNumber, 1));
            if (invoiceSearch)
                return invoiceSearch;
            return this.formatResponse({
                "status": "FAILURE",
                "message": "COULDN'T EXECUTE SCRIPT",
                "timeStamp": Date.now()
            }, false, '@main.processPOST', ERROR_STACK.length ? ERROR_STACK : false);


        },
        post: function (requestBody) {
            /**
             * Function called upon sending a POST request to the RESTlet.
             *
             * @param {string | Object} requestBody - The HTTP request body; request body will be passed into function as a string when request Content-Type is 'text/plain'
             * or parsed into an Object when request Content-Type is 'application/json' (in which case the body must be a valid JSON)
             * @returns {string | Object} HTTP response body; return string when request Content-Type is 'text/plain'; return Object when request Content-Type is 'application/json'
             * @since 2015.2
             */
            return this.processPOST(requestBody);
        },
        formatResponse: function (SHORT_RESPONSE, LONG_RESPONSE, FAULT_POSITION, MORE_INFO) {
            var responseObj = {};
            responseObj.summary = (SHORT_RESPONSE) ? SHORT_RESPONSE : "FAILURE";
            responseObj.details = (LONG_RESPONSE) ? LONG_RESPONSE : null;
            responseObj.traceback = (FAULT_POSITION) ? FAULT_POSITION : null;
            responseObj.information = (MORE_INFO) ? MORE_INFO : null;
            return JSON.stringify(responseObj);
        }
    }
    applyTryCatch(main, "main");
    return main;

});

Leave a comment

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