Description: We can use this solution to create Return Authorizations from the website for the guest shoppers and users so they can use this script to create RA without logged in.
Suitelet:
define(["N/record"]
/**
* @param {record} record
*/, (record) => {
"use strict";
/**
* Defines the Suitelet script trigger point.
* @param {Object} context
*/
const onRequest = (context) => {
try {
if (context.request.method === "POST") {
let params = JSON.parse(context.request.body);
log.debug("START @ RA onRequest", params);
const { salesorder, items, memo} = params;
let returns = record.transform({
fromType: "salesorder",
fromId: salesorder,
toType: "returnauthorization",
isDynamic: true,
});
let response = updateLines(returns, items);
if (response.success) {
returns = response.returns;
returns.setValue({
fieldId: 'memo',
value: memo,
ignoreFieldChange: true
});
returns.setValue({
fieldId: 'custbody14',
value: memo,
ignoreFieldChange: true
});
let returnsId = returns.save({
enableSourcing: true,
ignoreMandatoryFields: true
});
let returnAuthorization = record.load({
type: 'returnauthorization',
id: returnsId,
isDynamic: true
});
context.response.write(JSON.stringify({success: true, record : returnsId, tranid: returnAuthorization.getValue({ fieldId: 'tranid'})}));
} else {
context.response.write(JSON.stringify(response));
}
} else {
context.response.write(JSON.stringify({success: false, message: "only POST method is allowed"}));
}
} catch (e) {
log.error("Error @ onRequest of RA", e);
let errorResponse = { success: false, error: JSON.parse(e) };
context.response.write(JSON.stringify(errorResponse));
}
};
//@method updateLines function is used to update the returns lines that user selected with the returns reason.
const updateLines = (returns, returnsCollection) => {
try {
const lineCount = returns.getLineCount({
sublistId: "item",
});
if (lineCount > 0) {
for (let i = 0; i < lineCount; i++){
returns.selectLine({ sublistId: 'item', line: i });
let itemId = returns.getCurrentSublistValue({ sublistId: 'item', fieldId: 'id' });
let item = returnsCollection.find(line => line.id === itemId);
if (item && item !== null && JSON.stringify(item) !== "") {
returns.setCurrentSublistValue({ sublistId: 'item', fieldId: 'quantity', value: item.quantity });
returns.setCurrentSublistValue({ sublistId: 'item', fieldId: 'description', value: item.description });
} else {
returns.setCurrentSublistValue({ sublistId: 'item', fieldId: 'quantity', value: 0 });
}
returns.removeCurrentSublistSubrecord({ sublistId: 'item', fieldId: 'inventorydetail'});
returns.commitLine({ sublistId: 'item' });
}
return {success: true , returns : returns};
} else {
return {success: false , message: "No items found for returns."};
}
} catch (error) {
log.error("Error @ updateLines", error);
return {success: false , message: "Error occured during setLine", error: error};
}
};
return { onRequest };
});