Restlet to Create API for creating the Item Fulfillment from sales order

/**

 * @NApiVersion 2.1

 * @NScriptType Restlet

 */

define([‘N/record’, ‘N/error’, ‘N/currentRecord’],

    /**

 * @param{record} record

 * @param{error} error

 * @param{currentRecord} currentRecord

 */

    (record, error, currentRecord) => {

        /**

         * Defines the function that is executed when a POST request is sent to a RESTlet.

         * @param {string | Object} requestBody – The HTTP request body; request body is passed as a string when request

         *     Content-Type is ‘text/plain’ or parsed into an Object when request Content-Type is ‘application/json’ (in which case

         *     the body must be a valid JSON)

         * @returns {string | Object} HTTP response body; returns a string when request Content-Type is ‘text/plain’; returns an

         *     Object when request Content-Type is ‘application/json’ or ‘application/xml’

         * @since 2015.2

         */

        const post = (requestBody) => {

            try {

                let salesOrderId = requestBody.salesOrderId

                let itemDetails = requestBody.itemDetails;

                if (!salesOrderId || !itemDetails || !Array.isArray(itemDetails)) {

                    return { error: ‘Sales Order ID and item details are required and item details should be an array.’ }

                }          

                if(requestBody){                

                    let salesOrderFulfill = record.transform({

                        fromType : record.Type.SALES_ORDER,

                        fromId : salesOrderId,

                        toType : record.Type.ITEM_FULFILLMENT,

                        isDynamic : true

                    });

                    let allItemsFound = itemDetails.every(itemDetail => {

                        let lineNum = salesOrderFulfill.findSublistLineWithValue({

                            sublistId: ‘item’,

                            fieldId: ‘item’,

                            value: itemDetail.itemId

                        });

                        return lineNum !== 1;

                    });

                    if (!allItemsFound) {

                        return { error: ‘One or more items in the itemDetails are not found in the Item Fulfillment record.’ }

                    }                

                    itemDetails.forEach(itemDetail => {

                        let lineNum = salesOrderFulfill.findSublistLineWithValue({

                            sublistId: ‘item’,

                            fieldId: ‘item’,

                            value: itemDetail.itemId

                        });    

                        if (lineNum >= 0) {

                            salesOrderFulfill.selectLine({

                                sublistId: ‘item’,

                                line: lineNum

                            });

                            salesOrderFulfill.setCurrentSublistValue({

                                sublistId: ‘item’,

                                fieldId: ‘quantity’,

                                value: itemDetail.quantity

                            });

                            salesOrderFulfill.commitLine({

                                sublistId: ‘item’

                            });

                        }

                    });                      

                    let itemFulfill = salesOrderFulfill.save({

                        enableSourcing:true,

                        ignoreMandatoryFields:false

                    });

                    return itemFulfill

                }

            } catch (error) {

                return(error.message)

            }      

        }

        return {post}

    });

Leave a comment

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