Custom script for creating Return Authorization from the sales order

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

Leave a comment

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