Fulfil orders in Shopify from NetSuite.

Jira Code: DAZ-28

The aim of the task is to fulfil orders in Shopify from NetSuite on the creation of item fulfilment. Partial fulfilment and fully fulfilment are all achievable using this script.

DAZ-10 JJ UE Fulfill order from NS to Shopify

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */
define(['N/file', 'N/http', 'N/https', 'N/record', 'N/runtime', 'N/search'],

    function(file, http, https, record, runtime, search) {

        //var itemObj = {};
        var ITEM_OBJ = {};
        var itemDetailArr = [];
        var order_Ifid;
        var order_Iflineid = {};
        var orderlist_Details = [];
        var order_List = {};

        var main = {

            afterSubmit: function(scriptContext) {
                try {
                    if (scriptContext.type == "create") {

                        var itemFmntId = scriptContext.newRecord.id;
                        log.debug("Item fullfillment ID:", itemFmntId);

                        var itemFmntRec = scriptContext.newRecord;
                        //log.debug("Item fullfillment Record:", itemFmntRec);

                        var createdFrom = itemFmntRec.getValue({
                            fieldId: 'createdfrom'
                        });
                        log.debug("createdFrom", createdFrom);

                        if (createdFrom) {
                            var externalId = search.lookupFields({
                                type: search.Type.SALES_ORDER,
                                id: createdFrom,
                                columns: ['externalid']
                            })
                            externalId = externalId.externalid[0].value;
                            log.debug('externalId', externalId);
                            if (externalId.indexOf('_') > -1) {
                                externalId = externalId.split('_')[1];
                                log.debug('Modified externalId', externalId);
                            }
                        }

                        var customer = itemFmntRec.getValue({
                            fieldId: 'entity'
                        });
                        //log.debug("customer", customer);

                        var postingPeriod = itemFmntRec.getValue({
                            fieldId: 'postingperiod'
                        });
                        //log.debug("postingPeriod", postingPeriod);

                        var linesNum = itemFmntRec.getLineCount({
                            sublistId: 'item'
                        });
                        //log.debug("linesNum", linesNum);

                        for (var i = 0; i < linesNum; i++) {
                            var fulfilled = itemFmntRec.getSublistValue({ sublistId: 'item', fieldId: 'itemreceive', line: i });
                            if (fulfilled == true) {
                                var itemObj = {};
                                itemObj.item = itemFmntRec.getSublistValue({ sublistId: 'item', fieldId: 'item', line: i });
                                //itemObj.quantity = itemFmntRec.getSublistValue({ sublistId: 'item', fieldId: 'itemquantity', line: i });
                                itemObj.quantity = itemFmntRec.getSublistValue({ sublistId: 'item', fieldId: 'quantity', line: i });
                                //itemObj.fufilled = fulfilled;
                                itemDetailArr.push(itemObj);
                            }
                        }
                        log.debug("itemDetailArr", itemDetailArr);
                        var trackingNumberArr = [];
                        var linesNumPackage = itemFmntRec.getLineCount({
                            sublistId: 'package'
                        });
                        for (var i = 0; i < linesNumPackage; i++) {
                            var trackingNumber = itemFmntRec.getSublistText({ sublistId: 'package', fieldId: 'packagetrackingnumber', line: i })
                            if (trackingNumber)
                                trackingNumberArr.push(trackingNumber);
                        }
                        log.debug("trackingNumberArr", trackingNumberArr.length);


                        // fetch order and all item details
                        var response = https.get({
                            url: 'https://bfbb2c59c5c96793ca4acddc69ac3e70:c3d1104a816cd8b3ee224b2697ae266d@7daze-manufacturing.myshopify.com/admin/api/2019-04/orders/' + externalId + '.json',
                            headers: {
                                "Accept": "application/json",
                                "Content-Type": "application/json"
                            }
                        });
                        var parsedBodyContent = JSON.parse(response.body);

                        var orderArr = [];
                        for (var i = 0; i < Object.keys(parsedBodyContent.order.line_items).length; i++) {
                            var orderObj = {};
                            orderObj.lineItemId = parsedBodyContent.order.line_items[i].id; //line item id
                            orderObj.variant_id = parsedBodyContent.order.line_items[i].variant_id; //variant_id
                            orderObj.sku = parsedBodyContent.order.line_items[i].sku; //sku
                            orderArr.push(orderObj);
                        }
                        //change
                        //orderArr[0].sku = 5589;
                        log.debug("orderArr", orderArr);

                        //log.debug('')


                        var arr = [];

                        for (var i = 0; i < itemDetailArr.length; i++) {
                            log.debug('i', i);
                            for (var j = 0; j < orderArr.length; j++) {
                                log.debug('j', j);

                                if (orderArr[j].sku) {
                                    log.debug('SKU exists');
                                    if (orderArr[j].sku == itemDetailArr[i].item) {
                                        var obj = {};
                                        //itemDetailArr[i].internalId = orderArr[i].lineItemId;
                                        obj.id = orderArr[j].lineItemId;
                                        obj.quantity = itemDetailArr[i].quantity;
                                        arr.push(obj);
                                        log.debug('arr', arr);
                                    }
                                } else {
                                    log.debug('SKU does not exist');
                                    var extId;
                                    var itemSearchObj = search.create({
                                        type: "item",
                                        filters: [
                                            ["type", "anyof", "InvtPart", "NonInvtPart"],
                                            "AND",
                                            ["externalidstring", "isnotempty", ""],
                                            "AND",
                                            ["internalidnumber", "equalto", itemDetailArr[i].item]
                                        ],
                                        columns: [
                                            search.createColumn({ name: "externalid", label: "External ID" }),
                                            search.createColumn({ name: "internalid", label: "Internal ID" })
                                        ]
                                    });
                                    var searchResultCount = itemSearchObj.runPaged().count;
                                    itemSearchObj.run().each(function(result) {
                                        extId = result.getValue(itemSearchObj.columns[0])
                                        return false;
                                    });

                                    log.debug('extId', extId);

                                    extId = extId.toString();
                                    if (extId.indexOf('/') > -1) {
                                        extId = extId.split('/')[1];
                                        log.debug('Modified externalId', extId);
                                    }

                                    if (orderArr[j].variant_id == extId) {
                                        var obj = {};
                                        //itemDetailArr[i].internalId = orderArr[i].lineItemId;
                                        obj.id = orderArr[j].lineItemId;
                                        obj.quantity = itemDetailArr[i].quantity;
                                        arr.push(obj);
                                        log.debug('arr', arr);
                                    }
                                }

                            }
                        }
                        main.createItemFmnt(externalId, arr, createdFrom, externalId, trackingNumberArr);
                    }
                } catch (er) {
                    log.debug("err@afterSubmit", er);
                }
            },
            createItemFmnt: function(externalId, arr, soId, externalId, trackingNumberArr) {
                try {
                    log.debug('trackingNumberArr', trackingNumberArr);

                    if (trackingNumberArr.length != '') {
                        var responseFulfillment = https.post({
                            url: 'https://bfbb2c59c5c96793ca4acddc69ac3e70:c3d1104a816cd8b3ee224b2697ae266d@7daze-manufacturing.myshopify.com/admin/api/2019-04/orders/' + externalId + '/fulfillments.json',
                            //url: 'https://bfbb2c59c5c96793ca4acddc69ac3e70:c3d1104a816cd8b3ee224b2697ae266d@7daze-manufacturing.myshopify.com/admin/api/2019-04/orders/' + externalId + '/fulfillments/982289383511/cancel.json',
                            headers: {
                                "Accept": "application/json",
                                "Content-Type": "application/json"
                            },
                            body: JSON.stringify({
                                "fulfillment": {
                                    "location_id": 20924424,
                                    "tracking_numbers": trackingNumberArr,
                                    "line_items": arr,
                                    "notify_customer": true
                                }
                            })
                            //body: ""
                        })
                        var responseFulfillment = JSON.parse(responseFulfillment.body);
                        log.debug("responseFulfillment", responseFulfillment);
                    } else {
                        var responseFulfillment = https.post({
                            url: 'https://bfbb2c59c5c96793ca4acddc69ac3e70:c3d1104a816cd8b3ee224b2697ae266d@7daze-manufacturing.myshopify.com/admin/api/2019-04/orders/' + externalId + '/fulfillments.json',
                            //url: 'https://bfbb2c59c5c96793ca4acddc69ac3e70:c3d1104a816cd8b3ee224b2697ae266d@7daze-manufacturing.myshopify.com/admin/api/2019-04/orders/' + externalId + '/fulfillments/982289383511/cancel.json',
                            headers: {
                                "Accept": "application/json",
                                "Content-Type": "application/json"
                            },
                            body: JSON.stringify({
                                "fulfillment": {
                                    "location_id": 20924424,
                                    "tracking_number": null,
                                    "line_items": arr,
                                    "notify_customer": true
                                }
                            })
                            //body: ""
                        })
                        var responseFulfillment = JSON.parse(responseFulfillment.body);
                        log.debug("responseFulfillment", responseFulfillment);
                    }

                    // main.createInvCusPmnt(soId, externalId)
                } catch (er) {
                    log.debug('er', er);
                }
            }
        }
        return main
    });

Leave a comment

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