Netsuite to Package AI Integration

When the Order Level Status update “Received in Delivery Terminal” it triggers the script to send the details to Package AI. 

Check if RMA is issued to that respective Order. 

If the RMA is not issued will fetch the details of each Sales Order and POST the data to the  Package AI.

/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 * @NModuleScope SameAccount
 */
/**

* Script Description

* This suitelet to send orders to Package AI.

*/

/*******************************************************************************
 *  
 * NetSuite Name :{JJ} AM-183 Send Orders to Package AI
 * Script ID :customscript_jj_send_order_to_package_ai
 * 
 * *****************************************************************************
 * 
 *  
 * $Author: Jobin & Jismi IT Services LLP $
 * 
 * DESCRIPTION
 * This suitelet to send orders to Package AI. 
 * The script is triggered from the User event of record on the Button Click.
 * 
 * Date Created :26th August 2019
 * 
 * REVISION HISTORY Update:
 * 
 * 
 * 
 ******************************************************************************/
define(['N/search', 'N/runtime', 'N/record', 'N/https', 'N/encode', 'N/ui/serverWidget', 'N/email', 'N/format'],
    function (search, runtime, record, https, encode, serverWidget, email, format) {
        var main = {
            onRequest: function (context) {
                var do_number = context.request.parameters.do_number
                log.debug("do_number", do_number)
                var deliveryorder = record.load({
                    type: record.Type.SALES_ORDER,
                    id: do_number
                });
                var jsonBody = main.jsonCreation(deliveryorder);
                if (jsonBody != false) {
                    var accessToken = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3BhY2thZ2UuYWkvIiwiaWF0IjoxNTY3NDkwMTMzLCJzdWIiOiJmd01rTG5Sb3BoZkYiLCJyb2xlIjoib3BlcmF0b3IiLCJhY2NvdW50SWQiOiJmSUg4OFk2UXNsWTAiLCJuYW1lIjoiRGV2IiwiYWxsb3dlZEh1YnMiOlsiZklJYVFsTnZxT3h1IiwiZklJYVFsQ0RaQkZtIl19.LduO0brvEqfZkxVGKoIw70zOvkmarQoeh64iAtuN_Uw'
                    var headerObj = {
                        "Authorization": "Bearer " + accessToken,
                        "Content-Type": 'application/json',
                        "Accept": 'application/json'
                    };
                    var response = https.post({
                        url: 'https://api.package.ai/am-sandbox/v1/orders',
                        headers: headerObj,
                        body: JSON.stringify(jsonBody),
                        json: true

                    });
                    log.debug("response", response)
                    if (response.code == 201) {
                        var serviceType = deliveryorder.getValue({
                            fieldId: 'custbody17'
                        });
                        var linenumber = deliveryorder.getLineCount({
                            sublistId: 'item'
                        });
                        if (serviceType == 2) {
                            for (var a = 0; a < linenumber; a++) {
                                deliveryorder.setSublistValue({
                                    sublistId: 'item',
                                    fieldId: 'custcol_item_level_statuses',
                                    line: a,
                                    value: 4
                                });
                            }
                            deliveryorder.setValue({
                                fieldId: 'custbody_order_level_status',
                                value: 18
                            });
                        }
                        if (serviceType == 5) {
                            for (var a = 0; a < linenumber; a++) {
                                deliveryorder.setSublistValue({
                                    sublistId: 'item',
                                    fieldId: 'custcol_item_level_statuses',
                                    line: a,
                                    value: 12
                                });
                            }
                            deliveryorder.setValue({
                                fieldId: 'custbody_order_level_status',
                                value: 58
                            });
                        }
                        var routeDateTime = main.getFormatTimeZone(new Date())
                        var historyset = "Order automatically routed to PAI on:" + routeDateTime;
                        deliveryorder.setValue({
                            fieldId: 'custbody_cl_order_history',
                            value: historyset
                        });
                        var data = JSON.parse(response.body)
                        log.debug("data", data.id)
                        deliveryorder.setValue({
                            fieldId: 'custbody_jj_package_ai_id',
                            value: data.id
                        });
                    }
                    var id = deliveryorder.save({
                        enableSourcing: false,
                        ignoreMandatoryFields: true
                    });
                } else
                    log.debug("check", "it have rma");
            },
            jsonCreation: function (deliveryorder) {
                var dataObj = {};
                dataObj.ordernumber = deliveryorder.getValue({
                    fieldId: 'tranid'
                });
                //AB update 29.08
                var releatedRec = deliveryorder.getText({
                    fieldId: 'custbody_jj_rma_number'
                });
                log.debug('releatedRec', releatedRec)
                var getValue = 0
                if (releatedRec.length > 0) {
                    for (var i = 0; i < releatedRec.length; i++) {
                        var index = releatedRec[i].indexOf('Return Authorization');
                        log.debug('index', index)
                        if (index == -1) {

                            continue;

                        } else
                            getValue = 1
                    }
                }
                var hubid = deliveryorder.getText({
                    fieldId: "custbody_delivery_branch"
                });
                if (hubid == "NJT" || hubid == "NCT") {

                } else {
                    getValue = 1
                }
                if (getValue != 1) {
                    var visiting = deliveryorder.getText({
                        fieldId: 'custbody17'
                    });

                    dataObj.bolnumber = deliveryorder.getValue({
                        fieldId: 'custbody_seller_bol_no'
                    });
                    dataObj.priority2 = deliveryorder.getText({
                        fieldId: 'custbody_p1_priority'
                    });
                    dataObj.priority1 = deliveryorder.getText({
                        fieldId: 'custbody_customer_loading_priority'
                    });
                    dataObj.dt_route = deliveryorder.getValue({
                        fieldId: "custbody_dt_delivery_route"
                    });
                    dataObj.origin = deliveryorder.getValue({
                        fieldId: 'custbody30'
                    });
                    dataObj.firstrecievedon = deliveryorder.getText({
                        fieldId: 'custbody_first_received_on'
                    });
                    dataObj.custbody_default_store_instructions = deliveryorder.getValue({
                        fieldId: 'custbody_default_store_instructions'
                    });
                    dataObj.delivery_route = deliveryorder.getValue({
                        fieldId: 'custbody_delivery_route'
                    });

                    //ab update end

                    dataObj.custbody_delivery_branch = deliveryorder.getText({
                        fieldId: "custbody_delivery_branch"
                    });
                    var shipadd = deliveryorder.getValue({
                        fieldId: "custbody_delivery_address_jj"
                    }); {
                        var shippingaddresss = JSON.parse(shipadd);
                        var addrname = shippingaddresss.addresse
                        addrname = addrname.split(" ")

                        dataObj.firstName = addrname[0]
                        var namelast = '';
                        for (var m = 1; m < addrname.length; m++) {
                            namelast += addrname[m] + " "
                        }
                        dataObj.lastName = namelast
                        dataObj.address1 = shippingaddresss.address1
                        dataObj.address2d = shippingaddresss.address2d
                        dataObj.city = shippingaddresss.city
                        dataObj.state = shippingaddresss.state
                        dataObj.zip = shippingaddresss.zip
                        dataObj.phone = shippingaddresss.phone
                        dataObj.email = shippingaddresss.email
                        dataObj.altphone = shippingaddresss.altphone
                    }
                    dataObj.shipdate = deliveryorder.getValue({
                        fieldId: 'custbody_first_received_on'
                    });
                    dataObj.deliveryinstruction = deliveryorder.getValue({
                        fieldId: 'custbody_default_store_instructions'
                    });
                    dataObj.memo = deliveryorder.getValue({
                        fieldId: 'memo'
                    });
                    dataObj.endDate = deliveryorder.getValue({
                        fieldId: 'custbody_eta_date_calc'
                    });
                    dataObj.startDate = deliveryorder.getValue({
                        fieldId: 'custbodyeta_date_calc_from'
                    });
                    var fields = deliveryorder.getSublistFields({
                        sublistId: 'item'
                    });
                    var lineObj = main.fetchLines(deliveryorder, fields);
                    log.debug("lineObj", lineObj)
                    var eachObj = {};
                    var itemArr = []
                    for (var key in lineObj) {
                        var keyObj = lineObj[key]
                        eachObj.title = keyObj.item_display;
                        eachObj.description = keyObj.custcol6;
                        eachObj.barcode = keyObj.custcol_serial_number;
                        eachObj.visitPurpose = visiting;
                        var weight = keyObj.custcol9
                        eachObj.load = { weight: weight }
                        itemArr.push(eachObj);
                        eachObj = {}
                        //eachObj.location = visiting;
                    }
                    var date = main.getFormatDate(new Date());
                    log.debug("date", date)
                    if (dataObj.endDate)
                        var endDate = main.getFormatDate(dataObj.endDate);

                    if (dataObj.startDate)
                        var startDate = main.getFormatDate(dataObj.startDate);
                    var jsonData = {
                        "hubId": "NJT",
                        "orderId": dataObj.ordernumber,
                        "bol": dataObj.bolnumber,
                        "visitPurpose": visiting,
                        "recipient": {
                            "firstName": dataObj.firstName,
                            "lastName": dataObj.lastName,
                            "phone1": dataObj.phone,
                            "phone2": dataObj.altphone,
                            "email": dataObj.email
                        },
                        "address": {
                            "streetAddress": dataObj.address1,
                            "city": dataObj.city,
                            "stateOrRegion": dataObj.state,
                            "zipCode": dataObj.zip,
                            "addressNotes": dataObj.address2d
                        },
                        //"shippingDate": date,
                        "deliverByDate": endDate,
                        "earliestShippingDate": startDate,
                        // "startTime": "09:00",
                        // "finishTime": "13:30",
                        // "visitDuration": 30,
                        "deliveryNotes": dataObj.deliveryinstruction + "\n" + dataObj.memo,
                        // "cashOnDelivery": "147",
                        // "salesRep": "sales rep 1",
                        "items": itemArr,
                        "extraParams": {
                            "prioritylevel": (dataObj.priority1 + " , " || dataObj.priority2) || ' ',
                            "Route": dataObj.dt_route || ' ',
                            "Delivery route": dataObj.delivery_route || ' ',
                            "origin": dataObj.origin || ' ',
                            "First recieve on": dataObj.firstrecievedon || ' ',
                            "Store instruction": dataObj.custbody_default_store_instructions || ' '
                        }
                    }
                    log.debug('jsonData', jsonData)
                    return jsonData;
                } else
                    return false
            },
            getFormatDate: function (dateValue) {
                log.debug("dateValue", dateValue)
                var NEWYORK = format.format({
                    value: dateValue,
                    type: format.Type.DATETIME,
                    timezone: format.Timezone.AMERICA_NEW_YORK
                });
                var initialFormattedDateString = NEWYORK;
                var parsedDateStringAsRawDateObject = format.parse({
                    value: initialFormattedDateString,
                    type: format.Type.DATE
                });
                var formattedDateString = format.format({
                    value: parsedDateStringAsRawDateObject,
                    type: format.Type.DATE
                });
                formattedDateString = formattedDateString.split("-")
                var dd = new Date(formattedDateString).getDate()
                var mm = new Date(formattedDateString).getMonth() + 1
                if (mm < 10) {
                    mm = "0" + mm
                }
                if (dd < 10) {
                    dd = "0" + dd
                }
                var yyyy = new Date(formattedDateString).getFullYear()
                var date = yyyy + "-" + mm + "-" + dd
                return date;
            },
            getFormatTimeZone: function (dateValue) {
                var NEWYORK = format.format({
                    value: dateValue,
                    type: format.Type.DATETIME,
                    timezone: format.Timezone.AMERICA_NEW_YORK
                });
                log.debug("NEWYORK", NEWYORK)
                return NEWYORK;
            },
            fetchLines: function (deliveryorder, fields) {
                var numLines = deliveryorder.getLineCount({
                    sublistId: 'item'
                });
                var lineObj = {};
                for (var i = 0; i < numLines; i++) {
                    lineObj[i] = {};
                    for (var k = 0; k < fields.length; k++) {
                        lineObj[i][fields[k]] = deliveryorder.getSublistValue({
                            fieldId: fields[k],
                            sublistId: 'item',
                            line: i
                        });
                    }
                }

                return lineObj;
            },
        }
        for (var key in main) {
            if (typeof main[key] === 'function') {
                main[key] = trycatch(main[key], key);
            }
        }

        function trycatch(myfunction, key) {
            return function () {
                try {
                    return myfunction.apply(this, arguments);
                } catch (e) {
                    log.debug("e in  " + key, e);
                }
            }
        };
        return main;
    });

Leave a comment

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