Suitelet API To fetch Order Details From NetSuite

Clients need a suitelet API to present the Sales Order Information on the Website to create RMa record for the Sales Order.

/**
 * @NApiVersion 2.1
 * @NScriptType Suitelet
 */
define(['N/https', 'N/record', 'N/search', 'N/ui/serverWidget', 'N/url'],
    /**
     * @param{https} https
     * @param{record} record
     * @param{search} search
     * @param{serverWidget} serverWidget
     * @param{url} url
     */
    (https, record, search, serverWidget, url) => {

        function checkForParameter(parameter) {
            if (parameter !== "" && parameter !== null && parameter !== undefined && parameter !== false && parameter !== "null"
                && parameter !== "undefined" && parameter !== " " && parameter !== 'false') {
                return true;
            } else {
                log.debug("empty")
                return false;
            }
        }

        function checkCustomer(name,email){
            try{
                var customerSearchObj = search.create({
                    type: "customer",
                    filters:
                        [
                            ["email","is",email]
                        ],
                    columns:
                        [
                            search.createColumn({
                                name: "entityid",
                                sort: search.Sort.ASC,
                                label: "ID"
                            }),
                            search.createColumn({name: "altname", label: "Name"}),
                            search.createColumn({name: "email", label: "Email"}),
                            search.createColumn({name: "internalid", label: "Internal ID"})
                        ]
                });
                var searchResultCount = customerSearchObj.runPaged().count;
                let customerDetails=[]
                if(searchResultCount>0){
                    customerSearchObj.run().each(function(result){
                        let obj={}
                        obj.name=result.getValue({name: "altname", label: "Name"})
                        obj.internalID=result.getValue({name: "internalid", label: "Internal ID"});
                        obj.email=result.getValue({name: "internalid", label: "Internal ID"});
                        customerDetails.push(obj)
                        return true;
                    });
                }
                return customerDetails;


            }catch (e) {
                log.debug("error@CheckCustomer",e)
                let responseBody={
                    'status': 500,
                    'message': e.message,
                    'isSuccess': false,
                }
                return scriptContext.response.write(JSON.stringify(responseBody))
            }
        }

        function toFindSODetals(orderID){
            try{
                var salesorderSearchObj = search.create({
                    type: "salesorder",
                    filters:
                        [
                            ["type","anyof","SalesOrd"],
                            "AND",
                            ["status","anyof","SalesOrd:D","SalesOrd:E","SalesOrd:F","SalesOrd:G","SalesOrd:B"],
                            "AND",
                            ["mainline","is","F"],
                            "AND",
                            ["shipping","is","F"],
                            "AND",
                            ["quantityshiprecv","greaterthan","0"],
                            // "AND",
                            // ["customermain.internalid","anyof",customerID],
                            "AND",
                            ["taxline","is","F"],
                            "AND",
                            [[["numbertext","is",orderID]],"OR",[["formulatext: {otherrefnum}","is",orderID]]]
                        ],
                    columns:
                        [
                            search.createColumn({
                                name: "item",
                                summary: "GROUP",
                                label: "Item"
                            }),
                            search.createColumn({
                                name: "quantity",
                                summary: "GROUP",
                                label: "Quantity"
                            }),
                            search.createColumn({
                                name: "quantity",
                                join: "applyingTransaction",
                                summary: "SUM",
                                label: "Quantity"
                            }),
                            search.createColumn({
                                name: "line",
                                summary: "GROUP",
                                label: "Line ID"
                            }),
                            search.createColumn({
                                name: "formulanumeric",
                                summary: "SUM",
                                formula: "CASE WHEN {applyingtransaction.type} = 'Return Authorization' THEN {applyingtransaction.quantity} ELSE 0 END",
                                label: "Formula (Numeric)"
                            }),
                            search.createColumn({
                                name: "quantityshiprecv",
                                summary: "GROUP",
                                label: "Quantity Fulfilled/Received"
                            })
                        ]
                });
                var searchResultCount = salesorderSearchObj.runPaged().count;
                let orderDetails=[]
                log.debug("salesorderSearchObj result count",searchResultCount);
                if(searchResultCount>0){
                    salesorderSearchObj.run().each(function(result){
                        let itemQunatity=result.getValue({
                            name: "quantityshiprecv",
                            summary: "GROUP",
                            label: "Quantity Fulfilled/Received"
                        })
                        let appliedQuantity=result.getValue({
                            name: "formulanumeric",
                            summary: "SUM",
                            formula: "CASE WHEN {applyingtransaction.type} = 'Return Authorization' THEN {applyingtransaction.quantity} ELSE 0 END",
                            label: "Formula (Numeric)"
                        });
                        let mainQuantity=(parseInt(itemQunatity) + parseInt(appliedQuantity))
                        log.debug("mainQuantity",mainQuantity)
                        if(mainQuantity>0){
                            let obj={}
                            obj.item=result.getText({
                                name: "item",
                                summary: "GROUP",
                                label: "Item"
                            })
                            obj.quantity=mainQuantity
                            obj.lineId=result.getValue({
                                name: "line",
                                summary: "GROUP",
                                label: "Line ID"
                            })
                            orderDetails.push(obj)
                        }
                        // .run().each has a limit of 4,000 results
                        return true;
                    });
                }
                return orderDetails;
            }catch (e) {
                log.debug("error@toFindSODetails",e)
                let responseBody={
                    'status': 500,
                    'message': e.message,
                    'isSuccess': false,
                }
                return scriptContext.response.write(JSON.stringify(responseBody))
            }
        }

        /**
         * Defines the Suitelet script trigger point.
         * @param {Object} scriptContext
         * @param {ServerRequest} scriptContext.request - Incoming request
         * @param {ServerResponse} scriptContext.response - Suitelet response
         * @since 2015.2
         */
        const onRequest = (scriptContext) => {
            try {
                let method=scriptContext.request.method;
                log.debug("method",method)
                if(scriptContext.request.method==='POST'){
                    let login_key= scriptContext.request?.headers?.login_key;
                    log.debug("Login Key",login_key)
                    if(!login_key || login_key!=='c782779b77215248bb2372c545132ae1') {
                        let message = {
                            'status': 500,
                            'message': 'Invalid Login Attempt',
                            'isSuccess': false
                        }
                        return scriptContext.response.write(JSON.stringify(message))
                    }
                    let requestBody=JSON.parse(scriptContext.request.body);
                    log.debug("requestBody",requestBody);
                   
                    if (!checkForParameter(requestBody.first_name)) {
                        let message = {
                            'status': 500,
                            'message': 'First Name Is Empty',
                            'isSuccess': false
                        }
                        return scriptContext.response.write(JSON.stringify(message))
                    }
                    if (!checkForParameter(requestBody.last_name)) {
                        let message = {
                            'status': 500,
                            'message': 'Last Name Is Empty',
                            'isSuccess': false
                        }
                        return scriptContext.response.write(JSON.stringify(message))
                    }
                    if (!checkForParameter(requestBody.email)) {
                        let message = {
                            'status': 500,
                            'message': 'Email Is Empty',
                            'isSuccess': false
                        }
                        return scriptContext.response.write(JSON.stringify(message))
                    }
                    if (!checkForParameter(requestBody.phone)) {
                        let message = {
                            'status': 500,
                            'message': 'Phone Number Is Empty',
                            'isSuccess': false
                        }
                        return scriptContext.response.write(JSON.stringify(message))
                    }
                    if (!checkForParameter(requestBody.address.address1)) {
                        let message = {
                            'status': 500,
                            'message': 'Address1 Is Empty',
                            'isSuccess': false
                        }
                        return scriptContext.response.write(JSON.stringify(message))
                    }
                    if (!checkForParameter(requestBody.address.city)) {
                        let message = {
                            'status': 500,
                            'message': 'City Is Empty',
                            'isSuccess': false
                        }
                        return scriptContext.response.write(JSON.stringify(message))
                    }
                    if (!checkForParameter(requestBody.address.state)) {
                        let message = {
                            'status': 500,
                            'message': 'State Is Empty',
                            'isSuccess': false
                        }
                        return scriptContext.response.write(JSON.stringify(message))
                    }
                    if (!checkForParameter(requestBody.address.country)) {
                        let message = {
                            'status': 500,
                            'message': 'Country Is Empty',
                            'isSuccess': false
                        }
                        return scriptContext.response.write(JSON.stringify(message))
                    }
                    if (!checkForParameter(requestBody.order_id)) {
                        let message = {
                            'status': 500,
                            'message': 'Order ID Is Empty',
                            'isSuccess': false
                        }
                        return scriptContext.response.write(JSON.stringify(message))
                    }
                  
                    let orderDetails=toFindSODetals(requestBody.order_id);
                    if(orderDetails.length<=0){
                        let message = {
                            'status': 500,
                            'message': 'Order Doesnot Exist',
                            'isSuccess': false
                        }
                        return scriptContext.response.write(JSON.stringify(message))
                    }

                    let responseBody={
                        'status': 200,
                        'message': 'Order Found',
                        'isSuccess': true,
                        'order_id': requestBody.order_id,
                        'email': requestBody.email,
                        items: orderDetails
                    }
                    return scriptContext.response.write(JSON.stringify(responseBody))

                }


                //log.debug("request",scriptContext.request)

            }catch (e) {
                log.debug("error @ onRequest",e)
                let responseBody={
                    'status': 500,
                    'message': e.message,
                    'isSuccess': false,
                }
                return scriptContext.response.write(JSON.stringify(responseBody))
            }
        }

        return {onRequest}

    });

Leave a comment

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