Refund orders in Shopify from NetSuite

Jira Code: DAZ-28

This task enables to refund orders in Shopify from Netsuite on creation of Cash Refund. Once a cash refund is issued from NetSuite, it will also impact in Shopify. It means the order will be refunded in Shopify too.

DAZ-25 JJ UE Refund Action NS Shopify

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */
/*******************************************************************************
 * DAZ-25 UE Make the order unfulfilled in Shopify from Netsuite   
 * **************************************************************************
 * 
 * Date: 21-05-2019
 * 
 * Author: Jobin & Jismi IT Services LLP
 * 
 *****************************************************************************
 **/
define(['N/format', 'N/url', 'N/search', 'N/runtime', 'N/record', 'N/https', 'N/ui/serverWidget'],

    function (format, url, search, runtime, record, https, serverWidget) {
        var main = {
            afterSubmit: function (scriptcontext) {
                try {
                    if (scriptcontext.type == "create") {
                        var CRId = scriptcontext.newRecord.id;
                        log.debug('CRId', CRId);
                        var cashRefundRec = record.load({ type: record.Type.CASH_REFUND, id: CRId })
                        var cashRefundRecLines = cashRefundRec.getLineCount({ sublistId: 'item' });
                        log.debug('cashRefundRecLines', cashRefundRecLines);
                        var itemArr = [];
                        for (var i = 0; i < cashRefundRecLines; i++) {
                            var itemObj = {};
                            itemObj.item = cashRefundRec.getSublistValue({ sublistId: 'item', fieldId: 'item', line: i })
                            itemObj.quantity = cashRefundRec.getSublistValue({ sublistId: 'item', fieldId: 'quantity', line: i })
                            itemArr.push(itemObj);
                        }
                        log.debug('itemArr', itemArr);

                        var createdFromRMA = cashRefundRec.getValue({ fieldId: 'createdfrom' })
                        log.debug('createdFromRMA', createdFromRMA);

                        var createdFromInv = search.lookupFields({
                            type: search.Type.RETURN_AUTHORIZATION,
                            id: createdFromRMA,
                            columns: ['createdfrom']
                        })
                        createdFromInv = createdFromInv.createdfrom[0].value;
                        log.debug('createdFromInv', createdFromInv);


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

                            // }
                        }
                        // if possible, update order fulfillment status using PUT; not able to be done as of now


                        if (externalId) {

                            // 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);
                            }
                            log.debug('orderArr', orderArr);

                            // var orderDetail = main.getOrderDetails(externalId);
                            // lineItemsOrder = orderDetail.order.line_items;
                            // //log.debug('lineItemsOrder', lineItemsOrder);

                            // if (lineItemsOrder.length != 0) {
                            //     var arr = [];
                            //     for (var j = 0; j < lineItemsOrder.length; j++) {
                            //         var obj = {
                            //             line_itemId: lineItemsOrder[j].id,
                            //             line_itemTitle: lineItemsOrder[j].title,
                            //             line_itemQty: lineItemsOrder[j].quantity
                            //         }
                            //         arr.push(obj);
                            //     }
                            //     log.debug('arr', arr);
                            // }
                            //var setRefund = createRefund(arr, externalId)
                        }

                        var arr = [];

                        for (var i = 0; i < itemArr.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 == itemArr[i].item) {
                                        var obj = {};
                                        //itemDetailArr[i].internalId = orderArr[i].lineItemId;
                                        obj.id = orderArr[j].lineItemId;
                                        obj.quantity = itemArr[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", itemArr[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 = itemArr[i].quantity;
                                        arr.push(obj);
                                        log.debug('arr', arr);
                                    }
                                }

                            }
                        }
                    }

                    var setRefund = main.createRefund(arr, externalId);
                }
                catch (er) {
                    log.debug('err@afterSubmit', er);
                }


            },
            // getOrderDetails: function (id) {
            //     try {
            //         var orderDetail = https.get({
            //             url: 'https://bfbb2c59c5c96793ca4acddc69ac3e70:c3d1104a816cd8b3ee224b2697ae266d@7daze-manufacturing.myshopify.com/admin/api/2019-04/orders/' + id + '.json',
            //             headers: {
            //                 "Accept": "application/json",
            //                 "Content-Type": "application/json"
            //             }
            //         });
            //         var orderDetail = JSON.parse(orderDetail.body);
            //         //orderDetail = orderDetail.body;
            //         //orderDetail = orderDetail.order;
            //         //log.debug("orderDetail", orderDetail);
            //         return orderDetail;
            //     }
            //     catch (er) {
            //         log.debug('err@getOrderDetails', er);
            //     }
            // },
            createRefund: function (arr, orderId) {
                try {
                    var refund_line_items = [];
                    for (var k = 0; k < arr.length; k++) {
                        refundObj = {};

                        refundObj.line_item_id = arr[k].id;
                        refundObj.quantity = arr[k].quantity;
                        refundObj.restock_type = "return";
                        refundObj.location_id = "20924424";

                        refund_line_items.push(refundObj);
                    }

                    var refundResponse = https.post({
                        url: 'https://bfbb2c59c5c96793ca4acddc69ac3e70:c3d1104a816cd8b3ee224b2697ae266d@7daze-manufacturing.myshopify.com/admin/api/2019-04/orders/' + orderId + '/refunds.json',
                        headers: {
                            "Accept": "application/json",
                            "Content-Type": "application/json"
                        },
                        body: JSON.stringify({
                            "refund": {
                                "refund_line_items": refund_line_items
                            }
                        })
                    });
                    //log.debug('refundResponse', refundResponse)
                    var refundResponse = JSON.parse(refundResponse.body);
                    log.debug("Parsed refundResponse", refundResponse);
                } catch (er) {
                    log.debug('err@createRefund', er);
                }
            }
        }
        return main;
    });

Leave a comment

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