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;
});