PO Creation Through Restlet

Scenario:

The client needs a Restlet API that will create a PO in NetSuite

/**
 * @NApiVersion 2.1
 * @NScriptType Restlet
 */
/*******************************************************************************
 * CLIENTNAME: Branded
 * Create a Restlet to create a PO in NetSuite
 *************************************************************************
 * Date : 04-01-2022
 *
 * Author: Jobin & Jismi IT Services LLP
 * Script Description :
 * Create a Restlet to create a PO in NetSuite.
 * Date created :11-01-2022
 * REVISION HISTORY
 * Revision 1.0 ${11-01-2022}
 *
 ******************************************************************************/
define(['N/error', 'N/record','N/format'],
    /**
     * @param{error} error
     * @param{record} record
     */
    (error, record,format) => {
        
        /**
         * To Generate Full Address
         * @param{Object} obj - Object contains address
         * @param{string} obj.address1 - Object contains address
         * @param{string} obj.city - Object contains address
         * @param{string} obj.state - Object contains address
         * @param{string} obj.country - Object contains address
         * @param{string} obj.zip - Object contains address
         * @returns {Boolean|string} - formatted the object into address text
         */
        function generateAddressText(obj) {
            // if(!obj?.address1 || !obj?.city )
            //     return false;

            return obj?.address1 + "\n" + obj?.city + "\n" + obj?.state + "\n" + obj?.country + "\n" + obj?.zip;
        }

        /**
         *
         * @param dateValue
         * @returns {Date|string|number}
         */
        function generateDate(dateValue){

            let day=dateValue.getDate()+1;
            let month=dateValue.getMonth()+1;
            let year=dateValue.getFullYear();
            let org=month+"/"+day+"/"+year
            //let org=day+"."+month+"."+year;
            let date=tdate=format.parse({
                value:org,type:format.Type.DATE
            });
            log.debug("date2",date);
            return date;
        }

        /**
         * 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 {

                //Checking Body Is Fields Empty
                if (!requestBody?.bodyfield)
                    return JSON.stringify({
                        summary: {
                            message: "FAILED",
                            reason: "BODY_FIELD_MISSING",
                            error: ["Body field is empty"]

                        },
                        details: []
                    });

                //Checking Record Type
                let type = requestBody.type;
                if (type !== "purchaseorder")
                    return JSON.stringify({
                        summary: {
                            message: "FAILED",
                            reason: "INVALID_RECORD_TYPE",
                            error: ["Record Type Is Different"]

                        },
                        details: []
                    });
                if (!(requestBody?.sublist?.item && util.isArray(requestBody?.sublist?.item) && requestBody?.sublist?.item.length) && !(requestBody?.sublist?.expense))
                    return JSON.stringify({
                        summary: {
                            message: "FAILED",
                            reason: "SUBLIST_MISSING",
                            error: ["No Content in Sublist"]

                        },
                        details: []
                    });

                const bodyFileds = [
                    {
                        fieldId: 'entity',
                        value: requestBody.bodyfield.vendor,
                        text: null,
                        isMandatory: true,
                    },
                    {
                        fieldId: 'subsidiary',
                        value: requestBody.bodyfield.subsidiary,
                        text: null,
                        isMandatory: false,
                    },
                    {
                        fieldId: 'trandate',
                        value: new Date(requestBody.bodyfield.trandate),
                        text: null,
                        isMandatory: false,
                    },
                    {
                        fieldId: 'duedate',
                        value: new Date(requestBody.bodyfield['recieveby']),
                        text: null,
                        isMandatory: false,
                    },
                   

                ]



                // Checking Mandatory Fields
                for (let ele of bodyFileds) {
                    log.debug({title: ele.fieldId, details: ele.value})
                    if (!ele.value && !ele.text && ele.isMandatory) {
                        return JSON.stringify({
                            summary: {
                                message: "FAILURE",
                                reason: "FIELD_IS_MANDATORY",
                                error: [ele.fieldId + " Field Is Mandatory"]
                            },
                            details: []
                        })
                    }
                }

                // Purchase Order Creation
                var objRecord = record.create({
                    type: record.Type.PURCHASE_ORDER,
                    isDynamic: true
                });


                // Setting Values in body Field
                for (let ele of bodyFileds) {
                    if (ele.fieldId === 'trandate') {
                        // let tdate=generateDate(ele.value)
                        // log.debug("Date in body",tdate);
                        objRecord.setValue({
                            fieldId: ele.fieldId,
                            value: ele.value
                        });
                    }
                    if (ele.fieldId === 'recieveby') {
                        // let tdate=generateDate(ele.value)
                        // log.debug("Date in body",tdate);
                        objRecord.setValue({
                            fieldId: ele.fieldId,
                            value: ele.value
                        });
                    }
                    if (ele.text) {
                        objRecord.setText({
                            fieldId: ele.fieldId,
                            value: ele.text
                        });
                    }

                 
                     else {
                        objRecord.setValue({
                            fieldId: ele.fieldId,
                            value: ele.value
                        });
                    }
                    objRecord.setValue({
                        fieldId: "department",
                        value: 12
                    })

                }

                //Setting Values In Item Sublist Field
                if (requestBody?.sublist?.item && util.isArray(requestBody?.sublist?.item) && requestBody?.sublist?.item.length > 0) {
                    const fieldMap = [{
                        fieldId: 'item',
                        jsonKey: 'item',
                        isValue: true,
                        isText: false
                    },
                        {
                            fieldId: 'quantity',
                            jsonKey: 'quantity',
                            isValue: true,
                            isText: false
                        },
                       
                        {
                            fieldId: 'class',
                            jsonKey: 'class',
                            isValue: true,
                            isText: false
                        },
                    ]

                    for (let ele of requestBody.sublist.item) {
                        objRecord.selectNewLine({
                            sublistId: 'item'
                        });
                        for (let field of fieldMap) {
                            if (field.isText) {
                                objRecord.setCurrentSublistText({
                                    sublistId: 'item',
                                    fieldId: field.fieldId,
                                    text: ele[field.jsonKey]
                                });

                            } else {
                                objRecord.setCurrentSublistValue({
                                    sublistId: 'item',
                                    fieldId: field.fieldId,
                                    value: ele[field.jsonKey]
                                });

                            }

                        }
                        objRecord.commitLine({
                            sublistId: 'item'
                        });
                    }


                }


                //Setting Values In Expense Sublist Field
                if (requestBody?.sublist?.expense && util.isArray(requestBody?.sublist?.expense) && requestBody?.sublist?.expense.length > 0) {
                    const fieldMap = [{
                        fieldId: 'category',
                        jsonKey: 'category',
                        isValue: true,
                        isText: false
                    },
                        {
                            fieldId: 'amount',
                            jsonKey: 'amount',
                            isValue: true,
                            isText: false
                        },
                        {
                            fieldId: 'department',
                            jsonKey: 'department',
                            isValue: true,
                            isText: false
                        },
                        {
                            fieldId: 'class',
                            jsonKey: 'class',
                            isValue: true,
                            isText: false
                        },
                    ]

                    for (let ele of requestBody.sublist.expense) {
                        objRecord.selectNewLine({
                            sublistId: 'expense'
                        });
                        for (let field of fieldMap) {
                            if (field.isText) {
                                objRecord.setCurrentSublistText({
                                    sublistId: 'expense',
                                    fieldId: field.fieldId,
                                    text: ele[field.jsonKey]
                                });
                                log.debug("problem text", field.fieldId)
                            } else {
                                log.debug("value", ele[field.jsonKey])
                                objRecord.setCurrentSublistValue({
                                    sublistId: 'expense',
                                    fieldId: field.fieldId,
                                    value: ele[field.jsonKey]
                                });
                                log.debug("problem value", field.fieldId)

                            }

                        }
                        objRecord.commitLine({
                            sublistId: 'expense'
                        });
                    }


                }

                //Purchase Order Saving
                let recPO = objRecord.save({
                    ignoreMandatoryFields: false
                });
                log.debug("PO record", recPO)
                return JSON.stringify({
                    summary: {
                        message: "SUCCESS",
                        reason: "RECORD_CREATED",
                        error: []
                    },
                    details: [{
                        internalId: recPO
                        //internalID:"Success"
                    }
                    ]

                })


            } catch (e) {
                log.debug(e);
                return JSON.stringify({
                    summary: {
                        message: "FAILURE",
                        reason: "ERROR",
                        error: [{name: e?.name, message: e?.message}]
                    },
                    details: []
                });

            }

        }

        

        return { post}

    });

Leave a comment

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